fix(deploy): gate test/staging deploys on bootstrap convergence, not just health #186

Merged
haydar merged 1 commit from fix/test-deploy-bootstrap-gate into develop 2026-10-30 19:24:22 +00:00
Member

Test deploy run #609 deployed healthy images yet served the previous
release's Docs theme: the one-shot bootstrap container (restart: "no")
never provably completed its Wiki.js stage, and nothing in the pipeline
distinguished a finished convergence from a dead, skipped, or
still-running one — a healthy app only proves the app started.

  • run.sh: emit a 'DWB bootstrap convergence complete' sentinel as the
    last line; stage failures already exit non-zero (set -eu, explicit
    exit 1, wikijs 3-attempt retry).
  • wikijs image: bake DEVWORKBASE_SOURCE_REVISION (Dockerfile ARG/ENV,
    release.py build-arg); wikijs-bootstrap.sh stamps it into injectHead
    as the dwb-bootstrap-revision meta in the same theme PUT as
    dwb-theme-build and verifies it reaches the served page.
  • verify_docs_theme.py: require --expect-revision for a convergence
    verdict and name the failing stage — converged / bootstrap-missing /
    bootstrap-stale / theme-stored-old / image-old (via --inspect Coolify
    app metadata) / served-truncated / no-fingerprint — with a diagnosis
    block carrying expected vs served fingerprint and revision.
  • compose.prod.yml: document the re-run contract — the per-release
    digest pin is what forces recreate + start of the one-shot on every
    deploy; an exited restart:no container neither retries nor proves
    completion.
  • test-deploy/staging workflows: pass --expect-revision github.sha and
    --inspect, raise --wait to 900s for multi-stage convergence time.
  • scripts/test_deploy_convergence.py: end-to-end run.sh against a
    stubbed docker CLI (sentinel on success, non-zero + no sentinel on
    stage failure) and the diagnose() stage matrix; wired into the
    release-tests CI loop and release.py run_tests.
Test deploy run #609 deployed healthy images yet served the previous release's Docs theme: the one-shot bootstrap container (restart: "no") never provably completed its Wiki.js stage, and nothing in the pipeline distinguished a finished convergence from a dead, skipped, or still-running one — a healthy app only proves the app started. - run.sh: emit a 'DWB bootstrap convergence complete' sentinel as the last line; stage failures already exit non-zero (set -eu, explicit exit 1, wikijs 3-attempt retry). - wikijs image: bake DEVWORKBASE_SOURCE_REVISION (Dockerfile ARG/ENV, release.py build-arg); wikijs-bootstrap.sh stamps it into injectHead as the dwb-bootstrap-revision meta in the same theme PUT as dwb-theme-build and verifies it reaches the served page. - verify_docs_theme.py: require --expect-revision for a convergence verdict and name the failing stage — converged / bootstrap-missing / bootstrap-stale / theme-stored-old / image-old (via --inspect Coolify app metadata) / served-truncated / no-fingerprint — with a diagnosis block carrying expected vs served fingerprint and revision. - compose.prod.yml: document the re-run contract — the per-release digest pin is what forces recreate + start of the one-shot on every deploy; an exited restart:no container neither retries nor proves completion. - test-deploy/staging workflows: pass --expect-revision github.sha and --inspect, raise --wait to 900s for multi-stage convergence time. - scripts/test_deploy_convergence.py: end-to-end run.sh against a stubbed docker CLI (sentinel on success, non-zero + no sentinel on stage failure) and the diagnose() stage matrix; wired into the release-tests CI loop and release.py run_tests.
fix(deploy): gate test/staging deploys on bootstrap convergence, not just health
All checks were successful
ci / commit-trailers (pull_request) Successful in 8s
ci / secret-scan (pull_request) Successful in 11s
ci / release-tests (pull_request) Successful in 1m18s
ci / portal-frontend (pull_request) Successful in 34s
ci / integrations-js (pull_request) Successful in 27s
ci / openproject-spec (pull_request) Successful in 32s
ci / portal-php (pull_request) Successful in 6m17s
ci / openproject-rspec (pull_request) Successful in 4m42s
32789bfe6e
Test deploy run #609 deployed healthy images yet served the previous
release's Docs theme: the one-shot bootstrap container (restart: "no")
never provably completed its Wiki.js stage, and nothing in the pipeline
distinguished a finished convergence from a dead, skipped, or
still-running one — a healthy app only proves the app started.

- run.sh: emit a 'DWB bootstrap convergence complete' sentinel as the
  last line; stage failures already exit non-zero (set -eu, explicit
  exit 1, wikijs 3-attempt retry).
- wikijs image: bake DEVWORKBASE_SOURCE_REVISION (Dockerfile ARG/ENV,
  release.py build-arg); wikijs-bootstrap.sh stamps it into injectHead
  as the dwb-bootstrap-revision meta in the same theme PUT as
  dwb-theme-build and verifies it reaches the served page.
- verify_docs_theme.py: require --expect-revision for a convergence
  verdict and name the failing stage — converged / bootstrap-missing /
  bootstrap-stale / theme-stored-old / image-old (via --inspect Coolify
  app metadata) / served-truncated / no-fingerprint — with a diagnosis
  block carrying expected vs served fingerprint and revision.
- compose.prod.yml: document the re-run contract — the per-release
  digest pin is what forces recreate + start of the one-shot on every
  deploy; an exited restart:no container neither retries nor proves
  completion.
- test-deploy/staging workflows: pass --expect-revision github.sha and
  --inspect, raise --wait to 900s for multi-stage convergence time.
- scripts/test_deploy_convergence.py: end-to-end run.sh against a
  stubbed docker CLI (sentinel on success, non-zero + no sentinel on
  stage failure) and the diagnose() stage matrix; wired into the
  release-tests CI loop and release.py run_tests.
haydar scheduled this pull request to auto merge when all checks succeed 2026-10-30 19:19:19 +00:00
haydar merged commit 6da0c377e2 into develop 2026-10-30 19:24:22 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
developing4all/devworkbase!186
No description provided.