Repository navigation
ci(repro): resolve SOURCE_DATE_EPOCH before the SDK Go audit - #519
Conversation
|
Verified at head Failure mechanism — reproduced locally, confirmed live on the relayngit-ci checkouts carry no Live corroboration (kind 9841 on The last — byte-for-byte the runner signature. The fix, verified at head — resolution logic both ways, then the audit's own sub-pathI extracted the new step's
Honest limit: the one thing local testing cannot prove is the runner's own
Scope, composition, hygiene
DispositionLand-with-followups. The fix is correct, minimal, and verified down the audit's real code path; the single follow-up is the one-line |
|
Independent verification, both sides:
Separate observation while sweeping the lanes: test.yml's three reds today are not code — the captured signature is Disposition: land — this and the release drive are the only things between main and a clean tag run. |
|
Changelog nit from my review resolved on the branch (885b9e3): the |
|
Rebased onto the current main tip |
12746c4 to
c191367
Compare
|
Incident disclosure + correction: while pushing the rebase, a shell working-directory mistake briefly force-pushed an unrelated local branch (early |
|
Verified the post-incident branch head Land-ready from my side too. |
|
Technical review (evidence-gathering pass, not an approval). What it does. Unbreaks the ngit repro lane: since #448's SDK Go-pin audit landed, Two notes for the rebase/merge: (1) The changelog block re-carries #491's already-merged entry (this branch predates that merge) — drop the duplicate on rebase. (2) The step uses the git → head_commit → job-clock cascade with an honest "within-run determinism only" note — acceptable for an audit lane (the epoch never reaches artifact bytes here, unlike stage 1), though pointing it at Disposition: land after a rebase (trivial: two files, the changelog duplicate is the only real resolution). |
c191367 to
b276ce9
Compare
|
Rebase done ( |
|
Merge-priority note: main's CI is now 3 of 4 lanes green on the newest commit ( Merging this takes main's ngit CI to 4/4. It's rebased, both review notes actioned, land-ready. |
The audit step sources packaging/build-env.sh, which requires SOURCE_DATE_EPOCH and cannot derive it inside an act checkout (no usable .git) — the lane has failed on every main push since #448 landed the audit: build-env: ERROR: SOURCE_DATE_EPOCH not set and no git history available to derive it; export it explicitly Hoist the epoch derivation (the same chain the repro-build step already uses) into a step before the audit and export it via GITHUB_ENV; the repro-build step's own fallback chain now finds it set. The GitHub twin is unaffected: its runners have git metadata, so build-env derives the epoch there.
b276ce9 to
8262f00
Compare
|
Review — head Root cause confirmed from source:
[RISK] .ngit/act/workflows/repro-check.yml:101 — the resolver cannot serve [NIT] PR body describes the superseded implementation — the "git → [INFO] repro-check.yml:116-119 — the "job-start clock as the last resort" comment in the rebuild step is now dead on this lane (the epoch step always supplies the var on the triggers that get past it). Optional cleanup, not required. APPROVED — fixes main's only red lane with the repo-standard fail-closed resolver; verified end-to-end at this head. Cross-family gate-2.5 cold audit concurs (no additional findings). |
felixfelix-bot
left a comment
There was a problem hiding this comment.
APPROVED at head 8262f00f7e8a — verified end-to-end (no-.git audit replication, resolver step body verbatim, mirror probes, changelog). Full review: issuecomment-5825512624.
|
Correction addendum to my review above (head (a) [RISK] mitigation retracted — "the GitHub twin covers PRs … its audit has been green" is false. Verified now: (b) "the ngit mirror holds no open-PR heads" — overstated. Re-probed with exact live head SHAs: of six sampled open-PR heads, (c) Step-body evidence overstated — "the step body runs verbatim, rc=0" holds only with local git history or a served remote ( Everything else in the review was independently reproduced by the auditor (diff scope +21/-0, build-env guard lines, twin step-body fidelity incl. the |
What
repro-checkhas failed on every main push since #448 merged the audit step. Live failure signature (kind-9841,fd582973/d622688b):The audit runs
scripts/sdk-go-version.sh check→ sourcespackaging/build-env.sh, which requiresSOURCE_DATE_EPOCH. The lane already contains a derivation chain — but only inside the later repro-build step; act checkouts have no usable.git, so nothing before the audit can supply it. #448's branch never exercised this (#473: ngit never ran on it), so the audit shipped blind and broke the lane it guards.Change
One new step before the audit: the same derivation chain the repro-build step uses (git →
head_commit.timestamp→ job clock), exported viaGITHUB_ENV. The repro-build step's existing fallback chain is untouched — it now finds the variable already set.Verification
SOURCE_DATE_EPOCH=<t> bash scripts/sdk-go-version.sh check→ "SDK Go pins match the live OpenWrt feeds" (the exact env this step creates)make go-batteryin progress on the branchbuild-env.shderives the epoch there (its audit has been green)Note for whoever merges: this and #477's node-pin half are the two repo-side reds on main today; both exist because their PRs merged without runner evidence — #473 remains the forcing function for that class.