Skip to content

Commit c29b39a

Browse files
Tomas Caracciasisyphus-dev-ai
andcommitted
feat: multi-arch Homebrew formula and release pipeline
Support darwin-arm64, darwin-amd64, linux-arm64, linux-amd64 in the Homebrew formula. The release workflow now computes sha256 for all architectures and regenerates the formula on each tagged release. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
1 parent 3198f6f commit c29b39a

2 files changed

Lines changed: 103 additions & 14 deletions

File tree

.github/workflows/release.yml

Lines changed: 70 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,25 +99,84 @@ jobs:
9999

100100
steps:
101101
- uses: actions/checkout@v4
102+
with:
103+
ref: main
102104

103105
- name: Get tag version
104106
id: tag
105-
run: echo "version=${GITHUB_REF#refs/tags/}" >> "$GITHUB_OUTPUT"
107+
run: |
108+
version="${GITHUB_REF#refs/tags/}"
109+
echo "version=$version" >> "$GITHUB_OUTPUT"
110+
echo "version_number=${version#v}" >> "$GITHUB_OUTPUT"
106111
107-
- name: Download macOS arm64 tarball and compute SHA
112+
- name: Download release tarballs and compute SHAs
108113
id: sha
109114
run: |
110-
url="https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.version }}/taskboard-darwin-arm64.tar.gz"
111-
curl -sL "$url" -o taskboard.tar.gz
112-
sha=$(shasum -a 256 taskboard.tar.gz | awk '{print $1}')
113-
echo "sha256=$sha" >> "$GITHUB_OUTPUT"
114-
echo "url=$url" >> "$GITHUB_OUTPUT"
115+
base_url="https://github.com/${{ github.repository }}/releases/download/${{ steps.tag.outputs.version }}"
116+
for arch in darwin-arm64 darwin-amd64 linux-arm64 linux-amd64; do
117+
curl -sL --retry 3 "$base_url/taskboard-${arch}.tar.gz" -o "taskboard-${arch}.tar.gz"
118+
sha=$(sha256sum "taskboard-${arch}.tar.gz" | awk '{print $1}')
119+
key=$(echo "$arch" | tr '-' '_')
120+
echo "sha256_${key}=$sha" >> "$GITHUB_OUTPUT"
121+
done
115122
116-
- name: Update Homebrew formula
123+
- name: Generate Homebrew formula
124+
env:
125+
SHA_DARWIN_ARM64: ${{ steps.sha.outputs.sha256_darwin_arm64 }}
126+
SHA_DARWIN_AMD64: ${{ steps.sha.outputs.sha256_darwin_amd64 }}
127+
SHA_LINUX_ARM64: ${{ steps.sha.outputs.sha256_linux_arm64 }}
128+
SHA_LINUX_AMD64: ${{ steps.sha.outputs.sha256_linux_amd64 }}
129+
VERSION: ${{ steps.tag.outputs.version_number }}
117130
run: |
118-
sed -i "s|url \".*\"|url \"${{ steps.sha.outputs.url }}\"|" Formula/taskboard.rb
119-
sed -i "s|sha256 \".*\"|sha256 \"${{ steps.sha.outputs.sha256 }}\"|" Formula/taskboard.rb
120-
sed -i "s|version \".*\"|version \"${{ steps.tag.outputs.version#v }}\"|" Formula/taskboard.rb
131+
envsubst << 'EOF' > Formula/taskboard.rb
132+
class Taskboard < Formula
133+
desc "Local project management with Kanban UI and MCP server for AI assistants"
134+
homepage "https://github.com/tcarac/taskboard"
135+
version "${VERSION}"
136+
license "MIT"
137+
138+
on_macos do
139+
if Hardware::CPU.arm?
140+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-darwin-arm64.tar.gz"
141+
sha256 "${SHA_DARWIN_ARM64}"
142+
elsif Hardware::CPU.intel?
143+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-darwin-amd64.tar.gz"
144+
sha256 "${SHA_DARWIN_AMD64}"
145+
end
146+
end
147+
148+
on_linux do
149+
if Hardware::CPU.arm?
150+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-linux-arm64.tar.gz"
151+
sha256 "${SHA_LINUX_ARM64}"
152+
elsif Hardware::CPU.intel?
153+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-linux-amd64.tar.gz"
154+
sha256 "${SHA_LINUX_AMD64}"
155+
end
156+
end
157+
158+
def install
159+
if OS.mac?
160+
if Hardware::CPU.arm?
161+
bin.install "taskboard-darwin-arm64" => "taskboard"
162+
else
163+
bin.install "taskboard-darwin-amd64" => "taskboard"
164+
end
165+
elsif OS.linux?
166+
if Hardware::CPU.arm?
167+
bin.install "taskboard-linux-arm64" => "taskboard"
168+
else
169+
bin.install "taskboard-linux-amd64" => "taskboard"
170+
end
171+
end
172+
end
173+
174+
test do
175+
assert_match "taskboard", shell_output("#{bin}/taskboard --help")
176+
end
177+
end
178+
EOF
179+
sed -i 's/^ //' Formula/taskboard.rb
121180
122181
- name: Commit updated formula
123182
uses: stefanzweifel/git-auto-commit-action@v5

Formula/taskboard.rb

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,43 @@
11
class Taskboard < Formula
22
desc 'Local project management with Kanban UI and MCP server for AI assistants'
33
homepage 'https://github.com/tcarac/taskboard'
4-
url 'https://github.com/tcarac/taskboard/releases/download/v0.1.0/taskboard-darwin-arm64.tar.gz'
5-
sha256 'REPLACE_WITH_ACTUAL_SHA256'
64
version '0.1.0'
75
license 'MIT'
86

7+
on_macos do
8+
if Hardware::CPU.arm?
9+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-darwin-arm64.tar.gz"
10+
sha256 'SHA256_DARWIN_ARM64'
11+
elsif Hardware::CPU.intel?
12+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-darwin-amd64.tar.gz"
13+
sha256 'SHA256_DARWIN_AMD64'
14+
end
15+
end
16+
17+
on_linux do
18+
if Hardware::CPU.arm?
19+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-linux-arm64.tar.gz"
20+
sha256 'SHA256_LINUX_ARM64'
21+
elsif Hardware::CPU.intel?
22+
url "https://github.com/tcarac/taskboard/releases/download/v#{version}/taskboard-linux-amd64.tar.gz"
23+
sha256 'SHA256_LINUX_AMD64'
24+
end
25+
end
26+
927
def install
10-
bin.install 'taskboard-darwin-arm64' => 'taskboard'
28+
if OS.mac?
29+
if Hardware::CPU.arm?
30+
bin.install 'taskboard-darwin-arm64' => 'taskboard'
31+
else
32+
bin.install 'taskboard-darwin-amd64' => 'taskboard'
33+
end
34+
elsif OS.linux?
35+
if Hardware::CPU.arm?
36+
bin.install 'taskboard-linux-arm64' => 'taskboard'
37+
else
38+
bin.install 'taskboard-linux-amd64' => 'taskboard'
39+
end
40+
end
1141
end
1242

1343
test do

0 commit comments

Comments
 (0)