react/scripts/release/publish-commands/print-post-publish-summary.js
Brian Vaughn 8a0285fb43
Release script follow-up (#11482)
* Add a timeout before querying npm right after publish

* Conditionally log some post publish steps

* Print ready-to-paste 'yarn add' instructions for CRA prerelease testing
2017-11-08 19:59:26 +00:00

79 lines
2.2 KiB
JavaScript

#!/usr/bin/env node
'use strict';
const chalk = require('chalk');
const semver = require('semver');
const {getUnexecutedCommands} = require('../utils');
const printSteps = steps => {
return steps
.filter(Boolean) // Remove no-op steps
.map((step, index) => `${index + 1}. ${step}`)
.join('\n');
};
const printSections = sections => {
return sections
.map((section, index) => {
const [title, ...steps] = section;
return chalk`
{bold.underline Step ${index + 1}: ${title}}
${printSteps(steps)}
`.replace(/\n +/g, '\n');
})
.join('');
};
module.exports = ({dry, version}) => {
const isPrerelease = semver.prerelease(version);
const sections = [];
// Certain follow-up steps are for stable releases only.
if (!isPrerelease) {
sections.push([
'Create GitHub release',
chalk`Open new release page: {blue.bold https://github.com/facebook/react/releases/new}`,
chalk`Choose {bold ${version}} from the dropdown menu`,
chalk`Paste the new release notes from {yellow.bold CHANGELOG.md}`,
chalk`Attach all files in {yellow.bold build/dist/*.js} except {yellow.bold react-art.*} to the release.`,
chalk`Press {bold "Publish release"}!`,
]);
sections.push([
'Update the version on reactjs.org',
chalk`Git clone (or update) {blue.bold https://github.com/reactjs/reactjs.org}`,
chalk`Open the {bold.yellow src/site-constants.js} file`,
chalk`Update the {bold version} value to {bold ${version}}`,
chalk`Open a Pull Request to {bold master}`,
]);
}
sections.push([
'Test the new release',
chalk`Install CRA: {bold npm i -g create-react-app}`,
chalk`Create a test application: {bold create-react-app myapp && cd myapp}`,
isPrerelease
? chalk`Install the pre-release versions: {bold yarn add react@next react-dom@next}`
: null,
chalk`Run the app: {bold yarn start}`,
]);
sections.push([
'Notify the DOM team',
chalk`Notify DOM team members: {bold @nhunzaker @jquense @aweary}`,
]);
console.log(
chalk`
{green.bold Publish successful!}
${getUnexecutedCommands()}
Next there are a couple of manual steps:
${printSections(sections)}
`.replace(/\n +/g, '\n')
);
};