Skip to content

Packaging era split: 25.12 SDK cannot emit ipk — two pinned SDKs (format-selected), or drop ipk #708

Open

Description

@Amperstrand

The 24.x/25.x packaging split — analysis and proposal (from the rc1 build driver failures)

Observed: the ipk-lane driver failed on the 25.12.0 SDK with "no .ipk found" — because OpenWrt 25.12 is the apk-native era: its SDK emits .apk regardless of the CONFIG_USE_APK dance (scripts/build-sdk-package.sh appends CONFIG_USE_APK=y only for the apk branch; 25.12's default is already apk, so the ipk lane searches for an extension that era never produces). The rc1 build's apk lane succeeded (tollgate-wrt-0.6.0_rc1-r0.apk staged); the ipk lane cannot succeed on this SDK by construction.

Why ipk can't just be dropped: fork #93/#110's evidence — the installed base installs via opkg on feed-less 24.10-era systems (and orphan-removal semantics that #707 fail-louds). The ipk output is the format those devices consume.

Proposal — two pinned SDKs, format-selected:

  1. packaging/build-inputs.json: extend openwrt_sdk from a single release: 25.12.0 to per-format pins — apk: {release: 25.12.0, …} and ipk: {release: 24.10.x, …} — each with its own digest-pinned targets. The scaffolding already exists: go_per_release maps 24.10's toolchain today, and sdk-go-version.sh audits per release; the .go.version pin follows the apk (release) line as the shipped-binary truth, with the ipk SDK's older Go checked as ≥ directive floor (and if 24.10's feed Go < 1.26: the ipk lane pins GOTOOLCHAIN from the manifest tarball — the same single-source-of-truth rule ci(toolchain): two paths, one truth — manifest-driven parity gates for the SDK and shortcut build paths #687 established).
  2. build-sdk-package.sh: PACKAGE_FORMAT selects its SDK; the driver's PACKAGE_EXTENSION check then matches what its era actually emits.
  3. CI matrix: arch × format → the right SDK per row.

Owner decision embedded: confirm ipk stays a supported output (recommend yes — the installed base needs it). If instead the answer is "25.12/apk only", the ipk matrix rows delete and this issue closes with the era note.

(From the orchestrator session; the release lane is fighting this exact mismatch in the rc1 driver right now — implementation can ride its current build work.)

Activity

  1. Amperstrand commented on Oct 7, 2026

    @Amperstrand
    CollaboratorAuthor

    Implemented — see the two-sdk-eras PR (linked). The owner decision embedded here (ipk stays supported) is recorded in the PR; 24.10.8 point-release digests pinned for all six targets. The rc1 driver mismatch the lane fought is fixed by the era-aware script path.

  2. Amperstrand commented on Oct 7, 2026

    @Amperstrand
    CollaboratorAuthor

    Decision record status (fleet verification, 2026-10-07): the embedded owner decision is settled — ipk stays a supported output (recorded here and in #710's opener; the installed base needs it, fork #93/#110 evidence). Implementation is #710 (branch packaging/two-sdk-eras, PR open, review-queued); doctrine #711; enforcement #713; CI unification post-rc1 #712.

    Verified against main just now: scripts/build-sdk-package.sh on origin/main carries no era selection (TG_PACKAGE_FORMAT/sdk_release_for: zero hits) — the ipk-on-25.12 failure mode this issue documents is still live on main. Per the closure criterion, this issue stays open until #710 merges; it closes then with the era note.

  3. Amperstrand commented on Oct 8, 2026

    @Amperstrand
    CollaboratorAuthor

    Status: implemented by #710 (the two-era pins + era-aware script path; battery-verified). This closes when #710 merges — linking so the auto-close or manual close lands with the right reference. The rc1 artifact matrix already validated the design in production (6 arches × both formats, ipk on 24.10.8).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions