Files
2026-07-13 12:38:34 +08:00

121 lines
4.1 KiB
YAML

name: Bump Homebrew Tap
on:
release:
types: [published]
workflow_dispatch:
inputs:
tag:
description: 'Release tag to sync (e.g. @composio/cli@0.2.28)'
required: true
type: string
permissions:
contents: read
concurrency:
group: bump-homebrew-tap
cancel-in-progress: false
jobs:
bump:
if: github.event_name == 'workflow_dispatch' || startsWith(github.event.release.tag_name, '@composio/cli@')
runs-on: ubuntu-latest
steps:
- name: Resolve release tag and version
id: meta
env:
TAG_INPUT: ${{ inputs.tag }}
TAG_RELEASE: ${{ github.event.release.tag_name }}
run: |
set -euo pipefail
tag="${TAG_INPUT:-$TAG_RELEASE}"
if [[ -z "$tag" ]]; then
echo "::error::No tag resolved"; exit 1
fi
if [[ ! "$tag" =~ ^@composio/cli@ ]]; then
echo "::notice::Tag $tag is not a CLI release, skipping."
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
# Skip beta/prerelease tags — only stable bumps the formula.
if [[ "$tag" == *"-beta."* || "$tag" == *"-rc."* || "$tag" == *"-alpha."* ]]; then
echo "::notice::Tag $tag is a prerelease, skipping."
echo "skip=true" >> "$GITHUB_OUTPUT"
exit 0
fi
version="${tag#@composio/cli@}"
echo "tag=$tag" >> "$GITHUB_OUTPUT"
echo "version=$version" >> "$GITHUB_OUTPUT"
echo "skip=false" >> "$GITHUB_OUTPUT"
- name: Download checksums
if: steps.meta.outputs.skip != 'true'
id: sha
env:
TAG: ${{ steps.meta.outputs.tag }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
gh release download "$TAG" \
--repo "${{ github.repository }}" \
--pattern checksums.txt \
--output checksums.txt
extract() {
grep " $1\$" checksums.txt | awk '{print $1}' || true
}
{
echo "darwin_arm=$(extract composio-darwin-aarch64.zip)"
echo "darwin_x86=$(extract composio-darwin-x64.zip)"
echo "linux_arm=$(extract composio-linux-aarch64.zip)"
echo "linux_x86=$(extract composio-linux-x64.zip)"
} >> "$GITHUB_OUTPUT"
- name: Checkout source repo (for bump script)
if: steps.meta.outputs.skip != 'true'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Checkout homebrew tap
if: steps.meta.outputs.skip != 'true'
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
repository: ComposioHQ/homebrew-tap
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
path: tap
- name: Update formula
if: steps.meta.outputs.skip != 'true'
env:
VERSION: ${{ steps.meta.outputs.version }}
TAG: ${{ steps.meta.outputs.tag }}
DARWIN_ARM: ${{ steps.sha.outputs.darwin_arm }}
DARWIN_X86: ${{ steps.sha.outputs.darwin_x86 }}
LINUX_ARM: ${{ steps.sha.outputs.linux_arm }}
LINUX_X86: ${{ steps.sha.outputs.linux_x86 }}
run: |
set -euo pipefail
formula="tap/Formula/composio.rb"
[[ -f "$formula" ]] || { echo "::error::$formula not found"; exit 1; }
.github/scripts/bump-homebrew-formula.py "$formula"
echo "--- updated formula ---"
cat "$formula"
- name: Commit and push
if: steps.meta.outputs.skip != 'true'
working-directory: tap
env:
VERSION: ${{ steps.meta.outputs.version }}
run: |
set -euo pipefail
git config user.name "composio-release-bot"
git config user.email "composio-release-bot@users.noreply.github.com"
if git diff --quiet; then
echo "Formula already up to date for $VERSION; nothing to commit."
exit 0
fi
git add Formula/composio.rb
git commit -m "composio $VERSION"
git push origin HEAD