fix(release): commit de versiebump vóór de poort zodat een afgebroken run main schoon laat #1447
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!1447
Loading…
Reference in a new issue
No description provided.
Delete branch "claude/laughing-vaughan-f47cec"
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?
Probleem
scripts/release_auto.shlegde de fase-1-versiebump (pubspec.yaml,kOciDeckVersion, de## [X.Y.Z]-CHANGELOG-sectie en de geregenereerdesbom/) pas in fase 2 vast. Brak fase 1 daarvóór af, dan liep de opruimroute mis:make build-release,make notarize-macos,codesign) valt viaset -ein de ERR-trap →on_err→cleanup_branch. Die deedgit checkout -(terug naar de vorige branch, meestalmain) engit branch -D.git checkout -draagt niet-gecommitte edits mee naarmain→ dirty tree. De volgende verse run strandde dan op de versie-consistentiegate ("pubspec staat op X maar origin/main op Y — waarschijnlijk sta je nog op een oude release-branch"), wat een verse retry blokkeerde — precies wat de fail-safe belooft op te lossen. Dit gebeurde na de afgebroken v0.4.2-run (pubspec bleef op0.4.2+16, CHANGELOG/export_metadata/sbom gewijzigd opmain).make check-release-faalroute (if ! make check-release; then die …) ruimde in het geheel niet op:die()doetexit 1, enexitslaat de ERR-trap (en duscleanup_branch) over. De melding "release-branch wordt opgeruimd" was daar een loze belofte.Fix (optie 1 — de schone: de oorzaak, niet het symptoom)
De versiebump wordt nu als één commit op de release-branch vastgelegd vóór
make check-release, niet pas in fase 2. Gevolg:git branch -D(incleanup_branch);git checkout -draagt een schone boom naarmain.mainblijft schoon en een verse retry werkt meteen.make check-release(en de build) lezen de bestanden ongeacht commit-status, dus vervroegen van de commit is veilig.make check-release) i.p.v.if ! … then die, zodat óók een gefaalde poort via de ERR-trap opruimt.on_errmeldt zelf stap + regelnummer, dus er gaat geen context verloren.Geen blanket
git reset --hard— deze checkout wordt gedeeld door parallelle sessies; de opruiming blijft gericht (branch weg).Empirisch bewijs
Wegwerp-git-harness die de exacte
cleanup_branch-commando's naspeelt:maindirty: pubspec0.4.2+16, 4 bestanden gewijzigdmainschoon (0.4.1+15), release-branch wegOok empirisch bevestigd (bash 5.2):
exit 1triggert de ERR-trap niet; een kale-command-fout wel — de reden waarom dedie-route nooit opruimde.Statische invarianten (
test/release_auto_version_test.dart)Drie nieuwe tests (lezen het script, draaien geen bash → ook groen op de Windows-mirror-CI):
make check-release(precies één staging van de vier paden);make check-releasestaat niet in eenif ! … die-bypass (valt in de ERR-opruiming);cleanup_branchaan, diegit branch -Ddoet en nooitgit reset --hard.Verificatie
make check→ groen (CHECK_EXIT=0; volledige suite + poorten, inclusief de 3 nieuwe tests: 22/22).shellcheck scripts/release_auto.sh→ schoon;bash -n→ schoon.make check-secrets→ geen leaks (gitleaks dir+git, trufflehog filesystem+git).🤖 Generated with Claude Code
release_auto.sh legde de versiebump (pubspec, kOciDeckVersion, CHANGELOG, SBOM) pas in fase 2 vast. Brak fase 1 vóór dat punt af (ERR-trap → cleanup_branch), dan droeg de 'git checkout -' in cleanup_branch die niet-gecommitte werkboom-edits mee naar main — dirty tree, waarna de volgende verse run op de versie-consistentiegate strandde ("pubspec staat op X maar origin/main op Y"). Dat gebeurde na de afgebroken v0.4.2-run (pubspec bleef op 0.4.2+16 op main). Nu wordt de bump als één commit op de release-branch vastgelegd vóór 'make check-release'. Een afgebroken fase 1 verwijdert 'm dan volledig met 'git branch -D'; main blijft schoon. make check-release (en de build) lezen de bestanden ongeacht commit-status, dus vervroegen is veilig. De poort draait nu als kale aanroep i.p.v. 'if ! make check-release; then die': die() doet 'exit 1' en dat slaat de ERR-trap — en dus cleanup_branch — over (empirisch geverifieerd), terwijl een kale-command-fout de trap wél triggert. Zo ruimt élke fase-1-abort op, niet alleen de bare-command-paden. Statische invarianten in test/release_auto_version_test.dart borgen de volgorde (commit vóór de poort), de kale poort-aanroep en de gerichte opruimroute (branch -D, nooit een blanket reset --hard op deze gedeelde checkout). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>