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.
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.
┌─────────────────────────────────────────┐
│ 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
| 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 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:
- Clones the base chart (
apps-chart) and the app team's values. - Runs
helm-templateagainstapps-chart, injecting the resolved image tag, stage, namespace, and app name. - Commits the rendered manifests to an
env/<app>-<stage>branch. - Triggers an
argocd-updateso 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).
- 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 scopedapp-teamrole 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.