Skip to content

Commit 9862061

Browse files
committed
Merge remote-tracking branch 'origin/main' into jg-codex/68-release-docs
* origin/main: Allow artifact verifier to accept covering root peer ranges (#95)
2 parents 81f1e80 + 48993d4 commit 9862061

1 file changed

Lines changed: 43 additions & 3 deletions

File tree

scripts/verify-release.sh

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -247,8 +247,46 @@ function assertEqual(actual, expected, label) {
247247
}
248248
}
249249
250-
assertEqual(rootPackage.peerDependencies?.react, expectedPeerRange, 'root peerDependencies.react');
251-
assertEqual(rootPackage.peerDependencies?.['react-dom'], expectedPeerRange, 'root peerDependencies.react-dom');
250+
function parseVersion(version, label) {
251+
const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
252+
if (!match) {
253+
throw new Error(`${label} expected X.Y.Z, got ${version}`);
254+
}
255+
256+
return {
257+
major: Number(match[1]),
258+
minor: Number(match[2]),
259+
patch: Number(match[3]),
260+
};
261+
}
262+
263+
function compareVersions(a, b) {
264+
return a.major - b.major || a.minor - b.minor || a.patch - b.patch;
265+
}
266+
267+
function assertCaretRangeIncludesVersion(range, version, label) {
268+
const match = /^\^(\d+\.\d+\.\d+)$/.exec(range || '');
269+
if (!match) {
270+
throw new Error(`${label} expected a caret X.Y.Z range that includes ${version}, got ${range}`);
271+
}
272+
273+
const minimum = parseVersion(match[1], label);
274+
const target = parseVersion(version, 'runtime version');
275+
if (minimum.major !== target.major || compareVersions(minimum, target) > 0) {
276+
throw new Error(`${label} ${range} does not include vendored runtime ${version}`);
277+
}
278+
}
279+
280+
assertCaretRangeIncludesVersion(
281+
rootPackage.peerDependencies?.react,
282+
runtimeVersion,
283+
'root peerDependencies.react'
284+
);
285+
assertCaretRangeIncludesVersion(
286+
rootPackage.peerDependencies?.['react-dom'],
287+
runtimeVersion,
288+
'root peerDependencies.react-dom'
289+
);
252290
assertEqual(runtimePackage.peerDependencies?.react, expectedPeerRange, 'runtime peerDependencies.react');
253291
assertEqual(runtimePackage.peerDependencies?.['react-dom'], expectedPeerRange, 'runtime peerDependencies.react-dom');
254292
@@ -266,7 +304,9 @@ for (const marker of [`version: "${runtimeVersion}"`, `reconcilerVersion: "${run
266304
}
267305
}
268306
269-
console.log(` - Runtime version ${runtimeVersion} matches peer policy ${expectedPeerRange}`);
307+
console.log(
308+
` - Runtime version ${runtimeVersion} is included by root peers and matches runtime peer policy ${expectedPeerRange}`
309+
);
270310
NODE
271311

272312
log "Verifying embedded React runtime version policy"

0 commit comments

Comments
 (0)