Everything-is-an-app: pilot cert-manager end-to-end (app-of-apps + settings + values)
Nobody has claimed this yet.
- Dominant language
- Go Template
- Stars
- 2.3k
- Forks
- 186
- Avg merge
- 3d 11h
- Merged PRs (30d)
- 66
Description
Parent
linode/apl-core#3515
Design update (supersedes original §3/§8): enable flags live in
AplCluster.spec.apps(env/settings/cluster.yaml), not a dedicatedenv/settings/apps.yaml. See linode/apl-core#3515 comment and ADRadr/2026-08-21-app-enable-flags-in-aplcluster.md.
What to build
The foundational tracer bullet for the "everything is an app" model: drive one always-installed pilot app (cert-manager) end-to-end through the new git-driven pipeline while every other core app stays on the legacy path.
End-to-end behavior:
- The pilot app's
enabledflag is read fromAplCluster.spec.apps.<name>inenv/settings/cluster.yaml— reusing the existingAplClusterfile-map entry, no new file/kind.derived.gotmploverlays.Values.cluster.appsonto.Values.appsand then unsets.Values.cluster.apps, so existinginstalled:helmfile expressions for the pilot (.Values.apps.<name>.enabled) keep working byte-for-byte unchanged, andbin/compare.shstays a zero-delta oracle. - The pilot app's chart values live at
env/values/<namespace>/<release>/values.custom.yaml(user-editable, vendor-shaped) andenv/values/<namespace>/<release>/values.managed.yaml(operator-rendered cross-cutting/derived values). These are plain vendor YAML, outside the platform.Valuesmerge. - The operator writes both value files, then writes an ArgoCD
ApplicationCR as a file toenv/manifests/namespaces/argocd/applications/<namespace>-<release>.yaml, committing files before the CR references them. The CR uses ArgoCD multi-source form: chart source + arefsource to the values repo withhelm.valueFiles: [values.managed.yaml, values.custom.yaml](custom wins on overlap). - A single bootstrap root app-of-apps
Applicationis server-side-applied during initial install and reconcilesenv/manifests/namespaces/argocd/applications/recursively. After bootstrap, the pilot is fully git-driven. - The
Applicationname/filename keep today's<namespace>-<release>convention (getAppName) so the pilot upgrades in place rather than being replaced.
The CR-shape + write-then-create ordering must be produced by a dependency-injectable function (extending today's getArgocdCoreAppManifest / createArgocdAppManifest), following the existing deps = {...} pattern used by addGitOpsApps and the pure-function assertion style of getArgocdGitopsManifest.
Acceptance criteria
- The pilot's
enabledflag lives atAplCluster.spec.apps.<name>inenv/settings/cluster.yamland is projected onto.Values.apps.<name>.enabledviaderived.gotmpl(overlay-then-unset); legacyinstalled:expressions still resolve for the pilot. - Enabling the pilot writes
values.managed.yaml+ a startervalues.custom.yamland commits them before theApplicationCR file is created (ordering asserted in a unit test via injected deps, no real git/K8s). - The generated
ApplicationCR is multi-source withvalueFileslisting managed then custom, named<namespace>-<release>. - A bootstrap root app-of-apps is applied during install and syncs
env/manifests/namespaces/argocd/applications/recursively. - The pilot app reconciles to Healthy in ArgoCD sourced entirely from the values repo; all other apps remain on the legacy path and are unaffected.
- Unit tests cover the reconcile function's CR shape, valueFiles order, ordering, and that it reads
AplCluster.spec.apps.<name>.enabled(fromenv/settings/cluster.yaml) to decide whether to act.
Blocked by
None - can start immediately.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with env/settings/cluster.yaml, derived.gotmpl, and the existing getArgocdCoreAppManifest/createArgocdAppManifest flow. Read addGitOpsApps and getArgocdGitopsManifest for dependency injection and pure-function test patterns. Done means the pilot's CR shape, valueFiles order, write-before-create ordering, enable flag, and bootstrap app-of-apps behavior are covered by tests.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- git, kubernetes
- Domain
- ci-cd, devops, infrastructure
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 28/100