This guide walks through adding a new platform component to the stack.
Create a new directory under components/:
components/my-component/
├── Chart.yaml
└── values/
├── base.yaml
├── dev.yaml
├── staging.yaml
└── prod.yaml
Declare the upstream Helm chart as a dependency:
apiVersion: v2
name: my-component
description: My new component
version: 0.1.0
type: application
dependencies:
- name: upstream-chart-name
version: "1.2.3"
repository: https://charts.example.comCreate values/base.yaml with shared configuration:
upstream-chart-name:
someKey: someValue!!! note
Values must be nested under the dependency name (e.g., upstream-chart-name:). This is how Helm routes values to subchart dependencies.
Create environment-specific overrides in values/dev.yaml, values/staging.yaml, and values/prod.yaml:
upstream-chart-name:
replicas: 1
resources:
requests:
cpu: 10m
memory: 32MiAdd an entry to the components map in apps/values.yaml:
components:
# ... existing components ...
my-component:
enabled: true
namespace: my-namespace
syncWave: "3"Choose the sync wave based on dependencies:
| Wave | When to use |
|---|---|
| 0 | Core infrastructure (ArgoCD) |
| 1 | Secrets infrastructure (Vault, External Secrets) |
| 2 | CRDs, credentials, utilities |
| 3 | Application-level components |
| Property | Default | Description |
|---|---|---|
hasValues |
true |
Set to false if the component has no values/base.yaml or environment values |
createNamespace |
true |
Set to false to skip CreateNamespace=true syncOption |
syncOptions |
[] |
Extra syncOptions (e.g., ServerSideApply=true) |
ignoreDifferences |
[] |
ArgoCD ignoreDifferences rules |
That's it — the dynamic template in apps/templates/application.yaml will automatically generate the ArgoCD Application resource for the new component. No template file needs to be created.
Before pushing, verify the Application template renders correctly:
helm template apps/ -f apps/values/dev.yamlCheck that:
- The Application CR is generated with correct metadata
- The sync wave is set appropriately
- The values file paths are correct
- The namespace matches your component's expectation
Commit and push. ArgoCD will detect the new Application in the App of Apps and deploy it.
git add components/my-component/ apps/values.yaml
git commit -m "feat: add my-component"
git pushTo disable a component for a specific environment, override its enabled flag in the environment values file:
# apps/values/dev.yaml
environment: dev
components:
my-component:
enabled: falseHelm deep-merges environment values with the defaults, so only the overridden property changes.