aptitude 0.3.1

A test harness for validating AI agent behavior against steering guides
Documentation
name: Release

on:
  push:
    tags:
      - 'v*'

permissions:
  contents: write

jobs:
  build:
    name: Build binaries
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        include:
          - os: ubuntu-latest
            target: x86_64-unknown-linux-gnu
            name: linux-x86_64
          - os: macos-latest
            target: x86_64-apple-darwin
            name: macos-x86_64
          - os: macos-latest
            target: aarch64-apple-darwin
            name: macos-arm64

    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}

      - name: Build
        run: cargo build --release --target ${{ matrix.target }}

      - name: Package
        run: |
          mkdir -p dist
          if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
            cp target/${{ matrix.target }}/release/aptitude.exe dist/aptitude-${{ matrix.name }}.exe
          else
            cp target/${{ matrix.target }}/release/aptitude dist/aptitude-${{ matrix.name }}
          fi

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: aptitude-${{ matrix.name }}
          path: dist/

  release:
    name: Create release
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Download all artifacts
        uses: actions/download-artifact@v4
        with:
          path: dist/

      - name: Create release
        uses: softprops/action-gh-release@v1
        with:
          files: dist/*/aptitude-*
          generate_release_notes: true
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  publish:
    name: Publish to crates.io
    needs: build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        uses: dtolnay/rust-toolchain@stable

      - name: Publish to crates.io
        run: cargo publish --allow-dirty
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  update-homebrew:
    name: Update Homebrew formula
    needs: release
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          token: ${{ secrets.HOMEBREW_TAP_TOKEN }}

      - name: Get version
        id: version
        run: echo "version=${GITHUB_REF#refs/tags/v}" >> $GITHUB_OUTPUT

      - name: Download and calculate SHA256 hashes
        id: hashes
        run: |
          VERSION="${{ steps.version.outputs.version }}"
          BASE_URL="https://github.com/tatimblin/aptitude/releases/download/v${VERSION}"

          # Download and calculate SHA256 for each binary
          ARM64_SHA=$(curl -sL "${BASE_URL}/aptitude-macos-arm64" | sha256sum | cut -d' ' -f1)
          X86_64_SHA=$(curl -sL "${BASE_URL}/aptitude-macos-x86_64" | sha256sum | cut -d' ' -f1)
          LINUX_SHA=$(curl -sL "${BASE_URL}/aptitude-linux-x86_64" | sha256sum | cut -d' ' -f1)

          echo "arm64_sha=${ARM64_SHA}" >> $GITHUB_OUTPUT
          echo "x86_64_sha=${X86_64_SHA}" >> $GITHUB_OUTPUT
          echo "linux_sha=${LINUX_SHA}" >> $GITHUB_OUTPUT

      - name: Update Homebrew formula
        run: |
          VERSION="${{ steps.version.outputs.version }}"
          ARM64_SHA="${{ steps.hashes.outputs.arm64_sha }}"
          X86_64_SHA="${{ steps.hashes.outputs.x86_64_sha }}"
          LINUX_SHA="${{ steps.hashes.outputs.linux_sha }}"

          # Update version and SHA256 hashes in the formula
          sed -i "s/version \".*\"/version \"${VERSION}\"/" aptitude.rb
          sed -i "s/PLACEHOLDER_ARM64_SHA/${ARM64_SHA}/g" aptitude.rb
          sed -i "s/PLACEHOLDER_X86_64_SHA/${X86_64_SHA}/g" aptitude.rb
          sed -i "s/PLACEHOLDER_LINUX_SHA/${LINUX_SHA}/g" aptitude.rb

      - name: Clone or update Homebrew tap
        run: |
          if [ ! -d "homebrew-aptitude" ]; then
            git clone https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/tatimblin/homebrew-aptitude.git homebrew-aptitude
          fi
          cp aptitude.rb homebrew-aptitude/

      - name: Commit and push to Homebrew tap
        run: |
          cd homebrew-aptitude
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git remote set-url origin https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/tatimblin/homebrew-aptitude.git
          git add aptitude.rb
          git commit -m "Update aptitude to v${{ steps.version.outputs.version }}" || exit 0
          git push