Skip to content

Commit b919ff6

Browse files
huntiefacebook-github-bot
authored andcommitted
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 #43132. Changelog: [Internal] Reviewed By: lunaleaps Differential Revision: D54419456 fbshipit-source-id: 93eee669c5cf7c2f16b68a2bf41e9a8ace5521bf
1 parent 79d1706 commit b919ff6

File tree

4 files changed

+96
-23
lines changed

4 files changed

+96
-23
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "@react-native/monorepo",
3+
"private": true,
4+
"version": "1000.0.0",
5+
"devDependencies": {
6+
"@monorepo/pkg-c": "0.0.1"
7+
}
8+
}

scripts/releases/set-version/__tests__/__snapshots__/set-version-test.js.snap

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
// Jest Snapshot v1, https://goo.gl/fbAQLP
22

3+
exports[`setVersion updates monorepo for nightly: package.json 1`] = `
4+
"{
5+
\\"name\\": \\"@react-native/monorepo\\",
6+
\\"private\\": true,
7+
\\"version\\": \\"1000.0.0\\",
8+
\\"devDependencies\\": {
9+
\\"@monorepo/pkg-c\\": \\"0.81.0-nightly-29282302-abcd1234\\"
10+
}
11+
}
12+
"
13+
`;
14+
315
exports[`setVersion updates monorepo for nightly: packages/monorepo-pkg-a/package.json 1`] = `
416
"{
517
\\"name\\": \\"@monorepo/pkg-a\\",
@@ -88,6 +100,18 @@ exports[`setVersion updates monorepo for nightly: packages/react-native/template
88100
"
89101
`;
90102

103+
exports[`setVersion updates monorepo for release-candidate: package.json 1`] = `
104+
"{
105+
\\"name\\": \\"@react-native/monorepo\\",
106+
\\"private\\": true,
107+
\\"version\\": \\"1000.0.0\\",
108+
\\"devDependencies\\": {
109+
\\"@monorepo/pkg-c\\": \\"0.80.0-rc.3\\"
110+
}
111+
}
112+
"
113+
`;
114+
91115
exports[`setVersion updates monorepo for release-candidate: packages/monorepo-pkg-a/package.json 1`] = `
92116
"{
93117
\\"name\\": \\"@monorepo/pkg-a\\",
@@ -176,6 +200,18 @@ exports[`setVersion updates monorepo for release-candidate: packages/react-nativ
176200
"
177201
`;
178202

203+
exports[`setVersion updates monorepo for stable version: package.json 1`] = `
204+
"{
205+
\\"name\\": \\"@react-native/monorepo\\",
206+
\\"private\\": true,
207+
\\"version\\": \\"1000.0.0\\",
208+
\\"devDependencies\\": {
209+
\\"@monorepo/pkg-c\\": \\"0.80.1\\"
210+
}
211+
}
212+
"
213+
`;
214+
179215
exports[`setVersion updates monorepo for stable version: packages/monorepo-pkg-a/package.json 1`] = `
180216
"{
181217
\\"name\\": \\"@monorepo/pkg-a\\",
@@ -264,6 +300,18 @@ exports[`setVersion updates monorepo for stable version: packages/react-native/t
264300
"
265301
`;
266302

303+
exports[`setVersion updates monorepo on main after release cut: package.json 1`] = `
304+
"{
305+
\\"name\\": \\"@react-native/monorepo\\",
306+
\\"private\\": true,
307+
\\"version\\": \\"1000.0.0\\",
308+
\\"devDependencies\\": {
309+
\\"@monorepo/pkg-c\\": \\"0.82.0-main\\"
310+
}
311+
}
312+
"
313+
`;
314+
267315
exports[`setVersion updates monorepo on main after release cut: packages/monorepo-pkg-a/package.json 1`] = `
268316
"{
269317
\\"name\\": \\"@monorepo/pkg-a\\",

scripts/releases/set-version/index.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import type {PackageJson} from '../../utils/monorepo';
1616
*/
1717

18-
const {getPackages} = require('../../utils/monorepo');
18+
const {getPackages, getWorkspaceRoot} = require('../../utils/monorepo');
1919
const {setReactNativeVersion} = require('../set-rn-version');
2020
const {promises: fs} = require('fs');
2121
const path = require('path');
@@ -60,7 +60,7 @@ async function updatePackageJson(
6060
* stays 1000.0.0.
6161
*
6262
* This script does the following:
63-
* - Update all public npm packages under `<root>/packages` to specified version
63+
* - Update all packages under `<root>/packages` to specified version
6464
* - Update all npm dependencies of a `<root>/packages` package to specified version
6565
* - Update npm dependencies of the template app (`packages/react-native/template`) to specified version
6666
* - Update `packages/react-native` native source and build files to specified version if relevant
@@ -70,7 +70,7 @@ async function setVersion(
7070
skipReactNativeVersion /*: boolean */ = false,
7171
) /*: Promise<void> */ {
7272
const packages = await getPackages({
73-
includePrivate: false,
73+
includePrivate: true,
7474
includeReactNative: true,
7575
});
7676
const newPackageVersions = Object.fromEntries(
@@ -82,11 +82,12 @@ async function setVersion(
8282
newPackageVersions,
8383
);
8484

85-
// Exclude the react-native package, since this (and the template) are
86-
// handled by `setReactNativeVersion`.
87-
const packagesToUpdate = Object.values(packages).filter(
88-
pkg => pkg.name !== 'react-native',
89-
);
85+
const packagesToUpdate = [
86+
await getWorkspaceRoot(),
87+
// Exclude the react-native package, since this (and the template) are
88+
// handled by `setReactNativeVersion`.
89+
...Object.values(packages).filter(pkg => pkg.name !== 'react-native'),
90+
];
9091

9192
await Promise.all(
9293
packagesToUpdate.map(({path: packagePath, packageJson}) =>

scripts/utils/monorepo.js

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -65,21 +65,7 @@ async function getPackages(
6565
? []
6666
: ['packages/react-native/package.json'],
6767
})
68-
.map(async packageJsonPath => {
69-
const packagePath = path.dirname(packageJsonPath);
70-
const packageJson /*: PackageJson */ = JSON.parse(
71-
await fs.promises.readFile(packageJsonPath, 'utf-8'),
72-
);
73-
74-
return [
75-
packageJson.name,
76-
{
77-
name: packageJson.name,
78-
path: packagePath,
79-
packageJson,
80-
},
81-
];
82-
}),
68+
.map(parsePackageInfo),
8369
);
8470

8571
return Object.fromEntries(
@@ -89,6 +75,36 @@ async function getPackages(
8975
);
9076
}
9177

78+
/**
79+
* Get the parsed package metadata for the workspace root.
80+
*/
81+
async function getWorkspaceRoot() /*: Promise<PackageInfo> */ {
82+
const [, packageInfo] = await parsePackageInfo(
83+
path.join(REPO_ROOT, 'package.json'),
84+
);
85+
86+
return packageInfo;
87+
}
88+
89+
async function parsePackageInfo(
90+
packageJsonPath /*: string */,
91+
) /*: Promise<[string, PackageInfo]> */ {
92+
const packagePath = path.dirname(packageJsonPath);
93+
const packageJson /*: PackageJson */ = JSON.parse(
94+
await fs.promises.readFile(packageJsonPath, 'utf-8'),
95+
);
96+
97+
return [
98+
packageJson.name,
99+
{
100+
name: packageJson.name,
101+
path: packagePath,
102+
packageJson,
103+
},
104+
];
105+
}
106+
92107
module.exports = {
93108
getPackages,
109+
getWorkspaceRoot,
94110
};

0 commit comments

Comments
 (0)