Repository navigation
ci: Add opt-in bootc-operator reverse dependency test - #2
Draft
cgwalters-bot wants to merge 1 commit into
Draft
cgwalters-bot wants to merge 1 commit into
cgwalters-bot wants to merge 1 commit into
Conversation
cgwalters-bot
force-pushed
the
bot/operator-revdep
branch
2 times, most recently
from
September 24, 2026 00:08
c1cd8ab to
5f3b33d
Compare
bootc-operator drives `bootc switch`/`bootc upgrade` on Kubernetes nodes, so a bootc change can break it in ways our own tests don't cover. Run its e2e suite against bootc built from this tree. The operator's e2e tests boot bink node VMs from a prebuilt disk image, so we layer our RPMs onto the same bink node image the operator uses, build a disk image from it with bink's own tooling (which also means the PR's bootc does the install), and seed the bink registry with it in place of the operator's `seed-node-image` step. Everything else is the operator's own Makefile targets and host setup, with the bink commit taken from the operator's CI so the two stay in step. It takes roughly 1.5 hours and depends on another repository, so it only runs for PRs with the `ci/operator` label, on demand, and weekly. Closes: bootc-dev#2423 Generated-by: AI
cgwalters-bot
force-pushed
the
bot/operator-revdep
branch
from
September 24, 2026 00:13
5f3b33d to
a0f9ff6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
bootc-operator drives
bootc switch/bootc upgradeon Kubernetes nodes, so a bootc change can break it in ways our own tests don't cover. This adds an opt-in workflow that runs the operator's e2e suite against bootc built from the PR.How it works: the operator's e2e tests boot bink node VMs from a prebuilt disk image. The workflow builds Fedora 44 RPMs from the tree (
just package), layers them onto the same bink node image the operator tests with (read from the label of the operator's default disk image), round-trips it through the bink registry so its digest matches what the nodes see, and builds a disk image from it with bink's ownbuild-disk-image(so the PR's bootc also does theinstall to-disk). It then runs the operator's owndeploy-binkande2etargets, skippingseed-node-imagewithmake -osince we seeded the registry ourselves. The bink commit comes from the operator's CI workflow, so the two stay in step, and the host setup mirrors the operator's e2e job. No change to bootc-operator is needed.It takes roughly 1.5 hours, so it's opt-in: for PRs labeled
ci/operator(on the label being added, and on later pushes while it's present), viaworkflow_dispatch(with an optional operator ref), and weekly onbootc-dev. A maintainer needs to create theci/operatorlabel.The catch is that this is coupled to internals of the operator (its
deploy-bink/e2e/seed-node-imageMakefile targets andprint-var-*helper, thelocalhost:5000/node:latestregistry convention,BINK_COMMITin its CI workflow) and of bink (itsnode-images/fedorabuild-disk-imagetarget). If either side reshuffles those, this breaks, as the header comment in the workflow says. A more robust follow-up would be for bootc-operator to expose its e2e job as a reusableworkflow_callworkflow taking an RPM artifact (or node image), so the knowledge of how to test it lives in one place and this file shrinks to a singleuses:.FYI: bink's
build-disk-imagecurrently builds bcvk from a personal fork branch,Johan-Liebert1/bcvk@img-to-install-cli-opt(a workaround for a digest mismatch, see bootc-dev/bcvk#314, still open), so the install path here also goes through that branch until bink switches back to upstream bcvk.Design choices that came up in review, kept deliberately:
ci/operator, following the existingci/*label naming.packagejob isn't cached or shared. The better dedup would be to consumeci.yml's packages artifact once that's practical, rather than adding a separate cache here.Lessons from composefs-rs's
bootc-revdep.yml(which records a failed run on every push because of an invalidif:): the gating here uses only valid expressions and actionlint is clean apart from theubuntu-26.04runner label, which it doesn't know yet and whichci.ymlalready uses. Unlabeled PRs get a skipped run, not a failed one.Testing:
ci/operator: https://github.com/cgwalters-forge/bootc/actions/runs/35929518061 passed. The node image picked up the PR's RPM (bootc-202609232239.g43ff95f900), and all 9 operator e2e tests passed (ok .../test/e2e 1925s). Wall time: 30 min forpackage(no build cache), 55 min fore2e, of which 10 min is the disk image build.packagetimeout andpersist-credentials: false), a second full run at the current head also passed: https://github.com/cgwalters-forge/bootc/actions/runs/35937468141. The new assertion held (rpm -q bootc=bootc-202609240013.g5c07bd6a3f-1.fc44, the PR build, replacing the stockbootc-202609220256.g5ed9e3f700), and all 9 e2e tests passed (ok .../test/e2e 1915s). Adding an unrelated label (ci/merge) while it was running produced its own skipped run (https://github.com/cgwalters-forge/bootc/actions/runs/35937496687) and did not cancel it.skippedrun, and theopenedevent gave none.just packagefor fedora-44, node and disk image build,make -o seed-node-image deploy-bink, thenmake e2e, with all 9 tests passing in 1328s. That also confirmed thatmake -oskips the phonyseed-node-imagetarget and thatTestControllerMembership's booted-digest check passes with the round-tripped image.ubuntu-26.04label, same asci.yml.workflow_dispatch(including a non-defaultoperator-ref) and the weekly schedule. After the test run, the only change was the duration wording in a comment.CI note (2026-09-24): the
test-integration (centos-10, composefs, xfs, systemd, bls, unsealed)failure is unrelated to this change:plan-44-shadow-fixuphit a guest reboot timeout becausebootc-finalize-staged.servicetimed out stopping (the/bootautomount expire deadlock), the known flake fixed by #6. Failed jobs will be rerun once the run completes.Also note: the
labeledevent also re-runsci.yml(it already listslabeled), which predates this change.Closes: bootc-dev#2423
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.
bootc-dev/bootc, basemainPVTI_lADOE9oHIs4BlJLczg9kELoTo review:
/promoteon a line of its own, to open it upstream, ready for review. Either covers only the commits pushed so far.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./draftline (in the same comment or before) to open it upstream as a draft (/readyundoes that).