Skip to content

Helm chart: run native 3.x (still PHP-only after 3.0.0) #946

Closed

Description

@rmcdaniel

Native 3.0.0 is released as durableworkflow/server:3.0.0 and latest (#325), but the Helm chart (k8s/helm/durable-workflow, chart 0.3.8) still targets PHP.

State

  • values.yaml defaults image.tag to 2.11.8 (appVersion 2.11.8). Only the PHP release flow (scripts/ci/sync-source-release.mjs) generates that default. The native release workflow doesn't touch it, so a default install still gets a working PHP 2.11.8.
  • The templates are PHP-shaped:
    • a server Deployment;
    • a queue-worker Deployment, HPA and PDB;
    • a scheduler CronJob and a migration Job that call server-entrypoint and artisan;
    • Redis wiring.
  • The native image has none of server-entrypoint, artisan, a queue worker or Redis. Native is one process: it creates and checks its schema at startup and runs maintenance (timers, repair, retention) in-process, as docker-compose.published.yml already does since Rust #325: published Compose runs the native server #920.
  • Hazard: setting image.tag=3.0.0 on this chart renders workloads that fail at runtime.

The pre-release list on #325 included "Compose and Helm defaults switched to native". Only Compose was done (#920), so 3.0.0 shipped with this gap.

Needed

  1. Now (small): make the chart refuse a 3.x image (tag or native flag) at template time with a clear message, until native mode exists. This closes the hazard without changing the PHP default.
  2. Native chart mode:
    • a single server Deployment running the native binary;
    • no worker, scheduler or Redis;
    • native readiness and health probes;
    • DB and TLS settings as today;
    • schema upgrades between native versions through the native schema-upgrade command as an explicit pre-upgrade Job, never implicit.
  3. Chart major version and docs: docs/UPGRADING.md covers PHP→native through the takeover runbook (takeover is planned for deprecation in 3.1.x, Rust #325: note takeover's planned deprecation in 3.1.x #930), and fresh native installs. Cloud's cutover settings live on cloud#9.
  4. CI: helm template and lint for both modes, and a kind or k3d smoke test of the native mode against the published 3.0.0 digest.

🤖 Generated with Claude Code

Activity

  1. rmcdaniel commented on Nov 2, 2026

    @rmcdaniel
    MemberAuthor

    Step 1 is done: chart 0.3.9 (#947) refuses native 3.x tags at render time, including latest and 3. It's published and read back (details on #947). Native chart mode, step 2, is still open.

  2. rmcdaniel commented on Nov 3, 2026

    @rmcdaniel
    MemberAuthor

    Native Helm chart mode is delivered: chart 1.0.0 is published (General, 01:38 UTC).

    • PR Helm chart 1.0.0: native 3.x mode by default, PHP selectable #963 merged at 17c52f5f, Security final-cleared at c40a57f6. Server reviewed the native runtime facts.
    • Chart release run 41559952646 succeeded: lint, render and manifest validation; ct lint plus a kind install; immutable OCI publish and verify.
    • oci://ghcr.io/durable-workflow/charts/durable-workflow 1.0.0, digest sha256:6d980357be8361e7abd785c0c5ba4bc2a3a4f128c9fca7ed047d175346c554af, appVersion 3.0.1.
    • Behavior:
      • New installs default to native Server.
      • Upgrades from 0.x PHP releases refuse unless runtime is set explicitly.
      • Native mode:
        • one Deployment, readiness on /api/ready, TCP liveness;
        • 65 s shutdown grace and no service-account token;
        • ephemeral-storage limits;
        • more than 1 replica requires an RWX claim, and SQLite is refused.
      • The schema-upgrade hook is opt-in, renders only on a real upgrade, and needs live proof of a stopped native predecessor.
      • Reserved annotation and label keys are refused.
    • Follow-ups:
      • Bump appVersion to 3.0.2 after native 3.0.2 publishes (Server).
      • Pin the docs stable releases with this chart (docs#423).
      • Native SQLite chart support stays a separate follow-up.
        Closing as delivered.
  3. rmcdaniel commented on Nov 3, 2026

    @rmcdaniel
    MemberAuthor

    Security independently accepts the public Helm 1.0.0 publication. Exact run, source, OCI/package/image digests, anonymous pull, and clean-install evidence are recorded on #963: #963 (comment)

    The acceptance is bounded to chart 1.0.0 / appVersion 3.0.1; a later appVersion bump is a separate release change.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions