Skip to content

feat(web): add a helm chart for the sandbox dashboard - #301

Merged
tiana-code merged 1 commit into
mainfrom
feat/E-08-web-helm-chart
Jun 19, 2026
Merged

feat(web): add a helm chart for the sandbox dashboard#301
tiana-code merged 1 commit into
mainfrom
feat/E-08-web-helm-chart

Conversation

@tiana-code

Copy link
Copy Markdown
Owner

E-08 Sandbox UI #296 (F-08.10b) - Helm chart for the static nginx web container (deferred from #290). The last E-08 slice.

What

  • deploy/helm/web/ mirrors the ledger chart, trimmed for a static SPA: no configmap/secret/servicemonitor (no env/metrics).
  • Pod hardening: runAsNonRoot + uid/gid 101 (nginx-unprivileged) + seccomp RuntimeDefault; readOnlyRootFilesystem + drop ALL caps + no privilege escalation; emptyDir mounts for /tmp + /var/cache/nginx (the paths nginx-unprivileged writes under a read-only root - the CrashLoop-avoidance designed in, since lint/template cannot catch it).
  • containerPort 8080, liveness+readiness httpGet "/", ClusterIP service, HPA (autoscaling/v2, replicas omitted), image ghcr.io/tiana-code/fincore-web defaulting to the chart appVersion.
  • helm-test.yml: web added to the [ledger, payments] matrix (helm lint + helm template | kubeconform); the ServiceMonitor-render step is guarded if: matrix.chart != 'web' since a static SPA has no ServiceMonitor.

Gate chain

  • critic: GO - all web.* helpers defined, no leftover configMapRef/secretKeyRef, kubeconform-valid k8s 1.31 schemas, SM guard correct, emptyDir mounts cover the nginx-unprivileged writable paths.
  • security-auditor (opus): PASS - pod hardening complete, no secrets, no deploy/push in CI, image pinned (no :latest), ClusterIP, no workflow injection, clean-room clean.
  • code-reviewer: APPROVED, no must-fix.
  • evaluator: PASS (0.91).
    Note: helm is not installed locally; the CI helm-test job (lint + template + kubeconform) is the validation gate. Chart.yaml/values.yaml/workflow validated as YAML; templates mirror the merged ledger go-template structure.

Closes #296

Package the static nginx dashboard as a Helm chart, mirroring the ledger
chart but trimmed for a static SPA: no config, secret or service monitor.
The pod runs non-root as the nginx-unprivileged uid with a read-only root
filesystem, dropped capabilities and the default seccomp profile, with
emptyDir mounts for the paths nginx needs to write under that lockdown.
Liveness and readiness probe the served index, the service is a
ClusterIP on 8080, and the image defaults to the chart version. The web
chart joins the ledger and payments charts in the helm lint plus
kubeconform CI matrix, with the service-monitor render step skipped since
a static SPA exposes no metrics.

Closes #296
@tiana-code tiana-code added this to the v0.4.0 milestone Jun 19, 2026
@tiana-code
tiana-code merged commit 28cdda6 into main Jun 19, 2026
11 checks passed
@tiana-code
tiana-code deleted the feat/E-08-web-helm-chart branch June 19, 2026 17:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sandbox UI: Helm chart for the web dashboard (deploy/helm/web)

1 participant