release v3.0.12 #31
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| tags: | |
| - "v[0-9]+.[0-9]+.[0-9]+*" | |
| concurrency: | |
| group: release-${{ github.ref_name }} | |
| cancel-in-progress: false | |
| jobs: | |
| build: | |
| name: Build ${{ matrix.suffix }} | |
| runs-on: ${{ matrix.runner }} | |
| strategy: | |
| matrix: | |
| include: | |
| - target: aarch64-apple-darwin | |
| runner: macos-latest | |
| builder: cargo | |
| suffix: darwin-arm64 | |
| os: darwin | |
| cpu: arm64 | |
| libc: "" | |
| - target: x86_64-apple-darwin | |
| runner: macos-latest | |
| builder: cargo | |
| suffix: darwin-x64 | |
| os: darwin | |
| cpu: x64 | |
| libc: "" | |
| - target: x86_64-unknown-linux-musl | |
| runner: ubuntu-latest | |
| builder: cross | |
| suffix: linux-x64 | |
| os: linux | |
| cpu: x64 | |
| libc: "" | |
| - target: aarch64-unknown-linux-musl | |
| runner: ubuntu-latest | |
| builder: cross | |
| suffix: linux-arm64 | |
| os: linux | |
| cpu: arm64 | |
| libc: "" | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Install cross | |
| if: matrix.builder == 'cross' | |
| uses: taiki-e/install-action@cross | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: ${{ matrix.target }} | |
| - name: Build binaries | |
| run: | | |
| if [ "${{ matrix.builder }}" = "cross" ]; then | |
| cross build --release --target ${{ matrix.target }} --workspace --locked | |
| else | |
| cargo build --release --target ${{ matrix.target }} --workspace --locked | |
| fi | |
| - name: Stage GitHub release archive | |
| run: | | |
| mkdir -p gh-release | |
| ARCHIVE="consult-llm-${{ matrix.suffix }}.tar.gz" | |
| tar -czf "gh-release/$ARCHIVE" \ | |
| -C "target/${{ matrix.target }}/release" \ | |
| consult-llm consult-llm-monitor | |
| (cd gh-release && shasum -a 256 "$ARCHIVE" > "${ARCHIVE%.tar.gz}.sha256") | |
| - name: Upload GitHub release artifact | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: gh-release-${{ matrix.suffix }} | |
| path: gh-release/ | |
| retention-days: 1 | |
| github-release: | |
| name: GitHub Release | |
| needs: build | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Download release artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| path: artifacts | |
| pattern: gh-release-* | |
| merge-multiple: true | |
| - name: Create release | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| GH_REPO: ${{ github.repository }} | |
| run: | | |
| PRERELEASE="" | |
| if [[ "$GITHUB_REF_NAME" == *"beta"* ]]; then | |
| PRERELEASE="--prerelease" | |
| fi | |
| if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then | |
| echo "Release $GITHUB_REF_NAME already exists, uploading assets..." | |
| gh release upload "$GITHUB_REF_NAME" artifacts/* --clobber | |
| else | |
| gh release create "$GITHUB_REF_NAME" artifacts/* \ | |
| --verify-tag \ | |
| --generate-notes \ | |
| $PRERELEASE | |
| fi | |
| publish-crates: | |
| name: Publish to crates.io | |
| needs: github-release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| - name: Publish crates | |
| env: | |
| CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }} | |
| run: | | |
| CARGO_VERSION=$(cargo metadata --no-deps --format-version=1 \ | |
| | jq -r '.packages[] | select(.name=="consult-llm") | .version') | |
| TAG="${GITHUB_REF_NAME#v}" | |
| if [ "$TAG" != "$CARGO_VERSION" ]; then | |
| echo "Tag $TAG does not match Cargo.toml version $CARGO_VERSION" >&2 | |
| exit 1 | |
| fi | |
| publish_or_skip() { | |
| local crate="$1" | |
| local out | |
| out=$(cargo publish -p "$crate" 2>&1) && printf '%s\n' "$out" && return 0 | |
| if printf '%s\n' "$out" | grep -q "already exists"; then | |
| echo "$crate $CARGO_VERSION already published, skipping" | |
| return 0 | |
| fi | |
| printf '%s\n' "$out" >&2 | |
| return 1 | |
| } | |
| wait_for_crate() { | |
| local crate="$1" | |
| echo "Waiting for $crate $CARGO_VERSION to become available..." | |
| for i in $(seq 1 60); do | |
| if curl -sf -o /dev/null \ | |
| -H "User-Agent: consult-llm-release-workflow" \ | |
| "https://crates.io/api/v1/crates/$crate/$CARGO_VERSION"; then | |
| echo "$crate $CARGO_VERSION is available" | |
| return 0 | |
| fi | |
| sleep 5 | |
| done | |
| echo "Timed out waiting for $crate $CARGO_VERSION" >&2 | |
| return 1 | |
| } | |
| publish_or_skip consult-llm-core | |
| wait_for_crate consult-llm-core | |
| publish_or_skip consult-llm | |
| publish_or_skip consult-llm-monitor | |
| update-tap: | |
| name: Update Homebrew tap | |
| needs: github-release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download release artifacts | |
| uses: actions/download-artifact@v5 | |
| with: | |
| path: artifacts | |
| pattern: gh-release-* | |
| merge-multiple: true | |
| - uses: actions/checkout@v5 | |
| with: | |
| repository: raine/homebrew-consult-llm | |
| token: ${{ secrets.RELEASE_TOKEN }} | |
| path: tap | |
| - name: Generate formula and push to tap | |
| env: | |
| VERSION: ${{ github.ref_name }} | |
| run: | | |
| VERSION="${VERSION#v}" | |
| SHA_MAC_ARM=$(awk '{print $1}' artifacts/consult-llm-darwin-arm64.sha256) | |
| SHA_MAC_X64=$(awk '{print $1}' artifacts/consult-llm-darwin-x64.sha256) | |
| SHA_LINUX_X64=$(awk '{print $1}' artifacts/consult-llm-linux-x64.sha256) | |
| SHA_LINUX_ARM=$(awk '{print $1}' artifacts/consult-llm-linux-arm64.sha256) | |
| mkdir -p tap/Formula | |
| cat > tap/Formula/consult-llm.rb << EOF | |
| class ConsultLlm < Formula | |
| desc "CLI for consulting LLMs from agent workflows" | |
| homepage "https://github.com/raine/consult-llm" | |
| version "${VERSION}" | |
| license "MIT" | |
| on_macos do | |
| if Hardware::CPU.arm? | |
| url "https://github.com/raine/consult-llm/releases/download/v${VERSION}/consult-llm-darwin-arm64.tar.gz" | |
| sha256 "${SHA_MAC_ARM}" | |
| else | |
| url "https://github.com/raine/consult-llm/releases/download/v${VERSION}/consult-llm-darwin-x64.tar.gz" | |
| sha256 "${SHA_MAC_X64}" | |
| end | |
| end | |
| on_linux do | |
| if Hardware::CPU.arm? && Hardware::CPU.is_64_bit? | |
| url "https://github.com/raine/consult-llm/releases/download/v${VERSION}/consult-llm-linux-arm64.tar.gz" | |
| sha256 "${SHA_LINUX_ARM}" | |
| else | |
| url "https://github.com/raine/consult-llm/releases/download/v${VERSION}/consult-llm-linux-x64.tar.gz" | |
| sha256 "${SHA_LINUX_X64}" | |
| end | |
| end | |
| def install | |
| bin.install "consult-llm" | |
| bin.install "consult-llm-monitor" | |
| end | |
| test do | |
| assert_match version.to_s, shell_output("#{bin}/consult-llm --version") | |
| end | |
| end | |
| EOF | |
| sed -i 's/^ //' tap/Formula/consult-llm.rb | |
| cd tap | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| git add Formula/consult-llm.rb | |
| git diff --cached --quiet && echo "Formula unchanged, skipping commit" && exit 0 | |
| git commit -m "consult-llm ${VERSION}" | |
| git pull --rebase | |
| git push |