Skip to content

Commit be9fa9e

Browse files
Namanclaude
authored andcommitted
ci: auto-update Homebrew formula on new releases
Adds an `update-homebrew` job to the release workflow that: - Downloads SHA256 checksums from the just-published release - Generates an updated Formula/createos.rb with new version + hashes - Pushes to NodeOps-app/homebrew-createos Requires HOMEBREW_TAP_TOKEN secret (PAT with repo scope for the tap repo). Runs after binaries are uploaded, so SHA256 files are always available. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 15d73fe commit be9fa9e

1 file changed

Lines changed: 81 additions & 0 deletions

File tree

.github/workflows/release.yaml

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,3 +76,84 @@ jobs:
7676

7777
- name: Upload release assets
7878
run: gh release upload "${{ github.ref_name }}" createos-* --clobber
79+
80+
update-homebrew:
81+
needs: release
82+
runs-on: ubuntu-latest
83+
steps:
84+
- name: Download SHA256 files
85+
env:
86+
GH_TOKEN: ${{ github.token }}
87+
run: |
88+
VERSION="${{ github.ref_name }}"
89+
VERSION_NUM="${VERSION#v}"
90+
BASE="https://github.com/NodeOps-app/createos-cli/releases/download/${VERSION}"
91+
92+
for target in darwin-arm64 darwin-amd64 linux-arm64 linux-amd64; do
93+
curl -sL "${BASE}/createos-${target}.sha256" > "sha256-${target}.txt"
94+
done
95+
96+
SHA_DARWIN_ARM64=$(cat sha256-darwin-arm64.txt)
97+
SHA_DARWIN_AMD64=$(cat sha256-darwin-amd64.txt)
98+
SHA_LINUX_ARM64=$(cat sha256-linux-arm64.txt)
99+
SHA_LINUX_AMD64=$(cat sha256-linux-amd64.txt)
100+
101+
cat > createos.rb << FORMULA
102+
class Createos < Formula
103+
desc "CreateOS CLI - Deploy APIs, manage infrastructure, and monetize Skills"
104+
homepage "https://github.com/NodeOps-app/createos-cli"
105+
version "${VERSION_NUM}"
106+
license "MIT"
107+
108+
on_macos do
109+
on_arm do
110+
url "https://github.com/NodeOps-app/createos-cli/releases/download/v#{version}/createos-darwin-arm64"
111+
sha256 "${SHA_DARWIN_ARM64}"
112+
end
113+
114+
on_intel do
115+
url "https://github.com/NodeOps-app/createos-cli/releases/download/v#{version}/createos-darwin-amd64"
116+
sha256 "${SHA_DARWIN_AMD64}"
117+
end
118+
end
119+
120+
on_linux do
121+
on_arm do
122+
url "https://github.com/NodeOps-app/createos-cli/releases/download/v#{version}/createos-linux-arm64"
123+
sha256 "${SHA_LINUX_ARM64}"
124+
end
125+
126+
on_intel do
127+
url "https://github.com/NodeOps-app/createos-cli/releases/download/v#{version}/createos-linux-amd64"
128+
sha256 "${SHA_LINUX_AMD64}"
129+
end
130+
end
131+
132+
def install
133+
binary = Dir["createos-*"].first || "createos"
134+
bin.install binary => "createos"
135+
end
136+
137+
test do
138+
assert_match "createos", shell_output("#{bin}/createos version 2>&1")
139+
end
140+
end
141+
FORMULA
142+
143+
# Remove leading whitespace from heredoc
144+
sed -i 's/^ //' createos.rb
145+
146+
- name: Push to Homebrew tap
147+
env:
148+
GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }}
149+
run: |
150+
VERSION="${{ github.ref_name }}"
151+
git clone https://x-access-token:${GH_TOKEN}@github.com/NodeOps-app/homebrew-createos.git tap
152+
cp createos.rb tap/Formula/createos.rb
153+
cd tap
154+
git config user.name "github-actions[bot]"
155+
git config user.email "github-actions[bot]@users.noreply.github.com"
156+
git add Formula/createos.rb
157+
git diff --cached --quiet && echo "No changes" && exit 0
158+
git commit -m "Update createos to ${VERSION}"
159+
git push

0 commit comments

Comments
 (0)