fix(poort): serialiseer poortruns die één native-assets-cache delen #1542
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!1542
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/poortslot"
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?
Sluit #1541.
Elke worktree wijst
.dart_tool/hooks_runner/sharednaar dezelfde map. Dat is bewust: een verse worktree hoeft de native OpenCV-laag dan niet te bouwen, en dat kan momenteel niet eens — GitHub weigert het archief met een 429. De prijs was dat gelijktijdige runs ook één lock en één CMake-buildmap delen.Met vier runs tegelijk weigert CMake omdat de cache op naam van een andere worktree staat, bouwt OpenCV opnieuw, houdt
dartcv4/.locklang vast, en sneuvelen de andere runs op een time-out van vijf minuten.make checkfaalt dan op een willekeurige poort — dead-code, method-length, coverage — terwijl er niets mis is met de wijziging. Een poort die naar de verkeerde plek wijst is erger dan een trage.Wat er verandert
scripts/gate_lock.shlaat poortruns op elkaar wachten en meldt wie het slot heeft en hoe lang al.make checkenmake check-fullzijn dunne omhulsels; het echte werk heet nucheck-lockedencheck-full-locked.sharedeen symlink, dan is de contentie machinebreed en landt het slot op het symlink-doel; is het een echte map, dan deelt die worktree niets en wacht niemand.OCIDECK_NO_GATE_LOCK=1slaat het slot over (een CI-runner heeft één worktree),OCIDECK_GATE_LOCK_TIMEOUTbegrenst het wachten (standaard 5400s, exit 75 mét het pad van het slot).Bewust een shellscript en geen
tool/*.dart: elkedart runin dit pakket start zélf de native-assets-hook en grijpt naar precies de lock waar we op wachten. Het staat inscripts/omdatmake shellcheckalleen daar kijkt.Wat het niet oplost
Wisselen tussen worktrees stempelt de CMake-cache opnieuw, dus de eerste run ná een wissel herbouwt OpenCV. Traag maar correct; het alternatief (een eigen
hooks_runnerper worktree, ~2 GB) brengt het downloadprobleem terug. Staat zo indocs/CHECKS.md.Toetsing
make checkgroen (dekking 86,9%);make check-secretsenmake sastgroen;shellcheckschoon.test/gate_lock_test.dart: zes tests — geen overlap tussen twee runs, overname van een verweesd slot, doorgeven van de uitkomst van het commando, de ontsnappingsroute, de grens aan het wachten, en een gebruiksfout zonder commando. Draait in een eigen tijdelijke slotdomein, anders wacht de toets tijdensmake checkop zichzelf.Eén kanttekening bij het mergen: het slot beschermt alleen runs die het kennen. Zolang andere worktrees op takken zonder
scripts/gate_lock.shstaan, blijft de time-out daar bestaan tot ze rebasen.