From 2c74203fbc5fdbbb43d19923719f1d9b2d9363e0 Mon Sep 17 00:00:00 2001 From: Tom Dupuis <60640908+tomdps@users.noreply.github.com> Date: Mon, 13 Jul 2026 12:09:55 -0700 Subject: [PATCH] fix(release): parse npm 11 pack output --- scripts/release-dry-run.mjs | 5 +++-- tests/native-packaging-policy.test.mjs | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/release-dry-run.mjs b/scripts/release-dry-run.mjs index 5a0eaf2..c3433a2 100644 --- a/scripts/release-dry-run.mjs +++ b/scripts/release-dry-run.mjs @@ -10,7 +10,7 @@ import { graphCoreSupportedTargets } from "./graph-native-targets.mjs"; import { publicReleasePackageNames, releasePackageDirForName } from "./release-package-dirs.mjs"; -import { createStagedOpcorePackage } from "./stage-opcore-bundle.mjs"; +import { createStagedOpcorePackage, npmPackResultForPackage } from "./stage-opcore-bundle.mjs"; const releaseVersion = "0.2.0"; const publicPackages = publicReleasePackageNames; @@ -87,7 +87,8 @@ function packWorkspace(packageName, destination) { const result = run("npm", ["pack", "--json", "--pack-destination", destination], { cwd: staged?.packageDir ?? releasePackageDirForName(packageName) }); - const parsed = JSON.parse(result.stdout)[0]; + const parsed = npmPackResultForPackage(JSON.parse(result.stdout), packageName); + if (!parsed) throw new Error(`${packageName} npm pack returned no package result:\n${result.stdout}`); if (parsed.version !== releaseVersion) throw new Error(`${packageName} packed version ${parsed.version}, expected ${releaseVersion}`); return join(destination, parsed.filename); } finally { diff --git a/tests/native-packaging-policy.test.mjs b/tests/native-packaging-policy.test.mjs index 5d2babc..fae57fa 100644 --- a/tests/native-packaging-policy.test.mjs +++ b/tests/native-packaging-policy.test.mjs @@ -53,6 +53,10 @@ describe("native graph-core packaging policy", () => { assert.match(stageBundle, /"pack", "\.", "--dry-run", "--json", "--ignore-scripts"/); assert.match(stageBundle, /disableLifecycleScripts: true/); assert.match(stageBundle, /delete manifest\.scripts/); + + const releaseDryRun = readFileSync("scripts/release-dry-run.mjs", "utf8"); + assert.match(releaseDryRun, /npmPackResultForPackage\(JSON\.parse\(result\.stdout\), packageName\)/); + assert.doesNotMatch(releaseDryRun, /JSON\.parse\(result\.stdout\)\[0\]/); }); it("encodes npm os/cpu support in each bundled native package manifest", () => {