phi-agent 0.18.1

phi-agent — Rust AI Agent runtime framework: orchestration, sessions, streaming built-in. You define tools, prompts, domain knowledge.
Documentation
name: Release

on:
  push:
    tags: ["v*"]

jobs:
  # ── Gate: tests must pass before building release binaries ──
  # NOTE: At release time, Cargo.toml has pure version dependencies (no path/patch).
  # Dependencies are already published to crates.io, so no need to clone repos.
  test:
    name: test-gate
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5

      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt, clippy

      - name: Format check
        run: cargo fmt --all --check

      - name: Clippy
        run: cargo clippy --all-targets -- -D warnings

      - name: Test
        run: cargo test --features shell

      - name: Doc check
        run: cargo doc --no-deps
        env:
          RUSTDOCFLAGS: -D warnings

  # ── Build release binaries for all targets ──
  build:
    needs: test
    permissions:
      contents: write
    strategy:
      matrix:
        include:
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
            suffix: linux-x86_64
          - target: aarch64-unknown-linux-gnu
            os: ubuntu-latest
            suffix: linux-arm64
          - target: x86_64-apple-darwin
            os: macos-latest
            suffix: darwin-x86_64
          - target: aarch64-apple-darwin
            os: macos-latest
            suffix: darwin-arm64

    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v5

      - name: Install cross-compiler (Linux ARM64)
        if: matrix.target == 'aarch64-unknown-linux-gnu'
        run: |
          sudo apt-get update
          sudo apt-get install -y gcc-aarch64-linux-gnu
          echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV

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

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

      - name: Package
        shell: bash
        run: |
          cd target/${{ matrix.target }}/release
          tar -czf phi-${{ matrix.suffix }}.tar.gz phi
          echo "ASSET=phi-${{ matrix.suffix }}.tar.gz" >> $GITHUB_ENV

      - name: Upload to Release
        uses: softprops/action-gh-release@v2
        with:
          files: target/${{ matrix.target }}/release/phi-${{ matrix.suffix }}.tar.gz