Path · Product teams

Own a product

Your product repository says what the product is made of and where it goes. Five CD workflows turn every change into a tested, approved product version and move approved versions on.

State as of 28 October 2026Example: the first product's repository, product-deploy-tfa

What you own

FileWhat it says
product.yamlThe components: the application's service charts, the data-pipeline package, the Databricks bundles
configurations/helm.yamlProduct-wide settings for every landscape: web prefixes, constants, the list of allowed secret names, one key per service chart
configurations/adf.yaml, databricks.yamlProduct-wide settings for the other components
pipeline.config.yamlThe delivery ladder: landscapes in promotion order and their environments. For the first product it lists only dev/app01 today
.github/workflows/cd-*.ymlFive thin workflows, one per process; the logic lives in the shared templates

Each file, line by line: Reference: the product repo and the real files. One-time setup (secrets, approval gates, the GitHub App): Reference: settings both pipelines need.

The five workflows

WorkflowStarts onDoesStatus
CD · Detectevery 30 minutes, or by handDid a build or the product files change since the latest approved version? Then it starts Development.built
CD · Developmenta merge to main, Detect, by hand; pull requests run dryMakes a candidate, deploys it to the first landscape (dev/app01) and approves it automatically when every deploy is healthy.built
CD · Releaseby handGives an approved version a release number such as 1.4.0, behind the QA gate; nothing is rebuilt.built, stops at its first step today (no qa) · deploy to qa planned
CD · Promoteby hand (qa or prod)Writes an approved version into every environment of that landscape in cloud-config, then checks it runs.built, not live
CD · Retentionweekly, or by handLists approved versions past the policy (keep the 20 newest or 60 days, and anything in use).built, not live report only

Why Promote is not live

Only dev/app01 exists today. Promotion to qa and prod is not possible until greenfield IaC creates those environments: CD · Promote and CD · Release stop at their first step.

When qa and prod exist, it also needs the CD GitHub App's two secrets in the product repository, which do not exist yet, and the environment pipeline it hands over to is failing (status). It also does not yet check that a version went through the earlier landscape first, and the approval gates have no reviewers yet.

Steps: ship a version

  1. Merge a change to the product files, or let a service build land. Development starts straight away (product files) or within 30 minutes (Detect).
  2. Watch CD · Development. It composes the candidate, waits for dev/app01 to be healthy, then approves it and creates a GitHub pre-release.
  3. Give it a release number (optional) with CD · Release, behind the QA gate.
  4. Promote it to qa, then prod, with CD · Promote built, not live. Not possible today: there are no qa or prod environments yet.

Onboarding a new service: add its chart to product.yaml, its product-wide settings under its key in configurations/helm.yaml, and its secret names to the list (and the vaults). See Build a service for the service side.

See the product workflows

What can stop you

You seeIt meansFix
The plan step failsA typo or unknown name in pipeline.config.yaml; nothing was publishedFix pipeline.config.yaml (landscape and environment names are cloud-config folders)
Promote or Release stops in the plan step: "no landscape 'qa'" or "no landscape after the candidate stage"The ladder has no qa or prod yet, because those environments do not existNothing to fix today; wait until greenfield IaC creates qa and prod and they are added back
Secret not in the poolA service asks for a name your list does not haveAdd it to global.secrets in configurations/helm.yaml and to each environment's vault
Key outside the allowed listAn environment tried to set a product-only settingMove it to configurations/helm.yaml
Digest mismatch at deployThe chart pulled is not the one the composition recordedDeploy a version made by compose; never re-tag a chart by hand
"run cloud-config's Environments workflow for this environment first"The environment has not been set upAsk the environment owner to apply it (Run environments)
Promote stops at the GitHub App stepThe CD App secrets are missingInstall the App and add its two secrets (settings)

Symptoms and commands: Deep dive: runbook.

Read next