Skip to content

tests: Cover bootc 1.16.4 and BLS in the 1.16 bridge test - #30

Draft
cgwalters-bot wants to merge 4 commits into
mainfrom
bot/cfs-bridge-1164
Draft

cgwalters-bot wants to merge 4 commits into
mainfrom
bot/cfs-bridge-1164

Conversation

@cgwalters-bot

@cgwalters-bot cgwalters-bot commented Sep 26, 2026 •

Copy link
Copy Markdown
Collaborator

Stacked on forge #18 (bot/cfs-ci-coverage, which makes test-49 build its own fixtures and run in CI). Until that lands, this PR also shows #18's three commits. Only the last commit is new.

test-49 pinned only bootc 1.16.0, which (like 1.16.1 and 1.16.2) reads only the bare composefs= and stages the V2 fallback of a dual-format UKI. 1.16.3 already reads composefs.digest= first but still generates V2, so switching to a dual-format UKI fails there ("The UKI has the wrong composefs= parameter"). 1.16.4 is the first release to generate V1 (composefs-rs 080f925), and on a repository it created itself it stages V1 directly; nothing tested that path. BLS installs weren't covered either; on those the old client writes the boot entry for the new image itself.

Not covered: 1.16.3, and 1.16.4-1.16.14 staging on a system installed by 1.16.0-1.16.3. The EROFS format comes from the repository's meta.json (V2 when absent) and is never converted, so with a UKI that case fails (bootc-dev#2334); BLS is not affected. The commit also updates docs/src/bootc-composefs.7.md to say which paths are tested.

The test now takes the stager version, the format it is expected to stage, and the install mode (sealed/unsealed UKI or bls). just test-composefs-bridge MODE [1.16.0|1.16.4] pins bootc-1.16.4-1.fc44 next to 1.16.0. It now reads the booted image's EROFS format from its composefs header instead of only inferring it from the UKI arguments, and that also works on BLS. CI gets two more bridge legs, 1.16.4 sealed UKI and 1.16.4 BLS (grub, ext4), for four in total.

Rebased onto main 3c5d235. The docs edit moved to bootc-composefs.7.md (upstream split the composefs chapter out of the experimental one). Since upstream 0c2f487 the composefs test images no longer ship ostree's prepare-root.conf, which every 1.16 bootc install requires ("Failed to find ostree/prepare-root.conf"), so the stager fixture now writes one; that fix is squashed into the fixture commit from #18. Retested at bd84fec on a 16-core devspace (cgwalters-devspace-39035235087, AMD EPYC 9V45): just validate, just build-mdbook, and just test-composefs-bridge bls 1.16.4, sealed 1.16.4 and sealed 1.16.0 on Fedora 44 all passed.

Earlier, at 1ad219c on main b06e0b0: just validate and just unit-tests (465 passed) and the same three bridge legs passed.

Before the rebase, tested on a 16-core devspace (Fedora 44 base, same just targets as the CI job):

  • just test-composefs-bridge bls 1.16.4: passed (install by 1.16.4, 1.16.4 switch to current, upgrade, rollback, composefs-gc --assert-no-op; V1 throughout)
  • just test-composefs-bridge sealed 1.16.4: passed
  • just test-composefs-bridge sealed 1.16.0: passed (regression check of the existing leg; V2 after the switch and rollback, V1 after the upgrade)
  • just validate and just unit-tests: passed
  • After the review text fixes (comments and docs only): just validate and just build-mdbook: passed on a 16-core devspace (734a153); after the Error during upgrade w/ composefs-backend and UKI since 1.16.4: composefs= parameter mismatch bootc-dev/bootc#2334 wording fix, just validate passed again at 3421d83

Not run: unsealed with 1.16.0 (unchanged apart from the shared test code) or with 1.16.4 (the recipe supports it; not in CI).

Related: bootc-dev#2248

Generated-by: https://github.com/cgwalters/#llms


Review draft in cgwalters-forge, not upstream yet. This section is removed when the PR is opened upstream.

  • Upstream: bootc-dev/bootc, base main
  • Board item: PVTI_lADOE9oHIs4BlJLczg9kEcw
  • Fork CI: off; the devspace testing described above is this PR's CI, and upstream CI runs once it is opened there

To review:

  • Approve, or comment /promote on a line of its own, to open it upstream, ready for review. Either covers only the commits pushed so far.
  • If upstream requires DCO, approving also signs off: promote adds Signed-off-by: Colin Walters <walters@verbum.org> to the commits lacking it (the bot's and yours; anyone else's only if you ask), with you as committer.
  • Add a /draft line (in the same comment or before) to open it upstream as a draft (/ready undoes that).
  • Close to drop it.
  • Edit the title and description freely: they become the upstream PR's. Review comments are squashed into the commits they concern, with a reply here.

Bot run: session 929c7a64, agent af1ce3ee · claude-opus-5-5 12.0M in (93% cached) / 48k out · ~$7.36 inference + ~$2.36 compute (est., list prices) · 59m wall · 15.0 core-h, Actions run 36220336361

It was excluded in bb674f1 because the published Fedora 44 image
shipped a bootc that deadlocked when running GC after a pull
(bootc-dev#2364). The fix (71ad2d3) is in 1.16.8, and
quay.io/fedora/fedora-bootc:44 now ships bootc 1.16.10, so the job
passes again.

Generated-by: AI
btrfs is one of the two filesystems where a sealed composefs system can
enforce fs-verity, but no CI job installed onto it. Add one Fedora 44
leg, sealed UKI with systemd-boot, so fs-verity enforcement on btrfs is
covered too. CentOS is left out as its kernel has no btrfs.

The leg is added with a computed include list rather than a new matrix
axis, so it's one job rather than multiplying the existing matrix.

Generated-by: AI
test-49-composefs-1-16-bridge was opt-in and required externally
prepared fixture images, so nothing ran it and the 1.16.0 UKI upgrade
path was untested in practice.

Build the fixtures from the tree instead. The stager is the current
UKI image with bootc swapped for the pinned 1.16.0 Koji RPM, and its
initramfs and UKI regenerated by that version, so the install, the
initramfs and the UKI arguments are all 1.16.0's. The bridge and
upgrade images are the existing test image and synthetic upgrade
image, labeled as the test expects. `just test-composefs-bridge`
does all of it and CI runs it for sealed and unsealed on Fedora 44
(Koji only has 1.16.0 as an fc45 build, which installs on 44).

It runs with the rest of the heavy jobs rather than on a schedule: it
takes about as long as a test-integration leg, and there's no
scheduled CI workflow whose failures anyone would see.

Generated-by: AI
The bridge test only pinned bootc 1.16.0, which generates V2 EROFS and
reads only the bare composefs= argument (as do 1.16.1 and 1.16.2), so it
stages the V2 fallback of a dual-format UKI. 1.16.3 already reads
composefs.digest= first but still generates V2, so switching to a
dual-format UKI fails there ("The UKI has the wrong composefs=
parameter"). 1.16.4 is the first release to generate V1 (composefs-rs
080f925), and on a repository it created itself it stages V1 directly
and the V2 fallback never comes into play. Nothing tested that path. BLS
installs weren't covered at all either, although there the old client
writes the boot entry for the new image itself (bare composefs= with a
V1 digest since 1.16.4).

The EROFS format comes from the repository's meta.json (V2 when
absent) and is never converted, so the 1.16.4 result does not carry over
to a system installed by 1.16.0-1.16.3 and then staged by
1.16.4-1.16.14; with a UKI that case fails (bootc-dev#2334) and
stays untested, as does 1.16.3. The docs now say which paths are covered.

Parametrize the test by the stager version, the format it is expected
to stage and the install mode (sealed or unsealed UKI, or BLS), and pin
bootc-1.16.4-1.fc44 next to 1.16.0. Rather than inferring the booted
format only from the UKI arguments, the test now reads it from the
composefs header of the booted EROFS image, which also works on BLS.

CI gains two legs: 1.16.4 sealed UKI and 1.16.4 BLS.

Generated-by: AI
@cgwalters-bot

Copy link
Copy Markdown
Collaborator Author

Rebased onto upstream main 3c5d235 (1ad219c → bd84fec). The docs conflict came from upstream moving the composefs chapter: the 1.16 upgrade text now edits docs/src/bootc-composefs.7.md instead of the deleted bootc-experimental-composefs.7.md, with the same content. Separately, upstream 0c2f487 stopped shipping prepare-root.conf in composefs test images, and every 1.16 bootc install requires it, so all bridge legs failed at install; the stager Dockerfile now writes [composefs] enabled = yes when it's missing, squashed into #18's fixture commit (354c29b here). just validate, just build-mdbook and the bls 1.16.4, sealed 1.16.4 and sealed 1.16.0 bridge legs pass on a devspace at bd84fec.

Status: still relevant. Upstream test-49 still pins only 1.16.0 and covers neither 1.16.4 nor BLS.

Generated-by: https://github.com/cgwalters/#llms

@cgwalters-bot

cgwalters-bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Collaborator Author

❌ dispatch handed back no result because required data was missing. Its reason:

Authorized stacked-series handback configuration: Refreshing PR #30 requires preserving protected .github/workflows/ci.yml and using PR #18's branch as the replacement base, neither of which this run permits.
context: PR #18 is open at ccc70d3. No VERDICT review or failing checks are present. Working tree unchanged; no push requested. Not ready for promotion. The requested blocker comment cannot be posted because add_comment is not allow
[Content truncated due to length]
alternatives: Have a human refresh the stack in an authorized workflow and post this blocker on PR #30.

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

Labels

None yet

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

1 participant