Skip to content

Commit 4950d4a

Browse files
committed
build(homebrew): add tap formula for prebuilt releases
- add a binary-only Homebrew formula for macOS and Linux release archives - refresh the formula from GoReleaser checksums during releases - document the tap install path in the root README
1 parent 9f84e7e commit 4950d4a

4 files changed

Lines changed: 195 additions & 0 deletions

File tree

.github/workflows/release.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,3 +107,26 @@ jobs:
107107
args: release --clean
108108
env:
109109
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110+
111+
- name: Update Homebrew formula
112+
env:
113+
TAG: ${{ steps.next.outputs.tag }}
114+
run: |
115+
set -euo pipefail
116+
117+
git fetch origin main
118+
git checkout -B main origin/main
119+
120+
./scripts/update-homebrew-formula.sh \
121+
--tag "${TAG}" \
122+
--checksums "dist/stardrive_${TAG#v}_checksums.txt"
123+
124+
if git diff --quiet --exit-code -- Formula/stardrive.rb; then
125+
exit 0
126+
fi
127+
128+
git config user.name "github-actions[bot]"
129+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
130+
git add Formula/stardrive.rb
131+
git commit -m "chore(homebrew): update formula for ${TAG}"
132+
git push origin HEAD:main

Formula/stardrive.rb

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Stardrive < Formula
2+
desc "Manage Hetzner-hosted Talos clusters with Infisical-backed GitOps"
3+
homepage "https://github.com/intar-dev/stardrive"
4+
version "0.1.2"
5+
6+
on_macos do
7+
on_arm do
8+
url "https://github.com/intar-dev/stardrive/releases/download/v0.1.2/stardrive_0.1.2_darwin_arm64.tar.gz"
9+
sha256 "cb35646f507171aaca0b8f8de6b608b5f04d36653e24929030e3c173688e6688"
10+
end
11+
12+
on_intel do
13+
url "https://github.com/intar-dev/stardrive/releases/download/v0.1.2/stardrive_0.1.2_darwin_amd64.tar.gz"
14+
sha256 "27987ff0341929be65a53a6d82f33a1f298fa37b14787bb116b2274bd1bb228d"
15+
end
16+
end
17+
18+
on_linux do
19+
on_arm do
20+
url "https://github.com/intar-dev/stardrive/releases/download/v0.1.2/stardrive_0.1.2_linux_arm64.tar.gz"
21+
sha256 "2d029b66503f558b08b2d9b0f22fbfc328313b0e0232af402faa3a856584ab79"
22+
end
23+
24+
on_intel do
25+
url "https://github.com/intar-dev/stardrive/releases/download/v0.1.2/stardrive_0.1.2_linux_amd64.tar.gz"
26+
sha256 "69c470eeca93bdadacab90f9e60a29fa1f1f7495eb8f2feda041e93015e72985"
27+
end
28+
end
29+
30+
def install
31+
bin.install "stardrive"
32+
end
33+
34+
test do
35+
output = shell_output("#{bin}/stardrive version")
36+
assert_match "stardrive", output
37+
end
38+
end

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# stardrive
2+
3+
Manage Hetzner-hosted Talos clusters with Infisical-backed GitOps.
4+
5+
```sh
6+
brew tap intar-dev/stardrive https://github.com/intar-dev/stardrive
7+
brew install intar-dev/stardrive/stardrive
8+
stardrive --help
9+
```

scripts/update-homebrew-formula.sh

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#!/usr/bin/env bash
2+
3+
set -euo pipefail
4+
5+
formula_path="Formula/stardrive.rb"
6+
tag=""
7+
checksums=""
8+
9+
usage() {
10+
cat <<'EOF'
11+
Usage:
12+
scripts/update-homebrew-formula.sh --tag v0.1.0 --checksums dist/stardrive_0.1.0_checksums.txt
13+
EOF
14+
}
15+
16+
while [[ $# -gt 0 ]]; do
17+
case "$1" in
18+
--tag)
19+
tag="${2:-}"
20+
shift 2
21+
;;
22+
--checksums)
23+
checksums="${2:-}"
24+
shift 2
25+
;;
26+
--output)
27+
formula_path="${2:-}"
28+
shift 2
29+
;;
30+
-h|--help)
31+
usage
32+
exit 0
33+
;;
34+
*)
35+
echo "unknown argument: $1" >&2
36+
usage >&2
37+
exit 1
38+
;;
39+
esac
40+
done
41+
42+
mkdir -p "$(dirname "$formula_path")"
43+
44+
lookup_checksum() {
45+
local filename="$1"
46+
awk -v target="$filename" '$2 == target { print $1 }' "$checksums"
47+
}
48+
49+
if [[ -z "$tag" || -z "$checksums" ]]; then
50+
echo "--tag and --checksums are required" >&2
51+
usage >&2
52+
exit 1
53+
fi
54+
55+
if [[ ! -f "$checksums" ]]; then
56+
echo "checksum file not found: $checksums" >&2
57+
exit 1
58+
fi
59+
60+
version="${tag#v}"
61+
darwin_arm64_archive="stardrive_${version}_darwin_arm64.tar.gz"
62+
darwin_amd64_archive="stardrive_${version}_darwin_amd64.tar.gz"
63+
linux_arm64_archive="stardrive_${version}_linux_arm64.tar.gz"
64+
linux_amd64_archive="stardrive_${version}_linux_amd64.tar.gz"
65+
66+
darwin_arm64_sha="$(lookup_checksum "$darwin_arm64_archive")"
67+
darwin_amd64_sha="$(lookup_checksum "$darwin_amd64_archive")"
68+
linux_arm64_sha="$(lookup_checksum "$linux_arm64_archive")"
69+
linux_amd64_sha="$(lookup_checksum "$linux_amd64_archive")"
70+
71+
require_checksum() {
72+
local archive="$1"
73+
local checksum="$2"
74+
75+
if [[ -z "$checksum" ]]; then
76+
echo "missing required archive checksum for $archive in $checksums" >&2
77+
exit 1
78+
fi
79+
}
80+
81+
require_checksum "$darwin_arm64_archive" "$darwin_arm64_sha"
82+
require_checksum "$darwin_amd64_archive" "$darwin_amd64_sha"
83+
require_checksum "$linux_arm64_archive" "$linux_arm64_sha"
84+
require_checksum "$linux_amd64_archive" "$linux_amd64_sha"
85+
86+
cat >"$formula_path" <<EOF
87+
class Stardrive < Formula
88+
desc "Manage Hetzner-hosted Talos clusters with Infisical-backed GitOps"
89+
homepage "https://github.com/intar-dev/stardrive"
90+
version "${version}"
91+
92+
on_macos do
93+
on_arm do
94+
url "https://github.com/intar-dev/stardrive/releases/download/${tag}/${darwin_arm64_archive}"
95+
sha256 "${darwin_arm64_sha}"
96+
end
97+
98+
on_intel do
99+
url "https://github.com/intar-dev/stardrive/releases/download/${tag}/${darwin_amd64_archive}"
100+
sha256 "${darwin_amd64_sha}"
101+
end
102+
end
103+
104+
on_linux do
105+
on_arm do
106+
url "https://github.com/intar-dev/stardrive/releases/download/${tag}/${linux_arm64_archive}"
107+
sha256 "${linux_arm64_sha}"
108+
end
109+
110+
on_intel do
111+
url "https://github.com/intar-dev/stardrive/releases/download/${tag}/${linux_amd64_archive}"
112+
sha256 "${linux_amd64_sha}"
113+
end
114+
end
115+
116+
def install
117+
bin.install "stardrive"
118+
end
119+
120+
test do
121+
output = shell_output("#{bin}/stardrive version")
122+
assert_match "stardrive", output
123+
end
124+
end
125+
EOF

0 commit comments

Comments
 (0)