Commit Graph
4 Commits
Author SHA1 Message Date
jklein ac53555e44 paperless-ngx: strict values.schema.json and null-safe hardening
Largest values surface of the programme, and the first chart where the
null-safety covers two workloads.

1. values.schema.json (#68): additionalProperties: false on every
   chart-owned object level, including files.barcodes, ocr (with enums
   for the 3.x modes), scripts, tikaGotenberg, the oidc provider block
   and the SMB CronJob.

2. Null-safety for hardening, probes and resources (#99), for the server
   AND the SMB consume-mover CronJob. It reuses the defaultedDict helper
   the barcodes block already introduced (#61) instead of adding a second
   mechanism - one merge helper, now with more callers.

   The server's pod context is consumed twice: as the pod securityContext
   and by the /run-ownership init container, which chowns /run to
   runAsUser:runAsGroup because s6-overlay refuses to start unless /run is
   owned by the runtime uid. Both reads now go through the same helper, so
   the chown cannot disagree with the context it has to match. Erasing
   that block used to abort rendering with a nil-pointer error; it now
   falls back to the defaults like every other chart.

The CronJob has no probes (documented exception), so only its two
contexts and resources are covered.

files.storage stays deliberately not null-safe: an erased value yields an
invalid PVC, which is the loud class #99 excludes.

Rendering is byte-identical to 11.0.0, both with the CI values (which
include the #61 regression guard) and with the production paperless-jk
bundle values.
2026-08-23 21:59:06 +02:00
jklein 4f489b0854 paperless-ngx: an empty barcodes block falls back to the chart defaults
A "barcodes:" key left without children (e.g. after deleting the last
remaining sub-key, PAPERLESS_CONSUMER_BARCODE_SCANNER, which paperless-ngx
3.0 removed) is YAML null and replaced the whole default sub-tree on merge.
Rendering then failed on the nil pointer, so the release simply stopped
updating.

An empty or null block now means "the chart defaults apply". The merge runs
through a new paperless-ngx.defaultedDict helper: nulls never delete, nested
maps merge recursively, and explicitly set values win - including false and 0,
which "default" and "mergeOverwrite" would swallow. A scalar where the
defaults define a map is rejected with the values path in the message.

Major bump: the meaning of a values override changes.

Fixes #61
2026-08-23 19:31:20 +02:00
jklein 6779e49355 Add per-workload replicas values and a chart-global scaleDown flag
Every Deployment/StatefulSet now takes its replica count from a replicas
value (default 1, explicit 0 allowed) via a new per-chart <chart>.replicas
helper; the helper uses a kindIs "invalid" nil check so an explicit 0 is
not swallowed by Helm's default function. A chart-global scaleDown flag
(default false) takes precedence: it renders every workload with
replicas: 0 and suspends the paperless-ngx consume CronJob, stopping the
app without uninstalling it (PVCs, Secrets, Services and Ingress remain).

Defaults leave the rendered manifests byte-identical to main, so all
published charts get a minor version bump; the template-chart carries the
reference helper implementation and stays unversioned.

Fixes #25
2026-08-22 08:12:40 +02:00
jklein 91a2fbcb05 Compute memory/ephemeral-storage limits from requests, drop default CPU limits
Every chart now renders its container resources through a duplicated
_helpers.tpl helper (reference implementation in template-chart): requests
ship as chart defaults, missing memory and ephemeral-storage limits are
computed as resources.limitFactor x the request (default 3, satisfactory
keeps 2 to preserve its previously published 8Gi limit), an explicitly set
limit always wins, and a CPU limit is only rendered when set explicitly.
Fixed limit defaults are removed from all values.yaml files; teamspeak-server
gains a values-driven resources block instead of hardcoded template values.
Major version bump for all published charts.
2026-08-21 23:34:09 +02:00