DUNGEONS-34: repair frontend lockfile for npm 10
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
21
scripts/test-install.mjs
Normal file
21
scripts/test-install.mjs
Normal file
@@ -0,0 +1,21 @@
|
||||
// Validate npm's resolution from only the committed manifests, with no node_modules.
|
||||
import { spawnSync } from 'node:child_process';
|
||||
import { copyFileSync, mkdtempSync, rmSync } from 'node:fs';
|
||||
import { tmpdir } from 'node:os';
|
||||
import { join } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
if (!process.env.npm_execpath) throw new Error('Run npm run test:install.');
|
||||
const fixture = mkdtempSync(join(tmpdir(), 'webka-install-'));
|
||||
try {
|
||||
for (const file of ['package.json', 'package-lock.json']) {
|
||||
copyFileSync(fileURLToPath(new URL(`../frontend/${file}`, import.meta.url)), join(fixture, file));
|
||||
}
|
||||
const result = spawnSync(process.execPath, [process.env.npm_execpath, 'ci', '--dry-run', '--ignore-scripts', '--no-audit', '--no-fund'], { cwd: fixture, encoding: 'utf8', timeout: 180000 });
|
||||
if (result.error || result.status !== 0) {
|
||||
console.error(result.stderr || result.error?.message || 'Clean lockfile validation failed.');
|
||||
process.exitCode = 1;
|
||||
} else console.log('PASS: npm ci accepts the frontend lockfile without an existing node_modules directory.');
|
||||
} finally {
|
||||
rmSync(fixture, { recursive: true, force: true });
|
||||
}
|
||||
Reference in New Issue
Block a user