mirror of
https://github.com/facebook/react.git
synced 2025-11-01 09:12:30 +00:00
7e36d8beba
* Retry loop should not start over from beginning When the otp times out, we should not retry the packages that were already successfully published. We should pick up where we left off. * Don't crash if build-info.json doesn't exist The "print follow up instructions" step crashes if build-info.json is not found. The new build workflow doesn't include those yet (might not need to) and since the instructions that depend on it only affect semver (latest) releases, I've moved the code to that branch. Will follow up with a proper fix, either by adding back a build-info.json file or removing that dependency and reading the commit some other way.
81 lines
2.7 KiB
JavaScript
Executable File
81 lines
2.7 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
'use strict';
|
|
|
|
const {join} = require('path');
|
|
const {readJsonSync} = require('fs-extra');
|
|
const clear = require('clear');
|
|
const {getPublicPackages, handleError} = require('./utils');
|
|
const theme = require('./theme');
|
|
|
|
const checkNPMPermissions = require('./publish-commands/check-npm-permissions');
|
|
const confirmSkippedPackages = require('./publish-commands/confirm-skipped-packages');
|
|
const confirmVersionAndTags = require('./publish-commands/confirm-version-and-tags');
|
|
const parseParams = require('./publish-commands/parse-params');
|
|
const printFollowUpInstructions = require('./publish-commands/print-follow-up-instructions');
|
|
const promptForOTP = require('./publish-commands/prompt-for-otp');
|
|
const publishToNPM = require('./publish-commands/publish-to-npm');
|
|
const updateStableVersionNumbers = require('./publish-commands/update-stable-version-numbers');
|
|
const validateTags = require('./publish-commands/validate-tags');
|
|
const validateSkipPackages = require('./publish-commands/validate-skip-packages');
|
|
|
|
const run = async () => {
|
|
try {
|
|
const params = parseParams();
|
|
|
|
const version = readJsonSync('./build/node_modules/react/package.json')
|
|
.version;
|
|
const isExperimental = version.includes('experimental');
|
|
|
|
params.cwd = join(__dirname, '..', '..');
|
|
params.packages = await getPublicPackages(isExperimental);
|
|
|
|
// Pre-filter any skipped packages to simplify the following commands.
|
|
// As part of doing this we can also validate that none of the skipped packages were misspelled.
|
|
params.skipPackages.forEach(packageName => {
|
|
const index = params.packages.indexOf(packageName);
|
|
if (index < 0) {
|
|
console.log(
|
|
theme`Invalid skip package {package ${packageName}} specified.`
|
|
);
|
|
process.exit(1);
|
|
} else {
|
|
params.packages.splice(index, 1);
|
|
}
|
|
});
|
|
|
|
await validateTags(params);
|
|
await confirmSkippedPackages(params);
|
|
await confirmVersionAndTags(params);
|
|
await validateSkipPackages(params);
|
|
await checkNPMPermissions(params);
|
|
|
|
clear();
|
|
let otp = await promptForOTP(params);
|
|
const packageNames = params.packages;
|
|
for (let i = 0; i < packageNames.length; ) {
|
|
const packageName = packageNames[i];
|
|
try {
|
|
await publishToNPM(params, packageName, otp);
|
|
i++;
|
|
} catch (error) {
|
|
console.error(error.message);
|
|
console.log();
|
|
console.log(
|
|
theme.error`Publish failed. Enter a fresh otp code to retry.`
|
|
);
|
|
otp = await promptForOTP(params);
|
|
// Try publishing package again
|
|
continue;
|
|
}
|
|
}
|
|
|
|
await updateStableVersionNumbers(params);
|
|
await printFollowUpInstructions(params);
|
|
} catch (error) {
|
|
handleError(error);
|
|
}
|
|
};
|
|
|
|
run();
|