mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
cf664c65e2
Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/53312 Changelog: [Internal] Reviewed By: jbrown215 Differential Revision: D80400976 fbshipit-source-id: 196af69c0b9621b2a2675b232406639773e04933
113 lines
2.7 KiB
JavaScript
113 lines
2.7 KiB
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*
|
|
* @flow strict-local
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
/*::
|
|
import type {PackageJson} from '../shared/monorepoUtils';
|
|
*/
|
|
|
|
const {
|
|
getPackages,
|
|
getWorkspaceRoot,
|
|
updatePackageJson,
|
|
} = require('../shared/monorepoUtils');
|
|
const {updateReactNativeArtifacts} = require('./set-rn-artifacts-version');
|
|
const {parseArgs} = require('util');
|
|
|
|
const config = {
|
|
allowPositionals: true,
|
|
options: {
|
|
skipReactNativeVersion: {
|
|
type: 'boolean',
|
|
},
|
|
help: {type: 'boolean'},
|
|
},
|
|
};
|
|
|
|
async function main() {
|
|
const {
|
|
positionals: [version],
|
|
values: {help, skipReactNativeVersion},
|
|
/* $FlowFixMe[incompatible-type] Natural Inference rollout. See
|
|
* https://fburl.com/workplace/6291gfvu */
|
|
} = parseArgs(config);
|
|
|
|
if (help) {
|
|
console.log(`
|
|
Usage: node ./scripts/releases/set-version.js <version> [OPTIONS]
|
|
|
|
Bump the version of all packages.
|
|
|
|
- Updates package.json metadata for all workspaces and the project root.
|
|
- Updates relevant native files in the react-native package.
|
|
|
|
If --skipReactNativeVersion is passed, the react-native package version will
|
|
be left unmodified as "1000.0.0" (special static version on main), and native
|
|
files will not be touched.
|
|
|
|
Options:
|
|
--skipReactNativeVersion Don't update the version of the react-native
|
|
package (default: false).
|
|
`);
|
|
return;
|
|
}
|
|
|
|
if (version == null) {
|
|
throw new Error('Missing version argument');
|
|
}
|
|
|
|
await setVersion(version, skipReactNativeVersion);
|
|
}
|
|
|
|
async function setVersion(
|
|
version /*: string */,
|
|
skipReactNativeVersion /*: boolean */ = false,
|
|
) /*: Promise<void> */ {
|
|
const packages = await getPackages({
|
|
includePrivate: true,
|
|
includeReactNative: true,
|
|
});
|
|
const newPackageVersions = Object.fromEntries(
|
|
Object.entries(packages).map(([packageName, {packageJson}]) => {
|
|
let packageVersion = version;
|
|
if (packageName === 'react-native' && skipReactNativeVersion) {
|
|
packageVersion = '1000.0.0';
|
|
} else if (packageJson.private === true) {
|
|
packageVersion = packageJson.version ?? '0.0.0';
|
|
}
|
|
return [packageName, packageVersion];
|
|
}),
|
|
);
|
|
|
|
const packagesToUpdate = [
|
|
await getWorkspaceRoot(),
|
|
...Object.values(packages),
|
|
];
|
|
|
|
// Update all workspace packages
|
|
await Promise.all(
|
|
packagesToUpdate.map(pkg => updatePackageJson(pkg, newPackageVersions)),
|
|
);
|
|
|
|
// Update generated files in packages/react-native/
|
|
if (!skipReactNativeVersion) {
|
|
await updateReactNativeArtifacts(version);
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
setVersion,
|
|
};
|
|
|
|
if (require.main === module) {
|
|
void main();
|
|
}
|