refactor(gitops): regroup services under services/<bucket>/<name>/ - #21
Merged
Conversation
…et>/<name>/
Replace the apps/ + platform/ + clusters/<env>/ split (which scattered a
single service's files across three top-level dirs) with one services/
tree, grouping every piece of a service (vendor chart, in-house charts,
ArgoCD Applications) together per environment.
- services/platform/<name>/ and services/products/demo/ hold the moved
charts (init/config/chart subfolders), unchanged internally.
- charts/sso-guard/ is the shared library chart consumed by demo.
- Each service's services/.../applications/<env>/ folder now
self-describes its own ArgoCD Applications:
- *.vendor.yaml: hand-written Application manifests loading external
Helm charts, discovered by a directory-recurse Application
(services-vendor-<env>) — same trick platform/ used, just widened.
- *.app.yaml: small params consumed by an ApplicationSet
(services-app-<env>) for Applications loading our own charts, so
gitops_revision keeps propagating without a hand-maintained
clusters/<env>/templates/<name>.yaml per Application.
- clusters/local/ and platform/local/ removed (fully superseded by the
above for the local cluster). scaleway migration follows in a
subsequent commit.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
Without goTemplate: true, ApplicationSet defaults to the legacy
fasttemplate engine (`{{name}}`, no dot) instead of Go templates
(`{{.name}}`). Confirmed live: every generated Application ended up
literally named "{{.name}}", colliding into a single duplicate-name
error and producing zero Applications from *.app.yaml.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
… local The local cluster's openbao Application never had this block (only scaleway did), leaving it permanently OutOfSync on the agent-injector's MutatingWebhookConfiguration caBundle, which ArgoCD can never match since it's injected at runtime by the chart's own cert generation. Confirmed live on a fresh local cluster. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
…ucket>/<name>/ Same reorg as the local cluster (previous commits), applied to scaleway: 9 vendor charts moved into services/platform/<name>/applications/scaleway/ *.vendor.yaml, and 11 in-house Applications (openbao-init/config, cert-manager-webhook-init, gateway-config, dex-init, external-dns-init, velero-init, grafana-config, argocd-config, secrets-sync, demo) now described by small *.app.yaml params consumed by the services-app-scaleway ApplicationSet. bootstrap/templates/scaleway.yaml creates services-vendor-scaleway (directory-recurse Application) and services-app-scaleway (ApplicationSet) directly, replacing clusters/scaleway/. clusters/, platform/, and apps/ are now fully removed — everything lives under services/. Sync-wave ordering (-1 -> 0 -> 1 -> 2 -> 3 -> 4 -> 5) preserved exactly as documented in the original per-file comments. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
…es/ layout Rewrite the architecture docs to describe the new services/<bucket>/<name>/ structure and the two discovery mechanisms (directory-recurse for vendor charts, ApplicationSet for in-house charts), replacing the old apps/ + platform/ + clusters/<env>/ description. Also fix .github/workflows/ci.yml, which still referenced the removed apps/openbao-init and clusters/<env>/ paths — would have failed on the next PR against this branch otherwise. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
Missed by the earlier scaleway rename pass: sso-guard's comment pointing at the old platform/scaleway/dex.yml, and the cert-manager webhook Application's comment pointing at the old apps/cert-manager-webhook-init. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
… TODO Drop .specify/ (speckit tooling, no longer used) and specs/001-replace-infisical-oss-secrets/ (the OpenBao-replaces-Infisical feature is fully implemented and deployed). Also remove TODO.md, whose remaining items were already stale. Also drop CLAUDE.md's SPECKIT-managed "Active Feature" block, which pointed at the now-removed specs/ files. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
Its only purpose was guarding the Infisical->OpenBao migration window; that migration is complete and its specs are gone. No Infisical references remain anywhere in the repo (confirmed via git grep -rli). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
…init/velero-init at values.yaml These four charts only ever had a single values.yaml (no values-scaleway.yaml override existed pre-reorg — their original clusters/scaleway/templates/*.yaml had no helm.valueFiles block at all). I incorrectly set valueFile: values-scaleway.yaml on all *.app.yaml uniformly without checking each chart's actual files. Confirmed live: ArgoCD failed with "no such file or directory" for the nonexistent values-scaleway.yaml on all four. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
…-eligible backup Confirmed live: cert-restore only accepts backups labeled velero.io/schedule-name=velero-cert-secrets. Plain `velero backup create` (no --from-schedule) doesn't get that label and silently never unblocks the restore hook -- already caused confusion once (pre-existing manual-test and velero-bucket-test backups from earlier sessions weren't eligible). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
apps/+platform/+clusters/<env>/split withservices/platform/<name>/andservices/products/<name>/— every piece of a service (vendor chart, in-house charts, ArgoCD Applications) now lives in one directory, for both clusters.bootstrap/templates/<env>.yaml(no more intermediateclusters/<env>/chart):services-vendor-<env>— a directory-recurse Application applying hand-written*.vendor.yamlmanifests for external Helm charts as-is.services-app-<env>— an ApplicationSet (goTemplate: true, gitfilesgenerator) expanding small*.app.yamlparams into Applications for our own charts, keepinggitops_revisionpropagation working without a hand-maintained per-Application file.charts/sso-guard/holds the shared library chart (moved out ofapps/)..specify/speckit scaffolding, the completedspecs/001-replace-infisical-oss-secrets/feature docs, the staleTODO.md, and the now-obsoleteinfisical-absentCI job.CLAUDE.md/README.mdfor the new layout and fixes CI (helm lint/helm templatepaths that referenced the removedapps//clusters/dirs).Validated
mise run reset && mise run devsmoke test on the local cluster: all Applications Synced/Healthy.f91dc88anddfb03e9; also required the operator to reseed one OpenBao secret unrelated to this refactor).Test plan
helm lint/helm templateon every moved chart andbootstrap/for both envsmise run reset && mise run dev,kubectl get applications -n argocdall Synced/Healthy🤖 Generated with Claude Code
https://claude.ai/code/session_01CCgyeSfKWH6m5mmJEg6t43