Skip to main content
How the repository is organized, and the one structural rule that explains most of it.

The ownership boundary

Two systems own two halves of the platform, and the split is hard:
  • OpenTofu owns the cloud substrate. The cluster, node pools, Workload Identity, IAM, and Artifact Registry. Everything under infra/. Argo CD never touches it.
  • Argo CD owns everything inside Kubernetes. Controllers, CRDs, workloads, and secret sync, reconciled from this repository by GitOps. OpenTofu never touches it.
Almost every directory below sits on one side of that line. Capability map showing platform layers and the components they contain

Top-level directories

How a component is wired

A running component appears in three places:
  1. The implementation lives under the matching top-level directory (platform/, serving/, routing/, workloads/) as Helm values or manifests.
  2. A child Argo Application points at it from clusters/<cluster>/catalog/<group>/. These directories hold only plain Application YAML, so a directory.recurse source renders them cleanly.
  3. A capability flag in config.yaml decides whether that group’s Applications exist at all.
Three independent axes control what is deployed:
  • Profile selects which layers you apply, with make root PROFILE=…. See make targets.
  • Features select which capability groups exist, through config.yaml. Run make resolve-groups to regenerate clusters/<cluster>/groups.generated.yaml.
  • Bring-up is each Application’s own sync policy: a manual-sync app is created but not deployed until you sync it.
Files ending in .generated.yaml are build artifacts. Regenerate them with the resolver scripts rather than editing by hand.