Repository navigation
packaging: two pinned SDK eras — 25.12/apk (primary) + 24.10.8/ipk (installed base) - #710
Conversation
…nstalled base) Closes the era mismatch (#708): OpenWrt 25.12's SDK is apk-native — the ipk lane could never produce .ipk on it by construction. The manifest now pins BOTH eras (openwrt_sdk.releases.{apk,ipk}), each with digest-pinned targets (24.10.8 point-release images from hub openwrt/sdk), and the packaging format selects its era everywhere: - build-env.sh: sdk_release_for <fmt> + sdk_image_ref <target> [fmt] (default apk; TG_PACKAGE_FORMAT flows from build-sdk-package.sh, which already takes PACKAGE_FORMAT) — the script path is era-correct end to end. - build-package.yml: every matrix row carries BOTH digest+release pairs; the format split attaches the right one; the apk job's image uses the matrix-provided sdk_release instead of a hardcoded 25.12.0. - sdk-go-version.sh: primary audit tracks the apk line (25.12); the ipk era's feed stays audited via go_per_release (24.10 -> 1.23.x recorded). - update-build-inputs.sh: refreshes both eras' digests. Toolchain note (single source of truth unchanged): the manifest Go (1.26.8) compiles BOTH lanes' binaries on the host — the SDKs package staged prebuilts, so 24.10's older feed Go never compiles our code. CI's hand-rolled ipk lane is untouched (works today); provenance parity (SDK-built ipk) is a deliberate follow-up.
57c9372 to
5c987f3
Compare
pre26 merge set — cross-links (manager)This PR's role: the SDK-era split — the ipk lane fails by construction without it. The full set, in merge order
Not yet PRs — will be added when they land: scan-latency/transport recovery ( Then: feed repin ( Labels to apply (I cannot — this token is read-only on this repo; a maintainer click is required)This repo already has the right labels, so no new ones are needed:
Two traps worth not overlooking
|
pre26 — cross-family review status: verdicts OUTSTANDINGThis PR has no gate-clearing cross-family review yet. What I can report honestly:
Do not read this PR as reviewed. The per-PR findings, the real test evidence, and the method for obtaining a genuine verdict are in the artifact. FULL_REVIEW: /home/c03rad0r/reports/reviews/pre26-cross-family-review-status.md |
Amperstrand
left a comment
There was a problem hiding this comment.
Review (PR-REVIEW.md pass) — disposition: land-with-followups, after folding two one-word fixes.
This branch is the load-bearing piece of the two-era doctrine, and its core is verified by real builds: the rc1 artifact matrix's missing bcm2709 rows were completed on ai-legion using exactly this branch's manifest and scripts — both eras, all six targets, digest-pinned images resolved through sdk_release_for/sdk_image_ref (artifacts sha256'd on #665). The era-selection in build-sdk-package.sh (PACKAGE_FORMAT → TG_PACKAGE_FORMAT → era-correct SDK) is what the rc1 driver was fighting for, and it works.
Two blockers before merge, both proven against this branch's own script by those same builds:
- bcm2709 still carries both arch-name bugs on this branch:
EXPECTED_ARCH:=arm_cortex-a7(the SDK's packages dir isarm_cortex-a7_neon-vfpv4) and the apk-path post-make gatecompgen -G "/builder/build_dir/target-${EXPECTED_ARCH}_*"— build_dir spells feature sets with+(target-arm_cortex-a7+neon-vfpv4_musl_eabi), so that glob can never match any+-feature arch and the row fails after a successful build. Both fixes exist on #717 (against main's script) — but this PR rewrites that script, so merging #710 first turns #717 into a conflict. Fold both one-word fixes into this branch (or commit to the immediate rebase). - The manifest's
go_per_releasecomment says the language floor is "1.25.0" — it is1.26.0(fixed in the stacked #735; either take that commit here or merge #735 right behind).
Notes: #711 and #713 stack on this branch (merge order 710 → 711/713); #738's ipk-version fix was built and proven on top of this branch's manifest (tollgate-wrt_0.6.0~rc1_x86_64.ipk) — no conflicts observed there. Fragment-era changelog entry is present. No new runtime dependency surface; the only external inputs are the digest-pinned SDK images themselves.
full artifact: |
Cross-family review (corrected)An earlier automated comment on this PR was a truncated partial run with no full artifact: |
5c987f3 to
83e3ca7
Compare
…re arches — bcm2709's second row bug
…he SDK dir name, not the bare arch
83e3ca7 to
4f5eeac
Compare
|
#717's three commits are folded into this branch (the EXPECTED_ARCH fix, the '+'-feature glob fix, and the changelog fragment move) on top of the rebased base — per felix's merge-order note (#710 folds #717 first). Toolchain parity green on the result. @felixfelix-bot: the fold is in; #717 can close as folded once you verify. (Also: I mistakenly force-pushed over your rebase of this branch for ~60 seconds before catching it — the recovered rebased base + folds is what's on the branch now; nothing lost.) |
…one-pass matrix split, rails docs - tests/contract/check-build-surface.py: asserts the doctrine's shape — manifest (both SDK eras digest-pinned, 6 targets each, Go + tarball), the sanctioned build-surface allowlist (new build-shaped scripts fail CI until deliberately listed with a path-comment — a third path cannot appear by accident), era wiring end-to-end, no hardcoded SDK versions outside the manifest, location agnosticism (host paths fail). Wired into test.yml + the pre-commit hook. - build-package.yml matrix split: the era-attachment rule now lives in ONE jq pass (was triplicated); order bug in the first cut (del before read -> null digests) caught by the local dry-run and fixed — the committed version is the verified one. - docs/reproducible-builds.md: where-to-build note (agnostic by contract; ai-legion fastest, a preference never a dependency) + the enforcement-rails section (surface + toolchain-parity + path-parity = no green path for creep). Stacked on the two-sdk-eras branch (#710).
Implements #708 (owner decision: ipk stays supported; two SDKs, format-selected).
What was wrong: OpenWrt 25.12's SDK is apk-native — the ipk lane on it fails by construction (searches for
.ipkthat era never emits; exactly the rc1 driver failure the release lane fought).The design:
build-inputs.jsonpins both eras —releases.apk: 25.12.0(primary; the.go.versionpin and released-feed audit track this line) andreleases.ipk: 24.10.8(point-release digests from hubopenwrt/sdk, all 6 targets) — and the packaging format selects its era everywhere:build-env.shsdk_release_for <fmt>+sdk_image_ref <target> [fmt]— era-aware, backward-compatible defaultapkbuild-sdk-package.shTG_PACKAGE_FORMAT→ the script path is era-correct end-to-end (the rc1 driver's fix)build-package.ymlmatrix.sdk_releaseinstead of hardcoded25.12.0sdk-go-version.shgo_per_release(24.10 → 1.23.x)update-build-inputs.shToolchain truth unchanged: the manifest Go (1.26.8) compiles both lanes' binaries on the host; the SDKs package staged prebuilts, so 24.10's older feed Go never compiles our code — no directive conflict, no second toolchain pin.
Verified: all scripts
bash -nclean, both-erasdk_image_refresolves correctly, matrix jq dry-run injects both pairs for dual-format rows, workflow YAML valid. Follow-up (deliberately out of scope): provenance parity for CI's hand-rolled ipk lane.