CI consumer checkout clones every job into the same src path, so concurrent jobs swap the tree under a running build #78
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Found while diagnosing bread PR24 (run 157, feature/breadbug-watchdog at bbb12d6383) and PR44 (run 158, fix/bread-42-hyprland-host-bridge at 71c469b452).
Symptom: run 157's test compile failed with unresolved bread_bug::livestack, bread_bug::procid, store::ProcessIdentity and MarkerKind::Stopped. bbb12d6383 defines all of them. Clippy and the build step in the same run passed.
Confidence: high that the consumer checkout step is unsafe when jobs share a runner. Reproduced locally with two branch fixtures cloned into one shared src path: the second clone replaced the tree under the first job. Medium-high that this caused run 157: its failing compile saw lib.rs without the livestack/procid modules (matches 71c469b452) but bread-bug/tests/livestack_real.rs present (only in bbb12d6383). No single commit has that mix. The runner workspace is not readable from hermes, so the exact interleaving is not confirmed.
Mechanism:
rm -rf src && mkdir src && git clone --branch "$GITHUB_REF_NAME" --depth 1 ... srcas a step before ci/build.sh.Not a duplicate of ECO-54, ECO-28 or BREAD-41: those cover the build.sh lock and cache. This is the checkout step before the lock.
Proposed fix (prerequisite: a shared helper in bread-ecosystem, since the pattern is copied across consumer repos):
Regression: two concurrent fixture jobs on different branches must each see their own tree; the existing ci/test-build-lock.sh must still pass.
Evidence: https://git.breadway.dev/Breadway/bread/actions/runs/157 and /158 (job logs at .../jobs/0/attempt/1/logs).
Independent review of PR 79 at
de66355a16: CHANGES REQUESTED, not merged. Full checklist (5 required items, non-blocking notes) is on the PR: #79 . Summary: local regression, build-lock and pin-lint pass and the exact-head CI check is green, but (1) test-ci-checkout.sh is not run by check.yml, (2) token-only URL userinfo is accepted, (3) workflow inlines the clone without the helper's HEAD verification, (4) no documented consumer path to obtain the helper, (5) vacuous ssh test case.Coordinator verification of the accepted fix. Shared helper PR79 independently passed (comment 5354) and merged
c6442cabb6; bread-ecosystem main check on that merge is success (4m46s). Bread consumer PR49 accepted (comment 5308) and merged 40ee494aef39981943c6141c547c104968d93b03; its post-merge dev-release run 162 is success, and the watchdog branch now builds green on the same tree (PR24 head 834c07e check success 17m37s). So the reproducing consumer (bread) plus the shared helper are both fixed and green. Residual, not silently claimed: other consumers (breadbar, breadbox, breadcrumbs, breadpad and bread-ecosystem's own main-trigger workflows) still use the old fixed src path; ECO-81 and ECO-82 track two of them and a new card tracks the rest.