feat: add fleet e2e orchestrator and rename test workflows#208
Merged
Conversation
Add fleet-e2e.yaml, a maintainer CI harness that fans out to the eight cascade-example repos on live GitHub as the release-candidate gate. It triggers on workflow_run completion of the Integration workflow (native e2e dependency) plus manual workflow_dispatch, guards on a green rc-tag push, and sequences primary -> dependents -> independents with an aggregate fan-in gate. Factor the cross-repo dispatch-recover-watch logic into a dispatch-suite composite action, matching the setup-cli pattern. Rename Validate to Tests & Lint and add push:tags + workflow_dispatch so it has standalone runs to badge while keeping workflow_call for pr.yaml. Rename E2E to Integration (act + gitea) and drop the schedule cron. Add a third README badge row grouping the three test workflows. Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
80b6cbd to
5978aa9
Compare
Gate the aggregate job on resolve succeeding so merge_group and non-rc tag completions skip the verdict instead of failing it. Make the head_sha rc-tag fallback deterministic with a version sort. Signed-off-by: Joshua Temple <joshua.temple@stablekernel.com>
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
Adds a maintainer CI harness,
fleet-e2e.yaml("Fleet E2E (live GitHub)"),that revalidates the eight downstream
cascade-example-*repos on real GitHubas the release-candidate gate. Each suite runs in its own repo context (own
token, own
main, own manifest); a green Fleet run means this cascade versionvalidated across the fleet.
How the E2E gate works
workflow_runcompletion of "Integration (act + gitea)" plusmanual
workflow_dispatch. Theworkflow_runpath makes the Integrationdependency native: Fleet only fans out after Integration is green, no runner
held open polling.
run that was a
pushof an rc tag (startsWith(head_branch, 'v')andcontains(head_branch, '-rc.')). This filters outmerge_groupand non-rccompletions.
primary->dependents(artifact-a, artifact-b,needs: primary)->
independents(4env, 3env, 2env, single-env, release-only, parallel). Anaggregatejob is the rc fleet gate: it renders a verdict only when the fleetactually fanned out (
needs.resolve.result == 'success'), so filtered-outcompletions skip it as a clean no-op instead of failing it. When the fleet
does fan out, the job fails if any stage failed and emits a per-repo pass/fail
table to the step summary.
dispatch-suitecompositeaction (matches the
setup-clipattern): dispatch viagh workflow run,recover the run id by listing the target's runs created at/after a captured
timestamp, then
gh run watch --exit-status. Auth isCASCADE_STATE_TOKEN(GITHUB_TOKEN cannot dispatch cross-repo). Least-privilege
permissions:per job.Renames + badges + cron
validate.yaml: rename to "Tests & Lint"; addpush: tags+workflow_dispatch(keeps
workflow_callforpr.yaml). Gives it standalone runs so its badgerenders.
e2e.yaml: rename to "Integration (act + gitea)"; remove theschedulecron(keeps
push: tags,merge_group,workflow_dispatch). Fleet'sworkflow_runreferences this name.
Caveats (honest)
passed to the suites INERT: the suites do not yet accept a
cascade_versioninput, so the orchestrator dispatches them WITHOUT it (an extra input would
error). Passing it through follows once the suites accept the input.
there is no live run yet. This PR is build + lint only.
latest fleet conclusion for the tag before promoting.
head_branchrc-tag guard is the primary path; the version-compute stepalso resolves the rc tag from
head_shaas a documented fallback ifhead_branchis ever empty for a tag-triggered source run, selecting thehighest rc by version sort for deterministic resolution.
Verification
actionlint(1.7.12) clean on all new/changed workflows; every third-partyaction SHA-pinned (matches existing repo style); composite action bash is
shellcheck-clean.
go build ./...green.go test ./...green except the pre-existing,environment-dependent
TestNormalizeWorkflowPath_ActionlintCleanfailure(fails identically on clean
main; unrelated to this YAML-only change).