Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Fix Publish Docker Images: status-page and dashboard builds fail at corepack enable (pnpm 12.3.4) - #2698

Open
polylane[bot] wants to merge 1 commit into
mainfrom
polylane/autofix/iabfkhpvte9g
Open

Fix Publish Docker Images: status-page and dashboard builds fail at corepack enable (pnpm 12.3.4)#2698
polylane[bot] wants to merge 1 commit into
mainfrom
polylane/autofix/iabfkhpvte9g

Conversation

@polylane

@polylane polylane Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Fixes: Publish Docker Images: status-page and dashboard builds fail at corepack enable (pnpm 12.3.4)

The "Publish Docker Images" workflow on main fails for two of seven images — dashboard and status-page — at the corepack enable step with Error: Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs'. The other five images build fine. As a result, the ghcr.io/openstatushq/openstatus-dashboard and -status-page images stop publishing, so self-hosted deployments pulling those images get stale code. Merging regenerates those two images against the same base image the four passing images already use.

What caused this

Affected: GitHub repository openstatusHQ/openstatus · severity low

What changed

  • apps/dashboard/Dockerfile, apps/dashboard/dofigen.lock, apps/dashboard/.dockerignore: regenerated with Dofigen 2.8.0; base image node:24-slim digest bumped 0afb7822…2fe369e9…, io.dofigen.version label 2.7.02.8.0.
  • apps/status-page/Dockerfile, apps/status-page/dofigen.lock, apps/status-page/.dockerignore: same regeneration.
  • No source files, TS, or Deno code touched; env blocks in the generated Dockerfiles are the same keys, reordered by the generator.

Why it's safe

  • The change is pure generator output: dofigen gen re-run after regeneration produced no further diff, so the committed files are exactly what Dofigen 2.8.0 emits for the existing dofigen.yml sources — no hand edits that could drift from the generator.
  • The new base digest 2fe369e9… is the identical digest the server, workflows, and db-migrate images already built and pushed successfully on the same pnpm install --frozen-lockfile + pnpm turbo run build path in run 🧑‍✈️ doing 🧑‍✈️ things #454, so the corepack/pnpm behavior is proven by that passing set, not assumed.
  • No application source, build logic, runtime entrypoint, or env values changed: the env blocks contain the same keys as before, only reordered by the generator, and the runtime stages keep the same non-root user and entrypoint.
  • Scope is confined to the two failing images; the five passing images are untouched.

Validation

  • dofigen update && dofigen gen (Dofigen v2.8.0, checksum-verified) on apps/dashboard and apps/status-page: regenerated both; digest 0afb7822…2fe369e9…, version 2.7.02.8.0.
  • Re-ran dofigen gen on both apps: no additional diff (deterministic output).
  • rg '0afb7822' across the repo: zero remaining references to the stale digest.
  • pnpm verify: 37/39 tasks pass; the 2 failures (@openstatus/upstash#check, @openstatus/notification-pagerduty#check) are deno missing in the sandbox (exit 127, both run deno check), pre-existing and unrelated to this generated-file-only diff.
  • not run: full docker build — Docker is not available in the sandbox; the build path is validated by the four passing images sharing the new digest.
Root cause and scoping notes

Root cause

Run #454 of "Publish Docker Images" (commit a3a6d9f7) failed on exactly two matrix legs — dashboard and status-page — and succeeded on server, checker, workflows, private-location, db-migrate. Both failing jobs fail identically in the corepack enable step: Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-12.3.4.tgz then Error: Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs'.

Root cause: pnpm 12 (#2694) bumped the packageManager pin to pnpm 12.3.4, whose tarball ships only bin/pnpm.mjs (no pnpm.cjs). The corepack bundled in the node:24-slim digest pinned by the dashboard/status-page images (0afb7822…, generated by Dofigen 2.7.0) still looks for pnpm.cjs and fails. The four passing images (server, workflows, db-migrate) are generated by Dofigen 2.8.0 against the newer digest 2fe369e9…, whose corepack resolves the ESM-only bin.

The fix is regeneration, not hand-editing: running dofigen update + dofigen gen (Dofigen 2.8.0, the same tool the repo's own READMEs document) on the two apps updates the digest and version label, producing Dockerfiles identical in structure to the four that pass. The bare corepack enable line is retained because the source dofigen.yml still specifies it; under the new digest it downloads and activates pnpm 12.3.4 correctly, exactly as the passing images already demonstrate with corepack enable pnpm.

Causal chain
  • Signal (alert): GitHub Actions workflow "Publish Docker Images" run 🧑‍✈️ doing 🧑‍✈️ things #454 concluded failure on main
  • Surfacing site: repository openstatusHQ/openstatus at .github/workflows/docker-publish.yml — build-and-push job, dashboard and status-page matrix legs
  • Mechanism: Dashboard and status-page Dockerfiles pin node:24-slim digest 0afb7822 (Dofigen 2.7.0). After 'pnpm 12 (pnpm 12 #2694)' bumped packageManager to [email protected], that digest's corepack downloads pnpm-12.3.4.tgz but looks for bin/pnpm.cjs; pnpm 12.3.4 ships only bin/pnpm.mjs, so corepack enable fails with 'Cannot find module .../pnpm/12.3.4/bin/pnpm.cjs'.
  • Producer: apps/dashboard/Dockerfile and apps/status-page/Dockerfile (stale node:24-slim digest 0afb7822, Dofigen 2.7.0), instance build-and-push matrix legs dashboard and status-page (2 of 7), at apps/dashboard/Dockerfile and apps/status-page/Dockerfile — RUN corepack enable step
  • Trigger: Commit 'pnpm 12 (pnpm 12 #2694)' landed on main (12:26:59Z), changing the packageManager pin to [email protected]; the next docker-publish run 🧑‍✈️ doing 🧑‍✈️ things #454 (12:50Z) built dashboard/status-page against the stale digest and failed.
  • What happens to the failed unit today: docker-publish.yml runs build-and-push with fail-fast:false across the service matrix; a failed leg fails the whole run. The image is not pushed (build-push-action fails before push), so the GHCR image stays at its last successful publish. No retry, no dead-letter: the next push to main re-runs the job.
  • Cadence check: Deterministic failure on every main push that selects dashboard or status-page — a code/config change at branch head, not a transient: matches the 1 occurrence so far (first run after the pnpm 12 bump). Prior docker-publish runs were cancelled (the separate cancel-in-progress issue), not this corepack failure.
  • Blast radius: 0 other resource(s), 0 other tenant(s); data at risk: No data loss. Self-hosted deployments pulling ghcr.io/openstatushq/openstatus-dashboard and -status-page receive stale images (last successful publish) until the fix merges; Fly deploys build their own images and Vercel builds separately, so no production outage.
  • Producer evidence:
    • Run 🧑‍✈️ doing 🧑‍✈️ things #454 job logs: both legs fail at corepack enable with 'Cannot find module /root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs'; the other five legs succeed.
    • Registry inspection: [email protected] tarball contains only package/bin/pnpm.mjs and pnpx.mjs — no pnpm.cjs.
    • Repo grep: dashboard/status-page pin digest 0afb7822 + io.dofigen.version 2.7.0; server/workflows/db-migrate pin 2fe369e9 + 2.8.0.
    • Commit 'pnpm 12 (pnpm 12 #2694)' (8397370, 2026-09-10T12:26:59Z) bumped packageManager to pnpm 12.3.4.

Detection outcome

The fingerprinted signal "GitHub Actions workflow Publish Docker Images run #454 concluded failure on main" stops firing once this change is deployed. The two failing build-and-push matrix legs (dashboard, status-page) fail at corepack enable with Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs', produced by the stale node:24-slim digest 0afb7822… (Dofigen 2.7.0) whose corepack cannot resolve pnpm 12.3.4's ESM-only pnpm.mjs bin. Regenerating both images with Dofigen 2.8.0 pins them to digest 2fe369e9… — the same digest the server, workflows, and db-migrate legs already build on successfully — so corepack enable downloads and activates pnpm 12.3.4 and the builds complete instead of failing.

Fix chosen

Chosen: cause (removes the mechanism that produces the failure): Regenerate the two failing images with Dofigen 2.8.0 so their node:24-slim base digest (and corepack) matches the four passing images, removing the stale-digest corepack that cannot resolve pnpm 12.3.4's ESM-only bin.

Considered and not chosen:

  • loosen (raises a limit, threshold, or timeout, or widens a retry): Downgrade the packageManager pin back to pnpm 11.x so the stale digest's corepack keeps working. Not chosen: The pnpm 12 bump is intentional (pnpm 12 pnpm 12 #2694) and the rest of the monorepo already moved; reverting it would undo a deliberate toolchain upgrade to accommodate a stale image.
  • suppress (silences, downgrades, or reroutes the signal without changing what produces it): Add corepack enable pnpm or a manual pnpm.cjs shim in the two Dockerfiles. Not chosen: Hand-editing generated Dockerfiles would drift from the dofigen.lock and be overwritten on the next dofigen gen; the generator output already fixes the cause.

Outcome after fix

  • Triggering input: a push to main (e.g. the current head a3a6d9f7) that changes packages/** or apps/dashboard/** / apps/status-page/**, so prepare selects those services for build.
  • With the fix, the dashboard and status-page Dockerfiles reference FROM node@sha256:2fe369e9…, the digest the four passing legs already use.
  • At corepack enable, corepack reads the packageManager: [email protected] field, downloads pnpm-12.3.4.tgz, and activates its pnpm.mjs bin — no pnpm.cjs lookup, no Cannot find module error.
  • pnpm install --frozen-lockfile and pnpm turbo run build --filter=… then complete, the image builds and pushes, and the SBOM step runs, exactly as the five passing legs do today.
  • Fate of the at-risk artifact: the ghcr.io/openstatushq/openstatus-dashboard and -status-page images resume publishing on every push, so self-hosted deployments no longer pull stale code. Nothing is dropped or dead-lettered; the previously failing builds simply complete.
6 files changed (+84/-84)
  • apps/dashboard/.dockerignore: modified, +1/-1
  • apps/dashboard/Dockerfile: modified, +21/-21
  • apps/dashboard/dofigen.lock: modified, +22/-22
  • apps/status-page/.dockerignore: modified, +1/-1
  • apps/status-page/Dockerfile: modified, +20/-20
  • apps/status-page/dofigen.lock: modified, +19/-19

Repository conventions present in the repository: AGENTS.md, CLAUDE.md, apps/checker/AGENTS.md, apps/dashboard/AGENTS.md, apps/server/AGENTS.md, apps/status-page/AGENTS.md, apps/web/AGENTS.md, apps/workflows/AGENTS.md, packages/services/AGENTS.md, packages/ui/AGENTS.md.

Repository lint: pnpm run lint (declared in package.json) passed over the whole repository (the declared target takes no file arguments).

view-autofix view-investigation view-issue


Generated by Polylane.

Review in cubic

@vercel

vercel Bot commented Sep 10, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
openstatus-dashboard Ready Ready Preview Sep 10, 2026 2:06pm UTC
openstatus-status-page Ready Ready Preview Sep 10, 2026 2:06pm UTC
1 Skipped Deployment
Project Deployment Actions Updated
openstatus-web Skipped Skipped Sep 10, 2026 2:06pm UTC

Request Review

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

Labels

polylane severity:low Polylane autofix severity: low

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants