diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6861967..151d97a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -121,6 +121,27 @@ jobs: done done + - name: Create platform tarballs + run: | + TAG=${{ steps.get_tag.outputs.TAG }} + for os in linux darwin windows; do + for arch in amd64 arm64; do + ext="" + if [ "$os" = "windows" ]; then + ext=".exe" + fi + staging="aict-${TAG}-${os}-${arch}" + mkdir -p "$staging/completions" + cp "aict-${os}-${arch}${ext}" "$staging/aict${ext}" + cp "aict-mcp-${os}-${arch}${ext}" "$staging/aict-mcp${ext}" + cp completions/aict.bash "$staging/completions/" + cp completions/aict.zsh "$staging/completions/" + cp LICENSE "$staging/" + tar czf "releases/aict-${TAG}-${os}-${arch}.tar.gz" "$staging" + rm -rf "$staging" + done + done + - name: Create checksums run: | cd releases @@ -183,3 +204,20 @@ jobs: name: releases path: releases/ retention-days: 30 + + # Update Homebrew tap formula on new releases + update-brew: + needs: [release] + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Update Homebrew formula + uses: mislav/bump-homebrew-formula-action@v3 + with: + formula-name: aict + homebrew-tap: synseqack/homebrew-aict + download-url: https://github.com/synseqack/aict/releases/download/${{ github.ref_name }}/aict-${{ github.ref_name }}-darwin-arm64.tar.gz + env: + COMMITTER_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} diff --git a/Formula/aict.rb b/Formula/aict.rb new file mode 100644 index 0000000..25b3965 --- /dev/null +++ b/Formula/aict.rb @@ -0,0 +1,40 @@ +# typed: false +# frozen_string_literal: true + +class Aict < Formula + desc "CLI tools with XML/JSON output for AI agents" + homepage "https://github.com/synseqack/aict" + version "1.0.3" + license "MIT" + + on_macos do + if Hardware::CPU.arm? + url "https://github.com/synseqack/aict/releases/download/v#{version}/aict-v#{version}-darwin-arm64.tar.gz" + sha256 "PLACEHOLDER" + elsif Hardware::CPU.intel? + url "https://github.com/synseqack/aict/releases/download/v#{version}/aict-v#{version}-darwin-amd64.tar.gz" + sha256 "PLACEHOLDER" + end + end + + on_linux do + if Hardware::CPU.arm? + url "https://github.com/synseqack/aict/releases/download/v#{version}/aict-v#{version}-linux-arm64.tar.gz" + sha256 "PLACEHOLDER" + elsif Hardware::CPU.intel? + url "https://github.com/synseqack/aict/releases/download/v#{version}/aict-v#{version}-linux-amd64.tar.gz" + sha256 "PLACEHOLDER" + end + end + + def install + bin.install "aict" + bin.install "aict-mcp" + bash_completion.install "completions/aict.bash" => "aict" + zsh_completion.install "completions/aict.zsh" => "_aict" + end + + test do + assert_match "aict", shell_output("#{bin}/aict --help") + end +end diff --git a/README.md b/README.md index 379c1a1..5206c47 100644 --- a/README.md +++ b/README.md @@ -50,18 +50,25 @@ Every field is labeled. Paths are always absolute. Timestamps are Unix integers. ## Install -**Go install (recommended):** +### Homebrew (macOS) -```sh +```bash +brew tap synseqack/aict +brew install aict +``` + +This installs both `aict` and `aict-mcp` binaries, plus shell completions for bash and zsh. + +### Go Install + +``` go install github.com/synseqack/aict@latest go install github.com/synseqack/aict/cmd/mcp@latest ``` -**Pre-built binaries** — download from [Releases](https://github.com/synseqack/aict/releases) for Linux, macOS (Intel + Apple Silicon), and Windows. - -**Build from source:** +### Build from Source -```sh +``` git clone https://github.com/synseqack/aict cd aict go build -o aict .