fix(release): harden release_auto.sh against tag/mirror/branch/signing failure modes #1388
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1388
Loading…
Reference in a new issue
No description provided.
Delete branch "hardening/release-auto-failure-modes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat
Doorlichting van
scripts/release_auto.shop faalmodi — met nadruk op de klasse dieeen verse run overleeft maar
--resumeof een tweede machine breekt (zoals debad object type-bug van v0.4.1). Drie fixes geïmplementeerd; onderaan de volledigeaudit met de afweging per punt.
Geïmplementeerd
1. Mirror-tag: een eigen, herstelbaar faalpunt (de grootste)
tag_and_pushpushte origin én mirror en zetteTAG_PUSHED=1pas ná béíde.Faalde de mirror-push:
release-CI al startte;
--resumede mirror-push over (early-return op de bestaande origin-tag),dus de GitHub-tag landde nooit →
windows-ophalen(workflow_dispatch --ref $TAG)vond de ref niet → de Windows-build draaide nooit →
publicerenleverde geenSHA256SUMS→ fase 3 stierf.Dit is de grondoorzaak achter de terugkerende
SHA256SUMS-404's.Fix: aparte
ensure_mirror_tag()(idempotent per remote);TAG_PUSHED=1zodraorigin de tag heeft (vóór de mirror-stap, zodat de ERR-trap klopt); en zowel
tag_and_pushals de "tag staat al op origin"-tak vanresume_releaseborgen demirror-tag.
--resumerepareert nu een ontbrekende mirror-tag alsnog — ook op eenandere machine (haalt de tag zo nodig eerst van origin).
2. Verse-run fail-fast op een half-af gebleven release-branch
Bleef een release-branch op origin achter van een afgebroken poging, dan botste een
verse run pas laat op een non-fast-forward branch-push. Nu stopt hij vroeg (vóór het
wachtwoord en de build) met het
--resume-advies.3. macOS-ondertekening/notarisatie vóór de ~10 min build getoetst
notarize_macos.shkrijgt een--preflight-modus (identiteit + notary-profiel, vianotarytool history);preflightroept 'm aan bij een verse run. Een verdwenennotary-profiel (v0.1.3-rc1) faalt nu vóór de build i.p.v. pas bij het inzenden ná de
build.
Test
Statische invarianten in
release_auto_version_test.dart(leest het script, draaitgeen bash — dus ook groen op de Windows-mirror-CI). Voor de mirror-klasse eerst rood
aangetoond tegen de onherstelde code, daarna groen:
ensure_mirror_tagis idempotent en pusht naar de mirror;tag_and_push+resume_release) borgt de mirror-tag;TAG_PUSHED=1staat vóór de mirror-stap;Poort & scans
make checklokaal groen (volledige suite + dekkingsvloer — die draaien niet in deCI-static-gate).
make check-secrets(gitleaks + trufflehog) enmake sast(semgrep): geenbevindingen.
shellcheckschoon.Bewaker
Bewust overgeslagen. Geen nieuw bestandsformaat, opslag, afhankelijkheid, nieuwe
vertrouwde partij of publieke belofte. De mirror-push is bestaand uitgaand verkeer
(de GitHub-spiegel), nu idempotent en herstelbaar gemaakt; geen nieuwe grens.
Volledige audit — overwogen faalmodi
Weggewerkt (hierboven): mirror-tag onafhankelijkheid + resume-herstel;
TAG_PUSHED-misrapportage bij mirror-fout; verse-run branch-collision; latesigning/notary-fout.
Bewust laten staan, met reden:
publiceren(plan-#8): ontbreektSHA256SUMSdooreen écht gefaalde upstream-job, dan dispatcht fase 3 die job niet opnieuw — hij
stopt met het
--resume-advies. De meest voorkomende grondoorzaak (ontbrekendemirror-tag) is met fix 1 weg; auto-redispatch voegt CI-dispatch-logica + risico toe
en verdient een aparte, gerichte PR.
api()zonder retry: een transiente netwerkhik kan een stap afbreken. Bewustniet blind geretried — de POSTs (merge/dispatch/asset-upload) zijn niet idempotent,
en de hele keten is al
--resume-baar, dus een afbreking is herstelbaar, geencorruptie.
find_release_prlimit=50: bij >50 PR's sinds de release zou de titelmatch dePR kunnen missen. Praktisch nooit (resume gebeurt snel erna); niet aangeraakt.
wait_gateop de gecombineerde status: wacht op álle contexts (incl. linux-gate~27 min) — correct vóór een release; de 75-min-timeout dekt de wachtrij.
build-release+ notarize's schone herbouw): bewust, vooreen schoon
App.framework-zegel; niet "gefixt".Wil je de auto-redispatch (plan-#8) ook, dan doe ik dat als aparte PR.
🤖 Generated with Claude Code