mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Update set-version script to version private packages and workspace deps
Summary:
Addresses a gap when using the `set-version` script to update all packages on `main` (i.e. post branch cut):
- Package versions were not being set consistently. It is safe to version all workspace packages, including `"private"`.
- Our publishing workflow is independent from this, and only considers public packages for submission to npm.
- We also need to update the root `package.json`, which includes `devDependencies` referencing workspace dependencies.
Unblocks https://github.com/facebook/react-native/pull/43132.
Changelog: [Internal]
Reviewed By: lunaleaps
Differential Revision: D54419456
fbshipit-source-id: 93eee669c5cf7c2f16b68a2bf41e9a8ace5521bf
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"name": "@react-native/monorepo",
|
||||
"private": true,
|
||||
"version": "1000.0.0",
|
||||
"devDependencies": {
|
||||
"@monorepo/pkg-c": "0.0.1"
|
||||
}
|
||||
}
|
||||
@@ -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\\",
|
||||
|
||||
@@ -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 `<root>/packages` to specified version
|
||||
* - Update all packages under `<root>/packages` to specified version
|
||||
* - Update all npm dependencies of a `<root>/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<void> */ {
|
||||
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}) =>
|
||||
|
||||
+31
-15
@@ -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<PackageInfo> */ {
|
||||
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,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user