test(e2e): nightly workflow + heavy scenarios (HA, failure-status, upgrade) (#4202)#26
Merged
Merged
Conversation
…grade) (kairos#4202) Add a Tier-2 nightly e2e suite for the heavier scenarios too slow for the per-PR Tier-1 job (ADR-13 E4). Gated by //go:build e2e && nightly: the per-PR job (-tags e2e) excludes them; the nightly job (-tags "e2e nightly") compiles+runs everything. The existing Tier-1 files and ci.yml e2e job are untouched. Scenarios (test/e2e/nightly_*_test.go): - pre-membership FAILURE-STATUS: a worker reconcile against an unreachable endpoint fails loud within the DefaultBudget Total=8m ceiling (not the 14m exec backstop) and writes status Phase=Failed / Outcome=failure / Membership=uninitialized / Reason=ControlPlaneUnreachable / terminal=false / lastAction=wait-for-control-plane -- the #4099-1 never-hang proof. - multi-control-plane stacked-etcd HA: mint-join --role controlplane (asserting the upload-certs/cert-key keystone is present), cp2 control-plane join converges, 2 control-plane-role-labeled nodes, 2 etcd members. - kubeadm-layer in-place minor upgrade: swap the higher-minor toolchain into the running lower-minor container, pin kubernetesVersion=higher, and run a real kubeadm upgrade apply; asserts lastAction=upgrade-apply (no no-op), manifest+kubeletVersion at the higher minor. Self-skips (never fakes) when the higher-minor node image is not staged. nightly.yml runs on cron 0 3 * * * + workflow_dispatch, builds the lower (and, where a supported higher adjacent minor exists, higher) node images, and runs the suite. Actions SHA-pinned; per-job least privilege; leaked-container prune on failure. Makefile gains an e2e-nightly target; nodecontainer.go gains CopyInto + extractBinariesFromImage (argv-only, bounded, teardown-reaped) for the upgrade binary swap. Validated: failure-status and HA scenarios run GREEN end-to-end locally (failure surfaced at 8m5s == the budget ceiling; HA reached 2 CP nodes + 2 etcd members). The upgrade scenario is validated by the first nightly run / workflow_dispatch (it stages a second node image). Asserted status/action/budget constants verified against internal/* source. Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: William Rizzo <william.rizzo@gmail.com>
Collaborator
Author
|
Update after the first nightly (
Re-verified after removal: HA still green end-to-end (2 CP nodes, 2 etcd members); |
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.
What
Add a Tier-2 nightly e2e suite for the heavier scenarios too slow for the
per-PR Tier-1 job (ADR-13 E4). Closes kairos-io/kairos#4202.
Gated by
//go:build e2e && nightly: the per-PR job (-tags e2e) excludesthem; the nightly job (
-tags "e2e nightly") compiles + runs everything. Theexisting Tier-1 files and ci.yml's e2e job are untouched.
Scenarios (
test/e2e/nightly_*_test.go)endpoint fails loud within the
DefaultBudgetTotal=8m ceiling (not the 14m execbackstop) and writes
Phase=Failed / Outcome=failure / Membership=uninitialized / Reason=ControlPlaneUnreachable / terminal=false / lastAction=wait-for-control-plane— the #4099-1 never-hang proof.mint-join --role controlplane(asserting the upload-certs/cert-key keystone), cp2 control-plane join converges,
2 control-plane-role-labeled nodes, 2 etcd members.
the running lower-minor container, pin
kubernetesVersion=higher, run a realkubeadm upgrade apply; assertslastAction=upgrade-apply(no no-op) andmanifest +
kubeletVersionat the higher minor. Self-skips (never fakes) whenthe higher-minor node image isn't staged.
Workflow / tooling
.github/workflows/nightly.yml—cron: 0 3 * * *+workflow_dispatch; buildsthe lower (and, where a supported higher adjacent minor exists, higher) node
images and runs the suite. Actions SHA-pinned (matching #4203); per-job least
privilege; 150m timeout; leaked-container prune on failure.
Makefile—e2e-nightlytarget (-tags "e2e nightly", 90m timeout, upgrade-toenv knobs).
test/e2e/nodecontainer.go—CopyInto+extractBinariesFromImagehelpers(argv-only, bounded,
t.Cleanup-reaped) for the upgrade binary swap.Validation
containers, real kubeadm): failure surfaced at 8m5s == the budget ceiling
(exit 1); HA reached 2 CP nodes + 2 etcd members.
workflow_dispatch(it stages asecond node image; self-skips locally without it).
nightly.ymlvalid with zero floating action tags; asserted status/action/budget constants
(
wait-for-control-plane,ControlPlaneUnreachable,upgrade-apply, 8m/20m)verified against
internal/*.