From 0f95889be2d791d360c16558564f60dd6f445ee9 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Wed, 9 Oct 2024 17:07:05 +0200 Subject: [PATCH 1/3] prepare-release: React packages don't have a single version --- scripts/release/prepare-release-from-npm.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/release/prepare-release-from-npm.js b/scripts/release/prepare-release-from-npm.js index faada23d2bd75..e23ffb39bc1c0 100755 --- a/scripts/release/prepare-release-from-npm.js +++ b/scripts/release/prepare-release-from-npm.js @@ -27,6 +27,9 @@ const run = async () => { } params.packages = await getPublicPackages(isExperimental); + params.packages = params.packages.filter(packageName => { + return !params.skipPackages.includes(packageName); + }); // Map of package name to upcoming stable version. // This Map is initially populated with guesses based on local versions. From 5d3ceef97e97a652ca5b3a0914541b69cc7d9aa1 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Wed, 9 Oct 2024 17:30:42 +0200 Subject: [PATCH 2/3] prepare-release: Only update renderer version if we publish React --- .../update-stable-version-numbers.js | 112 +++++++++--------- 1 file changed, 59 insertions(+), 53 deletions(-) diff --git a/scripts/release/prepare-release-from-npm-commands/update-stable-version-numbers.js b/scripts/release/prepare-release-from-npm-commands/update-stable-version-numbers.js index 29affd52a8299..a41d83ac69dbb 100644 --- a/scripts/release/prepare-release-from-npm-commands/update-stable-version-numbers.js +++ b/scripts/release/prepare-release-from-npm-commands/update-stable-version-numbers.js @@ -111,62 +111,68 @@ const run = async ({cwd, packages, version}, versionsMap) => { clear(); - // A separate "React version" is used for the embedded renderer version to support DevTools, - // since it needs to distinguish between different version ranges of React. - // We need to replace it as well as the "next" version number. - const buildInfoPath = join(nodeModulesPath, 'react', 'build-info.json'); - const {reactVersion} = await readJson(buildInfoPath); - - if (!reactVersion) { - console.error( - theme`{error Unsupported or invalid build metadata in} {path build/node_modules/react/build-info.json}` + - theme`{error . This could indicate that you have specified an outdated "next" version.}` - ); - process.exit(1); - } - - // We print the diff to the console for review, - // but it can be large so let's also write it to disk. - const diffPath = join(cwd, 'build', 'temp.diff'); - let diff = ''; - let numFilesModified = 0; - - // Find-and-replace hardcoded version (in built JS) for renderers. - for (let i = 0; i < packages.length; i++) { - const packageName = packages[i]; - const packagePath = join(nodeModulesPath, packageName); + if (packages.includes('react')) { + // A separate "React version" is used for the embedded renderer version to support DevTools, + // since it needs to distinguish between different version ranges of React. + // We need to replace it as well as the "next" version number. + const buildInfoPath = join(nodeModulesPath, 'react', 'build-info.json'); + const {reactVersion} = await readJson(buildInfoPath); + + if (!reactVersion) { + console.error( + theme`{error Unsupported or invalid build metadata in} {path build/node_modules/react/build-info.json}` + + theme`{error . This could indicate that you have specified an outdated "next" version.}` + ); + process.exit(1); + } - let files = await execRead( - `find ${packagePath} -name '*.js' -exec echo {} \\;`, - {cwd} + // We print the diff to the console for review, + // but it can be large so let's also write it to disk. + const diffPath = join(cwd, 'build', 'temp.diff'); + let diff = ''; + let numFilesModified = 0; + + // Find-and-replace hardcoded version (in built JS) for renderers. + for (let i = 0; i < packages.length; i++) { + const packageName = packages[i]; + const packagePath = join(nodeModulesPath, packageName); + + let files = await execRead( + `find ${packagePath} -name '*.js' -exec echo {} \\;`, + {cwd} + ); + files = files.split('\n'); + files.forEach(path => { + const newStableVersion = versionsMap.get(packageName); + const beforeContents = readFileSync(path, 'utf8', {cwd}); + let afterContents = beforeContents; + // Replace all "next" version numbers (e.g. header @license). + while (afterContents.indexOf(version) >= 0) { + afterContents = afterContents.replace(version, newStableVersion); + } + // Replace inline renderer version numbers (e.g. shared/ReactVersion). + while (afterContents.indexOf(reactVersion) >= 0) { + afterContents = afterContents.replace(reactVersion, newStableVersion); + } + if (beforeContents !== afterContents) { + numFilesModified++; + // Using a relative path for diff helps with the snapshot test + diff += printDiff(relative(cwd, path), beforeContents, afterContents); + writeFileSync(path, afterContents, {cwd}); + } + }); + } + writeFileSync(diffPath, diff, {cwd}); + console.log(theme.header(`\n${numFilesModified} files have been updated.`)); + console.log( + theme`A full diff is available at {path ${relative(cwd, diffPath)}}.` + ); + await confirm('Do the changes above look correct?'); + } else { + console.log( + theme`Skipping React renderer version update because React is not included in the release.` ); - files = files.split('\n'); - files.forEach(path => { - const newStableVersion = versionsMap.get(packageName); - const beforeContents = readFileSync(path, 'utf8', {cwd}); - let afterContents = beforeContents; - // Replace all "next" version numbers (e.g. header @license). - while (afterContents.indexOf(version) >= 0) { - afterContents = afterContents.replace(version, newStableVersion); - } - // Replace inline renderer version numbers (e.g. shared/ReactVersion). - while (afterContents.indexOf(reactVersion) >= 0) { - afterContents = afterContents.replace(reactVersion, newStableVersion); - } - if (beforeContents !== afterContents) { - numFilesModified++; - // Using a relative path for diff helps with the snapshot test - diff += printDiff(relative(cwd, path), beforeContents, afterContents); - writeFileSync(path, afterContents, {cwd}); - } - }); } - writeFileSync(diffPath, diff, {cwd}); - console.log(theme.header(`\n${numFilesModified} files have been updated.`)); - console.log( - theme`A full diff is available at {path ${relative(cwd, diffPath)}}.` - ); - await confirm('Do the changes above look correct?'); clear(); }; From 7a57e4bd17205d6b0e7e59f97e242c9b36d185e4 Mon Sep 17 00:00:00 2001 From: eps1lon Date: Wed, 9 Oct 2024 18:05:27 +0200 Subject: [PATCH 3/3] prepare-release: Fix not being able to specify version for package that should be released --- .../confirm-stable-version-numbers.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/release/prepare-release-from-npm-commands/confirm-stable-version-numbers.js b/scripts/release/prepare-release-from-npm-commands/confirm-stable-version-numbers.js index dd1229634b102..0b93fba2fc12b 100644 --- a/scripts/release/prepare-release-from-npm-commands/confirm-stable-version-numbers.js +++ b/scripts/release/prepare-release-from-npm-commands/confirm-stable-version-numbers.js @@ -30,9 +30,7 @@ const run = async ({skipPackages}, versionsMap) => { let version = bestGuessVersion; if ( - skipPackages.some(skipPackageName => - packageNames.includes(skipPackageName) - ) + skipPackages.some(skipPackageName => packages.includes(skipPackageName)) ) { await confirm( theme`{spinnerSuccess ✓} Version for ${packageNames} will remain {version ${bestGuessVersion}}`