react/scripts/release/publish-commands/update-stable-version-numbe...

53 lines
1.7 KiB
JavaScript

#!/usr/bin/env node
'use strict';
const {readFileSync, writeFileSync} = require('fs');
const {readJson, writeJson} = require('fs-extra');
const {join} = require('path');
const run = async ({cwd, packages, skipPackages, tags}) => {
if (!tags.includes('latest')) {
// Don't update version numbers for alphas.
return;
}
const nodeModulesPath = join(cwd, 'build/node_modules');
const packagesPath = join(cwd, 'packages');
// Update package versions and dependencies (in source) to mirror what was published to NPM.
for (let i = 0; i < packages.length; i++) {
const packageName = packages[i];
const publishedPackageJSON = await readJson(
join(nodeModulesPath, packageName, 'package.json')
);
const sourcePackageJSONPath = join(
packagesPath,
packageName,
'package.json'
);
const sourcePackageJSON = await readJson(sourcePackageJSONPath);
sourcePackageJSON.version = publishedPackageJSON.version;
sourcePackageJSON.dependencies = publishedPackageJSON.dependencies;
sourcePackageJSON.peerDependencies = publishedPackageJSON.peerDependencies;
await writeJson(sourcePackageJSONPath, sourcePackageJSON, {spaces: 2});
}
// Update the shared React version source file.
// (Unless this release does not include an update to React)
if (!skipPackages.includes('react')) {
const sourceReactVersionPath = join(cwd, 'packages/shared/ReactVersion.js');
const {version} = await readJson(
join(nodeModulesPath, 'react', 'package.json')
);
const sourceReactVersion = readFileSync(
sourceReactVersionPath,
'utf8'
).replace(/export default '[^']+';/, `export default '${version}';`);
writeFileSync(sourceReactVersionPath, sourceReactVersion);
}
};
module.exports = run;