Commit Graph

1 Commits

Author SHA1 Message Date
e3mrah
358c32c032
ci: add cluster bootstrap-kit drift guardrail (slice H2 scope-reduced, #1095) (#1122)
Adds .github/workflows/cluster-template-drift.yaml — a warn-only workflow
that reports drift between each clusters/<sovereign>/bootstrap-kit/ tree
and the canonical clusters/_template/bootstrap-kit/.

Why warn-only, not enforce:
- Every existing Sovereign carries some legitimate drift (per-Sovereign
  image SHAs, region-specific values overlay) — blocking PRs on diff
  count would prevent ALL cluster work.
- The right place to enforce the boundary is Catalyst's organization-
  controller (slice C1 of #1095), not CI. Once C1 ships, every new
  Sovereign bootstrap-kit is generated from _template and the
  attestation lives at apply-time, not at CI-time.
- Retroactively reconciling the existing omantel.omani.works/ and
  otech.omani.works/ trees (which have 20+ differing files plus
  structural changes — extra files on each side) is a high-blast-radius
  maintenance-window operation, NOT a CI scoped slice.

What this workflow does:
- Triggers on push to main + PR + workflow_dispatch when clusters/**
  changes.
- For each clusters/<sovereign>/ directory, runs `diff -rq` against
  clusters/_template/bootstrap-kit/ and writes a Markdown report to
  the run summary AND a sticky PR comment.
- Counts differing files + only-in-template + only-in-Sovereign per
  Sovereign so reviewers can quickly see whether new drift was
  introduced.

Per docs/EPICS-1-6-unified-design.md §3.9 row 2 + §11 row 6 (decision
amended from "reconcile + CI gate" to "warn-only CI gate"; structural
reconcile deferred to slice C1 organization-controller).

Per docs/INVIOLABLE-PRINCIPLES.md #4a — workflow only inspects YAML;
no images built, no cloud calls.

Refs: #1094, #1095, slice C1 (organization-controller).

Co-authored-by: hatiyildiz <hatiyildiz@noreply.openova.io>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 23:09:50 +04:00