name: Update Homebrew Formula
on:
release:
types: [published]
jobs:
update-formula:
runs-on: ubuntu-latest
steps:
- name: Get release info
id: release
run: |
VERSION="${GITHUB_REF_NAME#v}"
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "tag=$GITHUB_REF_NAME" >> $GITHUB_OUTPUT
- name: Download checksums
run: |
gh release download "${{ steps.release.outputs.tag }}" \
--repo "${{ github.repository }}" \
--pattern "checksums.txt"
cat checksums.txt
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Parse checksums
id: checksums
run: |
echo "darwin_arm64=$(grep darwin-arm64 checksums.txt | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "darwin_amd64=$(grep darwin-amd64 checksums.txt | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "linux_arm64=$(grep linux-arm64 checksums.txt | awk '{print $1}')" >> $GITHUB_OUTPUT
echo "linux_amd64=$(grep linux-amd64 checksums.txt | awk '{print $1}')" >> $GITHUB_OUTPUT
- name: Generate formula
env:
VERSION: ${{ steps.release.outputs.version }}
SHA_DARWIN_ARM64: ${{ steps.checksums.outputs.darwin_arm64 }}
SHA_DARWIN_AMD64: ${{ steps.checksums.outputs.darwin_amd64 }}
SHA_LINUX_ARM64: ${{ steps.checksums.outputs.linux_arm64 }}
SHA_LINUX_AMD64: ${{ steps.checksums.outputs.linux_amd64 }}
run: |
cat > deciduous.rb << FORMULA
class Deciduous < Formula
desc "Decision graph tooling for AI-assisted development"
homepage "https://notactuallytreyanastasio.github.io/deciduous/"
version "${VERSION}"
license "MIT"
on_macos do
on_arm do
url "https://github.com/notactuallytreyanastasio/deciduous/releases/download/v#{version}/deciduous-darwin-arm64"
sha256 "${SHA_DARWIN_ARM64}"
end
on_intel do
url "https://github.com/notactuallytreyanastasio/deciduous/releases/download/v#{version}/deciduous-darwin-amd64"
sha256 "${SHA_DARWIN_AMD64}"
end
end
on_linux do
on_arm do
url "https://github.com/notactuallytreyanastasio/deciduous/releases/download/v#{version}/deciduous-linux-arm64"
sha256 "${SHA_LINUX_ARM64}"
end
on_intel do
url "https://github.com/notactuallytreyanastasio/deciduous/releases/download/v#{version}/deciduous-linux-amd64"
sha256 "${SHA_LINUX_AMD64}"
end
end
def install
binary_name = Dir["deciduous-*"].first
bin.install binary_name => "deciduous"
end
test do
assert_match version.to_s, shell_output("#{bin}/deciduous --version")
end
end
FORMULA
- name: Set up SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.HOMEBREW_TAP_DEPLOY_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global core.sshCommand "ssh -i ~/.ssh/deploy_key -o StrictHostKeyChecking=no"
- name: Push formula to tap
run: |
git clone git@github.com:notactuallytreyanastasio/homebrew-tap.git tap
cp deciduous.rb tap/Formula/deciduous.rb
cd tap
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git add Formula/deciduous.rb
git diff --cached --quiet || git commit -m "deciduous ${{ steps.release.outputs.version }}"
git push