diff --git a/scripts/releases/set-version/__tests__/__fixtures__/package.json b/scripts/releases/set-version/__tests__/__fixtures__/package.json new file mode 100644 index 00000000000..f8a85180bf9 --- /dev/null +++ b/scripts/releases/set-version/__tests__/__fixtures__/package.json @@ -0,0 +1,8 @@ +{ + "name": "@react-native/monorepo", + "private": true, + "version": "1000.0.0", + "devDependencies": { + "@monorepo/pkg-c": "0.0.1" + } +} diff --git a/scripts/releases/set-version/__tests__/__snapshots__/set-version-test.js.snap b/scripts/releases/set-version/__tests__/__snapshots__/set-version-test.js.snap index 33c0979d209..174df2705ee 100644 --- a/scripts/releases/set-version/__tests__/__snapshots__/set-version-test.js.snap +++ b/scripts/releases/set-version/__tests__/__snapshots__/set-version-test.js.snap @@ -1,5 +1,17 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`setVersion updates monorepo for nightly: package.json 1`] = ` +"{ + \\"name\\": \\"@react-native/monorepo\\", + \\"private\\": true, + \\"version\\": \\"1000.0.0\\", + \\"devDependencies\\": { + \\"@monorepo/pkg-c\\": \\"0.81.0-nightly-29282302-abcd1234\\" + } +} +" +`; + exports[`setVersion updates monorepo for nightly: packages/monorepo-pkg-a/package.json 1`] = ` "{ \\"name\\": \\"@monorepo/pkg-a\\", @@ -198,6 +210,18 @@ exports[`setVersion updates monorepo for nightly: packages/react-native/template " `; +exports[`setVersion updates monorepo for release-candidate: package.json 1`] = ` +"{ + \\"name\\": \\"@react-native/monorepo\\", + \\"private\\": true, + \\"version\\": \\"1000.0.0\\", + \\"devDependencies\\": { + \\"@monorepo/pkg-c\\": \\"0.80.0-rc.3\\" + } +} +" +`; + exports[`setVersion updates monorepo for release-candidate: packages/monorepo-pkg-a/package.json 1`] = ` "{ \\"name\\": \\"@monorepo/pkg-a\\", @@ -396,6 +420,18 @@ exports[`setVersion updates monorepo for release-candidate: packages/react-nativ " `; +exports[`setVersion updates monorepo for stable version: package.json 1`] = ` +"{ + \\"name\\": \\"@react-native/monorepo\\", + \\"private\\": true, + \\"version\\": \\"1000.0.0\\", + \\"devDependencies\\": { + \\"@monorepo/pkg-c\\": \\"0.80.1\\" + } +} +" +`; + exports[`setVersion updates monorepo for stable version: packages/monorepo-pkg-a/package.json 1`] = ` "{ \\"name\\": \\"@monorepo/pkg-a\\", @@ -594,6 +630,18 @@ exports[`setVersion updates monorepo for stable version: packages/react-native/t " `; +exports[`setVersion updates monorepo on main after release cut: package.json 1`] = ` +"{ + \\"name\\": \\"@react-native/monorepo\\", + \\"private\\": true, + \\"version\\": \\"1000.0.0\\", + \\"devDependencies\\": { + \\"@monorepo/pkg-c\\": \\"0.82.0-main\\" + } +} +" +`; + exports[`setVersion updates monorepo on main after release cut: packages/monorepo-pkg-a/package.json 1`] = ` "{ \\"name\\": \\"@monorepo/pkg-a\\", diff --git a/scripts/releases/set-version/index.js b/scripts/releases/set-version/index.js index 20d241d8910..f986487e198 100644 --- a/scripts/releases/set-version/index.js +++ b/scripts/releases/set-version/index.js @@ -15,7 +15,7 @@ import type {PackageJson} from '../../utils/monorepo'; */ -const {getPackages} = require('../../utils/monorepo'); +const {getPackages, getWorkspaceRoot} = require('../../utils/monorepo'); const {setReactNativeVersion} = require('../set-rn-version'); const {promises: fs} = require('fs'); const path = require('path'); @@ -61,7 +61,7 @@ async function updatePackageJson( * stays 1000.0.0. * * This script does the following: - * - Update all public npm packages under `/packages` to specified version + * - Update all packages under `/packages` to specified version * - Update all npm dependencies of a `/packages` package to specified version * - Update npm dependencies of the template app (`packages/react-native/template`) to specified version * - Update `packages/react-native` native source and build files to specified version if relevant @@ -71,7 +71,7 @@ async function setVersion( skipReactNativeVersion /*: boolean */ = false, ) /*: Promise */ { const packages = await getPackages({ - includePrivate: false, + includePrivate: true, includeReactNative: true, }); const newPackageVersions = Object.fromEntries( @@ -83,11 +83,12 @@ async function setVersion( newPackageVersions, ); - // Exclude the react-native package, since this (and the template) are - // handled by `setReactNativeVersion`. - const packagesToUpdate = Object.values(packages).filter( - pkg => pkg.name !== 'react-native', - ); + const packagesToUpdate = [ + await getWorkspaceRoot(), + // Exclude the react-native package, since this (and the template) are + // handled by `setReactNativeVersion`. + ...Object.values(packages).filter(pkg => pkg.name !== 'react-native'), + ]; await Promise.all( packagesToUpdate.map(({path: packagePath, packageJson}) => diff --git a/scripts/utils/monorepo.js b/scripts/utils/monorepo.js index 627e44b63f2..304ee9c37c2 100644 --- a/scripts/utils/monorepo.js +++ b/scripts/utils/monorepo.js @@ -65,21 +65,7 @@ async function getPackages( ? [] : ['packages/react-native/package.json'], }) - .map(async packageJsonPath => { - const packagePath = path.dirname(packageJsonPath); - const packageJson /*: PackageJson */ = JSON.parse( - await fs.promises.readFile(packageJsonPath, 'utf-8'), - ); - - return [ - packageJson.name, - { - name: packageJson.name, - path: packagePath, - packageJson, - }, - ]; - }), + .map(parsePackageInfo), ); return Object.fromEntries( @@ -89,6 +75,36 @@ async function getPackages( ); } +/** + * Get the parsed package metadata for the workspace root. + */ +async function getWorkspaceRoot() /*: Promise */ { + const [, packageInfo] = await parsePackageInfo( + path.join(REPO_ROOT, 'package.json'), + ); + + return packageInfo; +} + +async function parsePackageInfo( + packageJsonPath /*: string */, +) /*: Promise<[string, PackageInfo]> */ { + const packagePath = path.dirname(packageJsonPath); + const packageJson /*: PackageJson */ = JSON.parse( + await fs.promises.readFile(packageJsonPath, 'utf-8'), + ); + + return [ + packageJson.name, + { + name: packageJson.name, + path: packagePath, + packageJson, + }, + ]; +} + module.exports = { getPackages, + getWorkspaceRoot, };