v0.7.0 — Health probes + Docker hardening
First release on the 0.7.x line. Bundles three PRs that landed today: #56 (chart guard CI tests), #57 (Dockerfile hardening + chart image.digest), and #60 (health probe split, addressing #46). Backward-compatible — /healthz stays alive as an alias of /readyz through the 0.7.x cycle; removal slated for 0.8.0.
Added
- CI: negative tests for chart fail-loud guards (#48 / #56) — the
validatejob now runshelm templatewith six deliberately broken value sets and asserts each guard fires (non-zero exit + expected error substring). Includes theauth-validation.yamlguard from #58 (GHSA-8jr5-6gvj-rfpf). chart/values.yamldocumentation comment block listing all six guards, their source template, and the CI-matched error substring.- Dockerfile:
HEALTHCHECKdirective (#57) — plain Docker / Compose / Swarm deployments now get built-in liveness viawget /livez. - Helm chart:
image.digestsupport (#57) —values.yaml+ schema + deployment template accept an optionalimage.digestfield that takes precedence overimage.tagwhen set. /livezendpoint (#46 / #60) — always returns200 {"status":"ok"}regardless of session count. Intended for KuberneteslivenessProbe./readyzendpoint (#46 / #60) — returns 503 when session count exceedsHEALTHZ_MAX_SESSIONS. Intended for KubernetesreadinessProbe.
Changed
- Dockerfile: digest-pin base image (#57) — both
FROM node:24-alpinestages now use@sha256:…digest pinning. Dependabotdockerecosystem keeps the pin current automatically. - Dockerfile:
COPY --chown=node:node(#57) — replaces theRUN chown -Rlayer with native BuildKit ownership.USER nodeis set beforenpm cisonode_modules/are owned bynode:nodeby construction. - Dockerfile:
HEALTHCHECK --start-periodbumped to 10s (#57) — accommodates cold-start on constrained pods (resources.requests.cpu: 50m). - Helm chart probe defaults (#60) —
probes.liveness.pathnow defaults to/livez,probes.readiness.pathto/readyz.
Deprecated
/healthz(#60) — retained as alias of/readyzfor backward compatibility. Will be removed in 0.8.0. Note: the alias inherits the new>=threshold semantic from/readyz(was>in 0.6.0). An operator at exactlyHEALTHZ_MAX_SESSIONSsessions now sees 503 where 0.6.0 returned 200.
Migration
/healthzconsumers: keep working; switch to/readyz(or/livezfor liveness specifically) before 0.8.0. Helm chart users get the migration automatically via the new probe defaults.- Existing Docker deployments: no change —
USE_SSE=trueis still the image default. - Threat-model context: see Discussion #59 for the auth × bind matrix and the substring-anchoring discipline that this release's CI tests follow.
Credits
@ecthelion77 — three substantial PRs in one day, every numbered review item delivered exactly, every nit voluntarily taken.