Generate Helm charts (app + secrets) that follow our pattern — with **complete** values.yaml ready to fill #7
Labels
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
webgrip/invoiceninja-application#7
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Ryangr0 on GitHub.
Originally assigned to: @Copilot on GitHub.
Generate Helm charts (app + secrets) that follow our pattern — with complete
values.yamlready to fillGoal
Create two Helm charts that conform to our house style and can be deployed immediately after filling a few required fields:
ops/helm/<stack>-applicationops/secrets/<stack>-application-secrets(installed first)This task must:
values.yamlfor our main chart that lists every configurable value the dependency exposes—pre-filled with upstream defaults where they exist, and clearly marked placeholders (# REQUIRED) where the user must supply a value.ops/) is referenced invalues.yaml; CI/ops pin image tags, while in Helmimage.tag: "latest"is permitted to represent “current org release”.What you will deliver
ops/helm/<stack>-application/Chart.yamlops/helm/<stack>-application/values.yaml(orvalues.yml)ops/secrets/<stack>-application-secrets/Chart.yamlops/secrets/<stack>-application-secrets/values.yaml(orvalues.yml)All files must pass
helm lintand a dry run (helm install --dry-run --debug).How to gather the source of truth (no guessing)
Find the chart on Artifact Hub (e.g., Invoice Ninja:
invoiceninja/invoiceninja). Record the repository URL and a pinned version.Pull the real defaults for that version:
Use
/tmp/upstream-values.yamlas the contract. Every key you override or surface must match the dependency’s schema and nesting. Do not rename keys. Do not invent new ones.Rules for the main chart (
ops/helm/<stack>-application)Chart.yamlapiVersion: v2,type: application.name: <stack>(e.g.,searxng-application,invoiceninja-application).version: start at0.1.0(our chart version).appVersion: set to the application version string you are targeting.dependencies:common-helpersfromoci://ghcr.io/webgrip/common-charts(pinned).redis) only if the app uses them (pinned).values.yaml(must be complete)Top-level standard fields we require:
namespace: <stack>_shared_config.hostname: &hostname <FQDN>and_shared_config.url: &url https://<FQDN>(YAML anchors)A single top-level section named exactly after the dependency’s root key (e.g.,
invoiceninja,searxng,firefly). All overridden/important values must live under this key.Image settings under that key, using our org image:
image.repository: <org-repo>(e.g.,webgrip/<stack>)image.tag: "latest"(Helm values only — CI/ops remain pinned)image.pullPolicy: AlwaysResources: provide sane defaults (
requests/limits), editable by users.Service & ports: copy the exact keys and defaults from upstream (
containerPorts.*,service.port, probe ports).Ingress: our standard ingress block using Traefik + cert-manager; hosts use
*hostnameand TLS secretletsencrypt-<stack>.Persistence: keep the upstream structure and names; set our defaults (e.g.,
storageClass: do-block-storage, sizes).Environment/config: include the upstream’s documented config knobs (names as-is).
Redis block: include only if the upstream chart supports/uses it; otherwise omit or ensure
enabled: false.Very important: include placeholders for anything not auto-filled
For every upstream key that has no default or requires a site-specific value (secrets, credentials, URLs, mail settings, etc.), put a placeholder and a clear comment:
For every secret value, do not put plaintext. Instead, wire it like:
Do not omit any important knobs from the upstream chart simply because we are not changing them. If a value is likely to be changed by operators (env, ports, persistence, replicas, probes, mail, cache/session/queue drivers, etc.), surface it with the upstream default and a brief comment.
Secrets chart (
ops/secrets/<stack>-application-secrets) — install firstChart.yamlversion: 0.1.0.values.yamlnamespace: <stack>valueFrom.secretKeyRef.Image & tagging policy (don’t drift)
values.yamlis the image we build fromops/Dockerfiles.image.tag: "latest"is allowed to represent “current org release”.Structure you must produce (shape only; fill with real keys from upstream)
Clear instructions for the user (to avoid surprises)
Open
ops/helm/<stack>-application/values.yaml.Search for
# REQUIREDand fill in the placeholders (FQDN, secrets, emails, passwords, mailer settings, etc.).If your application needs Redis (or any optional dependency), set
enabled: truein the corresponding section and verify the service/port keys match the upstream chart.Install order:
helm upgrade --install <stack>-secrets ops/secrets/<stack>-application-secrets -n <stack> --create-namespacehelm upgrade --install <stack> ops/helm/<stack>-application -n <stack>Acceptance checklist
values.yamlis complete: all relevant upstream keys are present with defaults or# REQUIREDplaceholders. No invented keys.image.tagis"latest"only in Helm values, and comments clarify that CI/ops use pinned tags.secretKeyRef.helm lintandhelm install --dry-run --debugboth pass.PR notes
Attach:
helm show values …output for the pinned version (as an artifact or gist) to prove key names.# REQUIREDfields the operator must fill before install.