SIGN IN SIGN UP
TryGhost / Ghost UNCLAIMED

Independent technology for modern publishing, memberships, subscriptions and newsletters.

0 0 121 JavaScript

Fixed pack.js and Dockerfile references to deleted .npmrc (#28205)

ref #28197

Five distinct release-pipeline files broke after the
`.npmrc` deletion, but the deeper story is that `.npmrc` was also
carrying `frozen-lockfile=false`, which was silently absorbing several
pnpm-deploy-vs-lockfile mismatches under pnpm 10. pnpm 11 ignores
`.npmrc` for that directive, so the mismatches surface.

## What was broken

- `Dockerfile.production:28` — production image builds. `COPY` fails on
missing source.
- `docker/ghost-dev/Dockerfile:21` — devcontainer + local dev. Already
failed on main: [run
26525156893](https://github.com/TryGhost/Ghost/actions/runs/26525156893).
- `ghost/core/scripts/pack.js:124` — read root `.npmrc` to build the
published Ghost tarball; would throw on next release.
- `pack.js` — `pnpm pack` of `@tryghost/i18n`/etc. needs
`pnpm-workspace.yaml` in scope (pnpm 11 strict-validates `catalog:`
refs); pack.js wrote it AFTER the pack loop.
- `pack.js` — the shipped tarball's `pnpm-workspace.yaml` carried
`overrides` + `packageExtensions` verbatim from root, but `pnpm
deploy`'s generated lockfile doesn't record them (they're already
applied to the resolved package.json). pnpm 11's frozen-lockfile install
(CI=true default for ghost-cli) failed
`ERR_PNPM_LOCKFILE_CONFIG_MISMATCH`.
- `pack.js` — after the existing peer-suffix-stripping and
component-file: rewriting on the deployed package.json, the deploy
lockfile no longer matched. Under pnpm 10 this was masked by
`frozen-lockfile=false` in `.npmrc`; pnpm 11 fails
`ERR_PNPM_OUTDATED_LOCKFILE`.
- `pack.js` — `minimumReleaseAge` policy in the shipped workspace.yaml
404'd on the private component tarballs and failed install inside
`Dockerfile.production`.
S
Steve Larson committed
5b6eba0fbd790edd6bab0d10de76aca74a4e7a57
Parent: 2753f9a
Committed by GitHub <noreply@github.com> on 5/27/2026, 6:32:24 PM