Skip to content

ci: consolidate workflows into one CI pipeline with composite actions - #45

Merged
tjjh89017 merged 1 commit into
mainfrom
ci/consolidate-main-workflow
Aug 18, 2026
Merged

ci: consolidate workflows into one CI pipeline with composite actions#45
tjjh89017 merged 1 commit into
mainfrom
ci/consolidate-main-workflow

Conversation

@tjjh89017

@tjjh89017 tjjh89017 commented Aug 18, 2026

Copy link
Copy Markdown
Owner

Merges the four standalone workflows (test.yml, lint.yml, docker.yml, e2e-kubevirt.yml) into a main.yml CI workflow plus a tag-driven release.yml, modeled on stunmesh-go's pipeline, with each job's implementation split into composite actions under .github/actions/.

CI (main.yml)

codegen ─┐
lint    ─┼─▶ e2e-kubevirt ─▶ e2e-required ("E2E") ─▶ docker (push to main only)
test    ─┘
  • The expensive KVM e2e job runs only after codegen/lint/test pass — a broken change never burns a 70-minute KVM runner.
  • e2e-required (check name E2E): stunmesh-style stable gate (if: always() + result assertion). Ruleset requires Codegen, Lint, Test, E2E.
  • docker: gated behind e2e-required (transitively covers codegen/lint/test), runs only on real pushes to main — never on PRs, the weekly schedule, or manual dispatch.
  • Weekly schedule doubles as the DozenOS-latest early-warning canary.

Release (release.yml)

On a v* tag: create-release opens a draft up front (barrier against duplicate drafts), then release-manifests uploads dist/install.yaml (make build-installer) + the packaged Helm chart, and docker pushes the semver-tagged image via the shared action. rc/RC tags are marked prerelease. Tag pushes moved out of CI so branches are CI's and tags are Release's.

Composite actions

Action Contents
codegen make manifests generate + git diff check
lint golangci-lint
test make test via envtest
e2e-kubevirt k3s + KubeVirt + DozenOS guest stack + labeled ginkgo suites; pins passed as inputs
docker QEMU/buildx/ghcr login/metadata/build-push

Also adds .github/dependabot.yml: daily GitHub Actions version scan with a supply-chain cooldown window.

actionlint passes on both workflows.

Follow-up (separate from this PR)

Once this lands, create the branch ruleset requiring Codegen / Lint / Test / E2E — closing out the "promote to required check" step of #38.

Refs #38

Merge the four standalone workflows (test, lint, docker, e2e-kubevirt)
into a single main.yml CI workflow modeled on stunmesh-go's pipeline,
plus a tag-driven release.yml:

- codegen/lint/test run first; the KubeVirt e2e job is gated on all
  three so the expensive KVM runner never starts on a broken change.
- A stunmesh-style e2e-required gate (check name "E2E") wraps the e2e
  stage; the ruleset requires Codegen/Lint/Test/E2E as stable names.
- The image publish job hangs off e2e-required and runs only on real
  pushes to main; v* tags are handled by release.yml, which creates a
  draft release up front, uploads dist/install.yaml and the packaged
  Helm chart, and pushes the semver-tagged image via the shared action.
- A weekly scheduled run doubles as the guest-image early-warning
  canary, since the e2e suite tracks the latest nightly guest release.

Each job's implementation moves into a composite action under
.github/actions/ (codegen, lint, test, e2e-kubevirt, docker); the
workflow itself only carries job topology, gates, and version pins.

Also: bump actions/checkout, setup-go and cache to latest majors; add
.github/dependabot.yml scanning GitHub Actions versions daily with a
supply-chain cooldown; label the Manager scaffold suite (manager-e2e)
and include its five specs in the e2e job's label filter.

Refs #38

Signed-off-by: Date Huang <tjjh89017@hotmail.com>
@tjjh89017
tjjh89017 force-pushed the ci/consolidate-main-workflow branch from 8223d52 to fe7ea79 Compare August 18, 2026 06:40
@tjjh89017
tjjh89017 merged commit 338583a into main Aug 18, 2026
3 checks passed
@tjjh89017
tjjh89017 deleted the ci/consolidate-main-workflow branch August 18, 2026 06:41
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