Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 

README.md

Templated Teams — Golden Path for App Teams

This directory is the platform team's "golden path": a set of Helm charts and ApplicationSets that let a new app team stand up a fully-wired Argo CD + Kargo pipeline (dev → staging → prod, with rollouts, RBAC, and optional S3/Slack integrations) by dropping in a single values file.

App teams don't write Argo CD Applications, Kargo Stages, or Kubernetes manifests. They provide one platform/app-values.yaml, and everything else is templated and rendered by the platform charts here.

How an App Team Onboards

There are two supported entry points. Both only require a platform/app-values.yaml file — see kargo-chart/values.yaml and apps-chart/values.yaml for the available fields.

1. Monorepo folder (driven by appset.yaml)

Add a directory under sedemo-monorepo/templated/<app-name>/ containing platform/app-values.yaml. The templated-team-projects ApplicationSet uses a git directory generator over templated/* and picks it up automatically.

2. Standalone repo (driven by appset-repos.yaml)

Create a repo named sedemo-app-<name> with platform/app-values.yaml at its root. The templated-repo-projects ApplicationSet uses an SCM provider generator that matches any akuity/sedemo-app-* repo containing that file.

In both cases the application.name (and, for the monorepo path, the directory name) becomes the Kargo project name, the Argo CD app name, and the namespace prefix.

Architecture

                        ┌─────────────────────────────────────────┐
                        │  sedemo-platform/templated-teams (HERE)  │
                        │  platform-team-owned charts + appsets    │
                        └─────────────────────────────────────────┘
                                          │
   app team provides app-values.yaml      │  templates
   ─────────────────────────────────►     ▼
  (monorepo folder OR sedemo-app-* repo)

  appset.yaml / appset-repos.yaml   ──►  project-templates/   ──►  Argo CD AppProject
   (ApplicationSet, discovers app)         (Helm chart)             + Argo Applications (per env)
                                                │                   + Kargo Application
                                                ▼
                                          kargo-chart/        ──►  Kargo Project, Warehouses,
                                           (Helm chart)             Stages, RBAC, Notifications
                                                │
                                                ▼  (promotion runs helm-template)
                                          apps-chart/         ──►  Rollout, Service, Ingress,
                                           (base app chart)         loadgen, AnalysisTemplate
                                                │
                                                ▼  rendered manifests committed to
                                          env/<app>-<stage> branches ──► synced by Argo CD

Directory Contents

Path What it is
appset.yaml templated-team-projects ApplicationSet — git directory generator over sedemo-monorepo/templated/*. Onboards apps that live as a folder in the monorepo.
appset-repos.yaml templated-repo-projects ApplicationSet — SCM provider generator matching akuity/sedemo-app-* repos. Onboards apps that live in their own repo.
project-templates/ Helm chart that renders the per-app control-plane objects: the Argo CD AppProject, the per-environment Argo CD Applications, and a Kargo Application (which in turn deploys kargo-chart).
kargo-chart/ Helm chart that renders a full Kargo project: Project/ProjectConfig, image + chart Warehouses, dev/staging/prod Stages, RBAC roles, notifications, and analysis templates. See its own README.
apps-chart/ The base application chart Kargo renders during each promotion — the actual workload (Argo Rollout, Service, Ingress, load generator, AnalysisTemplate) plus optional Terraform for S3.

The Promotion Pipeline

The Kargo stages generated by kargo-chart form this pipeline (see kargo-chart/templates/kargo/stages.yaml):

app-warehouse (image) + chart-warehouse (git)
  → dev      auto-promoted; optional S3 provisioning via tf-apply
  → staging  optional (environments.staging)
  → prod     always opens a PR and blocks on approval before syncing

Each promotion step:

  1. Clones the base chart (apps-chart) and the app team's values.
  2. Runs helm-template against apps-chart, injecting the resolved image tag, stage, namespace, and app name.
  3. Commits the rendered manifests to an env/<app>-<stage> branch.
  4. Triggers an argocd-update so Argo CD syncs the new manifests.

dev auto-promotes as new freight arrives. prod always uses git-open-pr + git-wait-for-pr, so nothing reaches production without a merged pull request (and an optional Slack notification when the PR opens).

Ownership Boundary

  • Platform team owns everything in this directory — the charts, the ApplicationSets, the shape of the pipeline, and the RBAC model.
  • App teams own only their platform/app-values.yaml (image, ingress prefix, which environments to enable, whether S3/Slack are on). They get a scoped app-team role on their own Argo CD project and Kargo project.

Changing the base charts here changes the golden path for every templated team on the next sync, so treat edits as platform-wide changes.