chore(release): de tap haalt zijn eigen Homebrew-cask op #1634

Merged
brenno merged 1 commit from chore/cask-zelfbijhoudend into main 2026-08-21 11:38:42 +00:00
Owner

Bij v0.4.8 viel de job homebrew-cask rood: de forge weigerde HOMEBREW_TAP_TOKEN met HTTP 401, kort na een herstart op Forgejo 16.0.1. De cask was al gegenereerd en gecommit; alleen de push kwam er niet doorheen.

Het token was niet ingetrokken en droeg de juiste scope write:repository, dus "verlopen" verklaarde het niet — maar het bleef een los onderdeel dat stil kan sneuvelen, en dat had het al gedaan: de tap stond op 0.4.6 terwijl de release 0.4.8 was.

Dat het zo laat opviel zat in de vorm: de job slikt een mislukte clone bewust in zodat een onbereikbare tap een afgeronde release niet rood maakt — maar de tap is publiek, dus die clone slaagt óók met een dood token. Pas de push viel om.

Wat er verandert

De cask-job verdwijnt uit release.yml. In plaats daarvan houdt de tap zichzelf bij: .forgejo/workflows/update-cask.yml in LibreKAT/homebrew-ocideck leest elk half uur de nieuwste stabiele release publiek uit, haalt scripts/update_homebrew_cask.sh en homebrew/ocideck.rb.tmpl op bij díe tag, en pusht met het per-run Actions-token dat Forgejo voor die repository zelf aanmaakt. Geen secret meer, niets dat verloopt.

Die werkstroom staat er al en is getoetst, beide takken:

  • push werkt — run 2601 haalde een bewust toegevoegde lege regel weg en pushte 290146ae, dus het auto-token heeft schrijfrechten op zijn eigen repo;
  • idempotent — run 2602 liet HEAD ongemoeid, dus geen commit elk half uur.

Tap en spiegel staan nu allebei op 0.4.8 (scripts/verify_homebrew_cask.sh --mirror groen).

Prijs

De cask loopt maximaal een half uur achter op een release in plaats van binnen de run bij te trekken. Voor een tap is dat betekenisloos — brew update draait op de klok van de gebruiker — en het weegt niet op tegen een inloggegeven dat verloopt.

Poorten

make check-static check-registrations groen (exit 0). De twee nieuwe bedradingstests zijn rood geproefd: met een teruggezette cask-job respectievelijk een hernoemde sjabloon vallen ze allebei om.

Nog te doen buiten deze PR

De secrets HOMEBREW_TAP_REPOSITORY en HOMEBREW_TAP_TOKEN op deze repo zijn ongebruikt; die kunnen weg, en token id 12 ocideck-homebrew-tap kan ingetrokken worden.

🤖 Generated with Claude Code

Bij v0.4.8 viel de job `homebrew-cask` rood: de forge weigerde `HOMEBREW_TAP_TOKEN` met HTTP 401, kort na een herstart op Forgejo 16.0.1. De cask was al gegenereerd en gecommit; alleen de push kwam er niet doorheen. Het token was niet ingetrokken en droeg de juiste scope `write:repository`, dus "verlopen" verklaarde het niet — maar het bleef een los onderdeel dat stil kan sneuvelen, en dat had het al gedaan: de tap stond op 0.4.6 terwijl de release 0.4.8 was. Dat het zo laat opviel zat in de vorm: de job slikt een mislukte clone bewust in zodat een onbereikbare tap een afgeronde release niet rood maakt — maar de tap is publiek, dus die clone slaagt óók met een dood token. Pas de push viel om. ## Wat er verandert De cask-job verdwijnt uit `release.yml`. In plaats daarvan houdt de tap zichzelf bij: `.forgejo/workflows/update-cask.yml` in `LibreKAT/homebrew-ocideck` leest elk half uur de nieuwste stabiele release publiek uit, haalt `scripts/update_homebrew_cask.sh` en `homebrew/ocideck.rb.tmpl` op bij díe tag, en pusht met het per-run Actions-token dat Forgejo voor die repository zelf aanmaakt. **Geen secret meer, niets dat verloopt.** Die werkstroom staat er al en is getoetst, beide takken: - **push werkt** — run 2601 haalde een bewust toegevoegde lege regel weg en pushte `290146ae`, dus het auto-token heeft schrijfrechten op zijn eigen repo; - **idempotent** — run 2602 liet HEAD ongemoeid, dus geen commit elk half uur. Tap en spiegel staan nu allebei op 0.4.8 (`scripts/verify_homebrew_cask.sh --mirror` groen). ## Prijs De cask loopt maximaal een half uur achter op een release in plaats van binnen de run bij te trekken. Voor een tap is dat betekenisloos — `brew update` draait op de klok van de gebruiker — en het weegt niet op tegen een inloggegeven dat verloopt. ## Poorten `make check-static check-registrations` groen (exit 0). De twee nieuwe bedradingstests zijn rood geproefd: met een teruggezette cask-job respectievelijk een hernoemde sjabloon vallen ze allebei om. ## Nog te doen buiten deze PR De secrets `HOMEBREW_TAP_REPOSITORY` en `HOMEBREW_TAP_TOKEN` op deze repo zijn ongebruikt; die kunnen weg, en token id 12 `ocideck-homebrew-tap` kan ingetrokken worden. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chore(release): de tap haalt zijn eigen Homebrew-cask op
All checks were successful
scans / scans (pull_request) Successful in 3m35s
static-gate / static-gate (pull_request) Successful in 10m2s
cb24d64c7e
Bij v0.4.8 viel de job `homebrew-cask` rood: de forge weigerde
`HOMEBREW_TAP_TOKEN` met HTTP 401, kort na een herstart op Forgejo 16.0.1. De
cask was al gegenereerd en gecommit; alleen de push kwam er niet doorheen. Het
token was niet ingetrokken en droeg de juiste scope, dus "verlopen" verklaarde
het niet — maar het bleef een los onderdeel dat stil kan sneuvelen, en dat had
het al gedaan: de tap stond op 0.4.6 terwijl de release 0.4.8 was.

Dat het zo laat opviel zat in de vorm. De job slikt een mislukte clone bewust in
zodat een onbereikbare tap een afgeronde release niet rood maakt — maar de tap
is publiek, dus die clone slaagt óók met een dood token. Een groene clone bewees
niets; pas de push viel om.

Daarom omgekeerd. `.forgejo/workflows/update-cask.yml` in
LibreKAT/homebrew-ocideck leest elk half uur de nieuwste stabiele release
publiek uit, haalt script en sjabloon op bij díe tag, en pusht met het per-run
Actions-token dat Forgejo voor die repository zelf aanmaakt. Geen secret meer,
niets dat verloopt. Getoetst met beide takken: een verschil wordt gepusht, en
een gelijke cask levert geen commit op.

De prijs is dat de cask maximaal een half uur achterloopt op een release in
plaats van binnen de run bij te trekken. Voor een tap is dat betekenisloos —
`brew update` draait op de klok van de gebruiker — en het weegt niet op tegen
een inloggegeven dat verloopt.

De terugleescontrole blijft: `tap-mirror-check.yml` leest dagelijks wat er écht
in de tap en zijn spiegel staat. Nieuw in de test zijn de twee paden die de tap
per run ophaalt; die koppeling loopt over een repo-grens en zou anders stil
breken bij een hernoeming.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
brenno merged commit f2ec70ca15 into main 2026-08-21 11:38:42 +00:00
brenno deleted branch chore/cask-zelfbijhoudend 2026-08-21 11:38:43 +00:00
Sign in to join this conversation.
No description provided.