Skip to content

Commit a86c191

Browse files
StarefossenCopilot
andcommitted
feat: eliminate PAT using repository_dispatch pattern
Instead of checking out homebrew-tap with a cross-repo token, dispatch a repository_dispatch event to CloudNativeBergen/homebrew-tap. The tap repo handles the update using its own GITHUB_TOKEN — no manually managed secret. The built-in github.token has permission to send repository_dispatch events to public repos in the same org. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 421ebfe commit a86c191

1 file changed

Lines changed: 14 additions & 60 deletions

File tree

.github/workflows/release.yml

Lines changed: 14 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ jobs:
140140
name: Update Homebrew tap
141141
needs: [release]
142142
runs-on: ubuntu-latest
143+
permissions:
144+
contents: read
143145
steps:
144146
- uses: actions/download-artifact@v8
145147
with:
@@ -155,65 +157,17 @@ jobs:
155157
echo "linux_arm=$(sha256sum cnctl-aarch64-unknown-linux-gnu.tar.gz | awk '{print $1}')" >> "$GITHUB_OUTPUT"
156158
echo "linux_x86=$(sha256sum cnctl-x86_64-unknown-linux-gnu.tar.gz | awk '{print $1}')" >> "$GITHUB_OUTPUT"
157159
158-
- name: Checkout homebrew tap
159-
uses: actions/checkout@v6
160-
with:
161-
repository: CloudNativeBergen/homebrew-tap
162-
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
163-
path: homebrew-tap
164-
165-
- name: Write formula
160+
# Dispatch to homebrew-tap so its own GITHUB_TOKEN writes the formula —
161+
# no cross-repo PAT needed.
162+
- name: Trigger tap update
166163
env:
167-
VERSION: ${{ needs.release.outputs.tag }}
168-
MAC_ARM_SHA: ${{ steps.sums.outputs.mac_arm }}
169-
MAC_X86_SHA: ${{ steps.sums.outputs.mac_x86 }}
170-
LINUX_ARM_SHA: ${{ steps.sums.outputs.linux_arm }}
171-
LINUX_X86_SHA: ${{ steps.sums.outputs.linux_x86 }}
172-
run: |
173-
mkdir -p homebrew-tap/Formula
174-
cat > homebrew-tap/Formula/cnctl.rb << FORMULA
175-
class Cnctl < Formula
176-
desc "Organizer CLI for Cloud Native Days Norway"
177-
homepage "https://github.com/CloudNativeBergen/cnctl"
178-
version "${VERSION}"
179-
license "MIT"
180-
181-
on_macos do
182-
if Hardware::CPU.arm?
183-
url "https://github.com/CloudNativeBergen/cnctl/releases/download/${VERSION}/cnctl-aarch64-apple-darwin.tar.gz"
184-
sha256 "${MAC_ARM_SHA}"
185-
else
186-
url "https://github.com/CloudNativeBergen/cnctl/releases/download/${VERSION}/cnctl-x86_64-apple-darwin.tar.gz"
187-
sha256 "${MAC_X86_SHA}"
188-
end
189-
end
190-
191-
on_linux do
192-
if Hardware::CPU.arm?
193-
url "https://github.com/CloudNativeBergen/cnctl/releases/download/${VERSION}/cnctl-aarch64-unknown-linux-gnu.tar.gz"
194-
sha256 "${LINUX_ARM_SHA}"
195-
else
196-
url "https://github.com/CloudNativeBergen/cnctl/releases/download/${VERSION}/cnctl-x86_64-unknown-linux-gnu.tar.gz"
197-
sha256 "${LINUX_X86_SHA}"
198-
end
199-
end
200-
201-
def install
202-
bin.install "cnctl"
203-
end
204-
205-
test do
206-
assert_match version.to_s, shell_output("#{bin}/cnctl --version")
207-
end
208-
end
209-
FORMULA
210-
211-
- name: Commit and push
164+
GH_TOKEN: ${{ github.token }}
212165
run: |
213-
cd homebrew-tap
214-
git config user.name "github-actions[bot]"
215-
git config user.email "github-actions[bot]@users.noreply.github.com"
216-
git add Formula/cnctl.rb
217-
git diff --cached --quiet && echo "No changes" && exit 0
218-
git commit -m "chore: update cnctl to ${{ needs.release.outputs.tag }}"
219-
git push
166+
gh api repos/CloudNativeBergen/homebrew-tap/dispatches \
167+
--method POST \
168+
--field event_type=update-formula \
169+
--field client_payload[version]="${{ needs.release.outputs.tag }}" \
170+
--field client_payload[mac_arm]="${{ steps.sums.outputs.mac_arm }}" \
171+
--field client_payload[mac_x86]="${{ steps.sums.outputs.mac_x86 }}" \
172+
--field client_payload[linux_arm]="${{ steps.sums.outputs.linux_arm }}" \
173+
--field client_payload[linux_x86]="${{ steps.sums.outputs.linux_x86 }}"

0 commit comments

Comments
 (0)