trilium/apps/server/docker/package.json
Elian Doran 7a92b326d0
fix(docker): pin the legacy image to the last pnpm that runs on 32-bit ARM
Moving off bullseye got the apt layers through on both legacy platforms,
and the builder stage then failed one layer later:

  ! Corepack is about to download .../pnpm-12.3.4.tgz
  Error: Cannot find module '/root/.cache/node/corepack/v1/pnpm/12.3.4/bin/pnpm.cjs'

This is not a stale corepack. pnpm 12 dropped its JavaScript
implementation and now ships as native executables, pulled in through
optional dependencies:

  linux-x64   linux-arm64   linux-x64-musl   linux-arm64-musl
  win32-x64   win32-arm64   darwin-x64       darwin-arm64

There is no 32-bit ARM target, so no corepack can help linux/arm/v7:
there is nothing for it to run. The 11.26.0 tarball is 5.1 MB and
carries a 13.9 MB dist/pnpm.mjs; the 12.3.4 tarball is 980 kB, its
largest file is its own changelog, and what remains under dist/ is
node-gyp and tar support beside an install.js that fetches the binary.
engines.node is >=18.*, so Node 22 was never the constraint here.

linux/arm/v8 normalizes to arm64, where @pnpm/exe.linux-arm64 exists and
matches bookworm's glibc, so that leg could run pnpm 12 given a newer
corepack. One packageManager field serves both legs, and 11.26.0 wants
Node >=22.13 against the image's 22.21.0, so pinning covers both. The
pin stays contained because Dockerfile.legacy copies only
./docker/package.json: the root monorepo keeps pnpm 12, whose CI only
ever runs on x64 and arm64.

renovate.json already ignores apps/server/Dockerfile.legacy but not this
manifest, which is how pnpm 12 arrived on Sept 6. Adding the path to
ignorePaths would also freeze better-sqlite3 there, so the guard is a
rule scoped to pnpm alone.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 19:26:43 +02:00

6 lines
104 B
JSON

{
"packageManager": "pnpm@11.26.0",
"dependencies": {
"better-sqlite3": "13.0.3"
}
}