···6363 defines the Flux Kustomization DAG; `flux/*/*.yaml` hold HelmReleases;
6464 `flux/secrets/*.sops.yaml` are first-class Kubernetes Secrets decrypted by
6565 Flux. `charts/<name>/` are in-tree charts with **explicit manifests, no
6666- shared helpers** (see `k8s/charts/README.md`). `values/global.yaml` holds
6767- shared non-secret image pins + constants, mirrored into the Flux
6868- `cute-haus-global` ConfigMap.
6666+ shared helpers** (see `k8s/charts/README.md`).
6767+ `flux/sources/global.values.yaml` holds shared non-secret image pins +
6868+ constants; kustomize generates the `cute-haus-global` ConfigMap from it
6969+ (`configMapGenerator` in `flux/sources/kustomization.yaml`).
6970- `secrets/` — SOPS, multi-recipient age. `.sops.yaml` is generated; never
7071 hand-edit either.
7172- `keys/` — `aly_<host>.pub` (user key) + `root_<host>.pub` (host key) age
···9091- **Every deployed chart must sha256-pin its container images**
9192 (`image: repo:tag@sha256:...` or `image: {repository, tag: ...@sha256:...}`),
9293 enforced by `check-pinned-images.ts`. Shared images (alpine, rclone) live
9393- in `k8s/values/global.yaml`. Renovate keeps digests fresh (skips
9494+ in `k8s/flux/sources/global.values.yaml`. Renovate keeps digests fresh (skips
9495 `tranquil`, which is on private atcr.io — use `just bump-tranquil`).
9596- **forward-auth OIDC slugs** must be `forward-auth-<app>` and match a key in
9697 the plaintext `apps:` map in `k8s/flux/apps/releases.yaml` (enforced by
-19
k8s/flux/sources/global-configmap.yaml
···11-apiVersion: v1
22-kind: ConfigMap
33-metadata:
44- name: cute-haus-global
55- annotations:
66- cute.haus/secret-policy: non-secret-values-only
77-data:
88- values.yaml: |
99- # Shared operational constants and OCI image pins. Secret-like values must
1010- # live in k8s/flux/secrets/*.sops.yaml, not this ConfigMap.
1111- global:
1212- images:
1313- alpine: docker.io/library/alpine:3.24@sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b
1414- rclone: rclone/rclone:1.74@sha256:623378ad0ff3ebd5cebf77720843c0e02edfe46e2d5b5ac6bed54c6371780dfb
1515-1616- failover:
1717- # Fast eviction when a node goes NotReady/Unreachable. Mirrors the
1818- # app-pod toleration so CNPG and stateful workloads fail over quickly.
1919- fastTolerationSeconds: 60
···11-# 📋 values/
22-33-Shared non-secret Helm values.
44-55-```
66-values/
77-└── global.yaml # image pins and operational constants mirrored into Flux
88-```
99-1010-Secret values are first-class SOPS-encrypted Kubernetes Secret manifests under
1111-[`../flux/secrets`](../flux/secrets). Do not put secret-like values here.
1212-1313-The chart's own `values.yaml` (under `charts/<name>/values.yaml`) holds
1414-the in-tree, non-secret defaults. This dir holds only shared non-secret values.
1515-1616-See [`../charts/README.md`](../charts/README.md) for the full secret flow.