mirror of
https://github.com/ether/etherpad-lite.git
synced 2026-07-17 16:47:05 +00:00
fix(docker): share corepack cache so etherpad user can resolve pnpm (#7689)
* fix(docker): share corepack cache so etherpad user can resolve pnpm (#7687) PR #7674 switched the Dockerfile from `npm install -g pnpm` to corepack and `corepack prepare pnpm@${PnpmVersion} --activate`. The activate step runs as root and writes its lastKnownGood pin into `$COREPACK_HOME`, which defaults to `~/.cache/node/corepack` — i.e. a per-user path. The Dockerfile then drops to `USER etherpad` and later runs `bin/installLocalPlugins.sh`, which invokes `pnpm` as etherpad. With an empty per-user corepack cache and no shared activation file, corepack re-resolves pnpm and (for forks/configs without a `packageManager` pin matching the activated version) can fall back to "latest" from the registry — pulling `pnpm@10.33.4` instead of the requested 11.x and failing the workspace's `engines.pnpm` check. Pin `COREPACK_HOME=/opt/corepack` and chown it to etherpad after the prepare step. Both root and etherpad now share the same lastKnownGood file and tarball cache, so etherpad inherits the activated pnpm without hitting the registry again. Verified end-to-end: - `docker build --target development --build-arg ETHERPAD_LOCAL_PLUGINS=ep_test` with a stub local plugin runs `installLocalPlugins.sh` cleanly: `Done in 16.6s using pnpm v11.0.6`. - `docker run ... pnpm --version` as etherpad reports 11.0.6 from the shared cache — no "Unsupported environment" error. Note: corepack still emits a one-time "about to download" line at runtime because `corepack prepare pnpm@11.0.6` resolves to the highest matching patch (11.0.8) at build time while the project's `packageManager` field pins exactly 11.0.6. That's a follow-up — the download succeeds non-interactively and the engine check passes. Fixes #7687. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(docker): action Qodo PR review (#7687 follow-up) - Replace hard-coded /opt/corepack with ${COREPACK_HOME} in mkdir/chown so the env var stays the single source of truth (Qodo: "COREPACK_HOME path duplication"). - Add a build-test-local-plugin job to .github/workflows/docker.yml that builds the development target with a stub ETHERPAD_LOCAL_PLUGINS so the original failure mode (corepack/pnpm cache invisible across the USER switch) cannot silently regress (Qodo: "COREPACK_HOME fix lacks test"). The job is small — `docker build` only, no run — and uses the shared GHA buildx cache. Verified: same docker build + `docker run pnpm --version` flow on the variable form gives identical output (pnpm 11.0.6 from the etherpad-owned cache). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
b751fd7b9e
commit
fe9727b31e
2 changed files with 55 additions and 1 deletions
45
.github/workflows/docker.yml
vendored
45
.github/workflows/docker.yml
vendored
|
|
@ -81,6 +81,51 @@ jobs:
|
|||
(cd src && pnpm run test-container)
|
||||
git clean -dxf .
|
||||
|
||||
build-test-local-plugin:
|
||||
# Regression coverage for #7687: the Docker image's
|
||||
# `bin/installLocalPlugins.sh` step runs as the `etherpad` user and
|
||||
# invokes pnpm via the corepack shim. A previous corepack/cache bug
|
||||
# made that path fail when ETHERPAD_LOCAL_PLUGINS was set. This job
|
||||
# builds the development target with a stub local plugin so the
|
||||
# regression cannot silently come back.
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
steps:
|
||||
-
|
||||
name: Check out
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: etherpad
|
||||
-
|
||||
name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4
|
||||
-
|
||||
name: Stub a local plugin
|
||||
run: |
|
||||
mkdir -p etherpad/local_plugins/ep_test_corepack
|
||||
cat > etherpad/local_plugins/ep_test_corepack/package.json <<'EOF'
|
||||
{
|
||||
"name": "ep_test_corepack",
|
||||
"version": "0.0.1",
|
||||
"description": "regression-test stub for ether/etherpad#7687",
|
||||
"main": "index.js"
|
||||
}
|
||||
EOF
|
||||
cat > etherpad/local_plugins/ep_test_corepack/index.js <<'EOF'
|
||||
exports.placeholder = true;
|
||||
EOF
|
||||
-
|
||||
name: Build with ETHERPAD_LOCAL_PLUGINS (must succeed)
|
||||
uses: docker/build-push-action@v7
|
||||
with:
|
||||
context: ./etherpad
|
||||
target: development
|
||||
load: false
|
||||
build-args: |
|
||||
ETHERPAD_LOCAL_PLUGINS=ep_test_corepack
|
||||
cache-from: type=gha
|
||||
|
||||
build-test-db-drivers:
|
||||
# Spinning up MySQL + Postgres + cross-driver smoke is expensive; only
|
||||
# run it on pushes to develop (and tagged release pushes), not on every
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue