Skip to content

ci: assert kubeadm exposes the upgrade-path surface per minor#11

Merged
wrkode merged 1 commit into
mainfrom
ci/upgrade-edge-assertions
Jun 2, 2026
Merged

ci: assert kubeadm exposes the upgrade-path surface per minor#11
wrkode merged 1 commit into
mainfrom
ci/upgrade-edge-assertions

Conversation

@wrkode

@wrkode wrkode commented Jun 2, 2026

Copy link
Copy Markdown
Collaborator

Closes the U-N backlog item: lock the "the shipped kubeadm supports what the upgrade path calls" assumption on every PR, across the supported window — no release tag required.

After CI builds each per-minor image (1.34/1.35/1.36), a new step runs the bundled kubeadm and asserts the subcommands/flags the provider drives for upgrades:

  • upgrade apply: --yes, --certificate-renewal
  • upgrade node: subcommand exists
  • init phase kubelet-start: --config (ADR-12-R1 API-free kubelet-config repair)
  • init phase upload-certs: --config (cert-key via config, never argv — the mint keystone)

An upstream removal/rename of any of these now fails CI before it can break an upgrade at runtime.

Coverage split

  • Edge logic (accept +1 minor; refuse skip-level / downgrade / out-of-window) — already covered by TestUpgradePath + the Plan table in the fast test gate.
  • Shipped-binary surface (this PR) — runs inside the images CI already builds.
  • Full live upgrade (1.34→1.35 end-to-end) — stays the manual libvirt smoke (a runner can't reboot / A/B-swap).

Verified the flags against real kubeadm v1.35.5 before committing. Reuses the existing image-build matrix; no release/tag involved.

🤖 Generated with Claude Code

After building each per-minor image, run the bundled kubeadm and assert it
exposes exactly the subcommands/flags the upgrade path drives, so an upstream
removal/rename is caught on every PR before it breaks an upgrade at runtime:
- upgrade apply: --yes, --certificate-renewal
- upgrade node: subcommand exists
- init phase kubelet-start: --config (ADR-12-R1 API-free kubelet repair)
- init phase upload-certs: --config (cert-key via config, never argv -- the mint
  keystone, ADR-11 #3 / ADR-12 B3)

Runs inside the images CI already builds (1.34/1.35/1.36) -- no release/tag
needed. Pure edge logic (accept +1 minor; refuse skip/downgrade/out-of-window)
is already covered by TestUpgradePath; the full live upgrade stays the libvirt
smoke. Verified the flags against real kubeadm v1.35.5 before committing.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: William Rizzo <william.rizzo@gmail.com>
@wrkode
wrkode merged commit b9c4b3a into main Jun 2, 2026
6 checks passed
wrkode added a commit that referenced this pull request Jun 2, 2026
v0.2.0 publishes the cluster-upgrade lifecycle (PRs #9/#10/#11) as
per-minor ghcr images. Update the README pull examples and the
release-cut example tag from v0.1.0 to v0.2.0 so testers copy the
current, upgrade-capable images.

Signed-off-by: William Rizzo <william.rizzo@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant