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
Open
Fix Publish Docker Images: status-page and dashboard builds fail at corepack enable (pnpm 12.3.4)#2698polylane[bot] wants to merge 1 commit into
polylane[bot] wants to merge 1 commit into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
1 Skipped Deployment
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 —
dashboardandstatus-page— at thecorepack enablestep withError: Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs'. The other five images build fine. As a result, theghcr.io/openstatushq/openstatus-dashboardand-status-pageimages 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 lowWhat changed
apps/dashboard/Dockerfile,apps/dashboard/dofigen.lock,apps/dashboard/.dockerignore: regenerated with Dofigen 2.8.0; base imagenode:24-slimdigest bumped0afb7822…→2fe369e9…,io.dofigen.versionlabel2.7.0→2.8.0.apps/status-page/Dockerfile,apps/status-page/dofigen.lock,apps/status-page/.dockerignore: same regeneration.Why it's safe
dofigen genre-run after regeneration produced no further diff, so the committed files are exactly what Dofigen 2.8.0 emits for the existingdofigen.ymlsources — no hand edits that could drift from the generator.2fe369e9…is the identical digest theserver,workflows, anddb-migrateimages already built and pushed successfully on the samepnpm install --frozen-lockfile+pnpm turbo run buildpath in run 🧑✈️ doing 🧑✈️ things #454, so the corepack/pnpm behavior is proven by that passing set, not assumed.Validation
dofigen update && dofigen gen(Dofigen v2.8.0, checksum-verified) onapps/dashboardandapps/status-page: regenerated both; digest0afb7822…→2fe369e9…, version2.7.0→2.8.0.dofigen genon 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) aredenomissing in the sandbox (exit 127, both rundeno check), pre-existing and unrelated to this generated-file-only diff.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 —dashboardandstatus-page— and succeeded onserver,checker,workflows,private-location,db-migrate. Both failing jobs fail identically in thecorepack enablestep:Corepack is about to download https://registry.npmjs.org/pnpm/-/pnpm-12.3.4.tgzthenError: 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 onlybin/pnpm.mjs(nopnpm.cjs). Thecorepackbundled in thenode:24-slimdigest pinned by the dashboard/status-page images (0afb7822…, generated by Dofigen 2.7.0) still looks forpnpm.cjsand fails. The four passing images (server,workflows,db-migrate) are generated by Dofigen 2.8.0 against the newer digest2fe369e9…, 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 barecorepack enableline is retained because the sourcedofigen.ymlstill specifies it; under the new digest it downloads and activates pnpm 12.3.4 correctly, exactly as the passing images already demonstrate withcorepack enable pnpm.Causal chain
Detection outcome
The fingerprinted signal "GitHub Actions workflow
Publish Docker Imagesrun #454 concluded failure on main" stops firing once this change is deployed. The two failing build-and-push matrix legs (dashboard,status-page) fail atcorepack enablewithCannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs', produced by the stalenode:24-slimdigest0afb7822…(Dofigen 2.7.0) whose corepack cannot resolve pnpm 12.3.4's ESM-onlypnpm.mjsbin. Regenerating both images with Dofigen 2.8.0 pins them to digest2fe369e9…— the same digest theserver,workflows, anddb-migratelegs already build on successfully — socorepack enabledownloads 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:
corepack enable pnpmor a manualpnpm.cjsshim in the two Dockerfiles. Not chosen: Hand-editing generated Dockerfiles would drift from the dofigen.lock and be overwritten on the nextdofigen gen; the generator output already fixes the cause.Outcome after fix
main(e.g. the current heada3a6d9f7) that changespackages/**orapps/dashboard/**/apps/status-page/**, soprepareselects those services for build.dashboardandstatus-pageDockerfiles referenceFROM node@sha256:2fe369e9…, the digest the four passing legs already use.corepack enable, corepack reads thepackageManager: [email protected]field, downloadspnpm-12.3.4.tgz, and activates itspnpm.mjsbin — nopnpm.cjslookup, noCannot find moduleerror.pnpm install --frozen-lockfileandpnpm turbo run build --filter=…then complete, the image builds and pushes, and the SBOM step runs, exactly as the five passing legs do today.ghcr.io/openstatushq/openstatus-dashboardand-status-pageimages 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/-1apps/dashboard/Dockerfile: modified, +21/-21apps/dashboard/dofigen.lock: modified, +22/-22apps/status-page/.dockerignore: modified, +1/-1apps/status-page/Dockerfile: modified, +20/-20apps/status-page/dofigen.lock: modified, +19/-19Repository 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).Generated by Polylane.