Skip to content

ci: data-driven render+schema validation (kill the flimsy bash) - #18

Merged
syscod3 merged 1 commit into
mainfrom
feat/robust-validation
Jul 21, 2026
Merged

syscod3 merged 1 commit into
mainfrom
feat/robust-validation

Conversation

@syscod3

@syscod3 syscod3 commented Jul 21, 2026

Copy link
Copy Markdown
Contributor

Why

CI logic lived in the workflow YAML — a hand-rolled find for kubeconform and
per-chart helm lint steps with inline Python. Structure-coupled and fragile: a
layout change breaks it, and it isn't runnable locally. It was also already red
on main (the find swept a Talos inline-manifests.yaml, which has no kind).

What

  • scripts/validate.py — committed, locally-runnable (python3 scripts/validate.py),
    data-driven. It discovers Argo Applications from the manifests themselves,
    renders each chart with its layered valueFiles (helm template), and
    schema-checks the rendered output (kubeconform) plus every other manifest
    that carries a kind. Semantic filter (has-kind vs not) replaces the fragile
    path exclusions — Helm values, Talos patches, and coord files are skipped
    because they aren't Kubernetes manifests, not because a path was listed.
  • ci.yml — the kubeconform + helm-lint jobs collapse into one validate
    job that just calls the script. Single source of truth, same locally and in CI.
  • infrastructure/cilium/values.yaml — tunnel: vxlan was removed in Cilium
    1.15 (chart is pinned 1.17.1); split into routingMode: tunnel +
    tunnelProtocol: vxlan. helm lint never caught this; the render check does —
    Argo CD would have failed to sync it.

Verified

helm template + kubeconform -strict run clean locally across all five
Applications (cilium, cert-manager, harbor, arc-controller, tailscale-operator)
and the schema-check batch: 0 invalid, 0 errors.

Replace the hand-rolled kubeconform find + per-chart helm-lint bash with a
committed, locally-runnable script. It discovers Applications from the manifests
themselves, renders each chart with its layered valueFiles (helm template), and
schema-checks the rendered output plus every other manifest carrying a kind.
Semantic filter (has-kind vs not) replaces fragile path exclusions.

Also fix cilium values: tunnel: vxlan was removed in Cilium 1.15 -> routingMode
+ tunnelProtocol (surfaced by the new render check; main CI was already red).
@syscod3
syscod3 merged commit 327d18c into main Jul 21, 2026
5 checks passed
@syscod3
syscod3 deleted the feat/robust-validation branch July 21, 2026 23:13
syscod3 added a commit that referenced this pull request Aug 8, 2026
Replace the hand-rolled kubeconform find + per-chart helm-lint bash with a
committed, locally-runnable script. It discovers Applications from the manifests
themselves, renders each chart with its layered valueFiles (helm template), and
schema-checks the rendered output plus every other manifest carrying a kind.
Semantic filter (has-kind vs not) replaces fragile path exclusions.

Also fix cilium values: tunnel: vxlan was removed in Cilium 1.15 -> routingMode
+ tunnelProtocol (surfaced by the new render check; main CI was already red).
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