# The app-of-apps. This is the ONE manifest in this entire repo that you # apply by hand, one time, with `kubectl apply -f`. It's the seed: after # this exists, Argo CD takes over and everything else in the apps/ folder # gets applied automatically, because this Application's job is to watch # that folder. # # This deployment uses the public repository at tea.ahmza.com. Every child # Application needs its own matching repoURL; they do not inherit this one. # # >> Ask Claude: "why does the app-of-apps live in argocd/app-of-apps # instead of inside apps/ with everything else?" before moving on — the # answer (avoiding a directory managing itself) is worth understanding. apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: app-of-apps namespace: argocd spec: project: default source: repoURL: https://tea.ahmza.com/ahmza.com/vps-k8s.git targetRevision: main path: apps directory: # recurse: false is deliberate. apps/ contains both Application # manifests (apps/demo.yaml) AND subfolders full of the actual # workload manifests they point to (apps/demo/*.yaml). Without this, # Argo CD would try to apply everything inside apps/demo/ directly # under the app-of-apps too — duplicating work the demo Application # already does, and blurring which Application actually owns what. # recurse: false means "only look at files directly in apps/, ignore # subfolders" — so the app-of-apps only ever sees the Application # manifests, never the workloads themselves. recurse: false # This single Hetzner node has neither a LAN MetalLB pool nor the # dedicated disks/extensions expected by Longhorn. Explicitly opt in # to demo only; extend this filter when adding another Application. include: demo.yaml destination: server: https://kubernetes.default.svc namespace: argocd syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true