openvibers/openvibe.host Commits

pnpm-build: install with --config.confirmModulesPurge=false. When pnpm decides node_modules must be rebuilt (made under other settings, as production's Games checkout was), it asks first; under ovhost nothing answers, so it installed nothing and exited 0. Games 8200c2c's new dependency (openvibe-shared) never appeared, the deploy failed its dependency check and restored the checkout (nothing restarted). Reproduced in a copy of the production checkout; with the flag the install rebuilds node_modules and links the dependency, and the next install does not ask again.

OP OpenVibers committed 27 Sept 2026 · d8e8f7ddee · 3 files, +6 −3


Changes

ddiff --git a/docs/deploy-strategies.md b/docs/deploy-strategies.md
iindex 750985b..95065db 100644
---- a/docs/deploy-strategies.md
++++ b/docs/deploy-strategies.md
@@@ -143,7 +143,7 @@ overrides them.
Strategy defaults: `static-build` also sets `install: npm ci, always`, `build: [["node", "build.js"]]` and
`nginx: { repoVhosts: "deploy/nginx/*.conf", installOnDeploy: true }`; `pnpm-build` sets
--`packages: ["apps/*", "packages/*"]`, `install: pnpm install --frozen-lockfile, always` and
++`packages: ["apps/*", "packages/*"]`, `install: pnpm install --frozen-lockfile --config.confirmModulesPurge=false, always` (pnpm's purge prompt has no one to answer it) and
`build: [["pnpm", "build"]]`; `release-layout` installs with `npm ci --omit=dev`.
A release-layout entry's `repo` is the release root (`/opt/openvibe.live`); an entry that names the link
ddiff --git a/lib/inventory.js b/lib/inventory.js
iindex 07bd5e2..11bf392 100644
---- a/lib/inventory.js
++++ b/lib/inventory.js
@@@ -66,7 +66,10 @@ const PRESETS = {
},
'pnpm-build': {
packages: ['apps/*', 'packages/*'],
-- install: { command: ['pnpm', 'install', '--frozen-lockfile'], always: true, lockfile: 'pnpm-lock.yaml', restoreLockfile: false, workspace: true },
++ // --config.confirmModulesPurge=false: when pnpm decides node_modules must be rebuilt (made under other settings),
++ // it asks first; with no terminal nothing answers, it installs nothing and exits 0 (Games, 2026-09-27: a new
++ // dependency never appeared, the deploy failed its dependency check and was restored).
++ install: { command: ['pnpm', 'install', '--frozen-lockfile', '--config.confirmModulesPurge=false'], always: true, lockfile: 'pnpm-lock.yaml', restoreLockfile: false, workspace: true },
build: [['pnpm', 'build']],
},
'release-layout': { install: { command: NPM_CI } },
ddiff --git a/test/strategy-in-place.test.js b/test/strategy-in-place.test.js
iindex 203082c..100adcb 100644
---- a/test/strategy-in-place.test.js
++++ b/test/strategy-in-place.test.js
@@@ -233,7 +233,7 @@ runTests([
assert.strictEqual(r.code, 0, r.out);
assert.strictEqual(host.repo.head, to);
const pnpm = host.calls.filter((c) => c.cmd === 'pnpm');
-- assert.deepStrictEqual(pnpm.map((c) => c.args.join(' ')), ['install --frozen-lockfile', 'build']);
++ assert.deepStrictEqual(pnpm.map((c) => c.args.join(' ')), ['install --frozen-lockfile --config.confirmModulesPurge=false', 'build'], 'never waits on pnpm\'s purge prompt');
assert.ok(pnpm.every((c) => c.as === 'ubuntu' && c.cwd === '/opt/openvibe.games'));
assert.ok(host.calls.filter((c) => c.cmd === 'git').every((c) => c.as === 'ubuntu'), 'git as the checkout owner, never root');
const check = host.nodeChecks()[0];