109 lines
3.0 KiB
JavaScript
Executable File
109 lines
3.0 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
'use strict';
|
|
|
|
const {exec, spawn} = require('child-process-promise');
|
|
const {join} = require('path');
|
|
const {readFileSync} = require('fs');
|
|
const theme = require('./theme');
|
|
const {getDateStringForCommit, logPromise, printDiff} = require('./utils');
|
|
|
|
const cwd = join(__dirname, '..', '..');
|
|
|
|
const CIRCLE_CI_BUILD = 12707;
|
|
const COMMIT = 'b3d1a81a9';
|
|
const VERSION = '1.2.3';
|
|
|
|
const run = async () => {
|
|
const defaultOptions = {
|
|
cwd,
|
|
env: process.env,
|
|
};
|
|
|
|
try {
|
|
// Start with a known build/revision:
|
|
// https://circleci.com/gh/facebook/react/12707
|
|
let promise = spawn(
|
|
'node',
|
|
[
|
|
'./scripts/release/prepare-release-from-ci.js',
|
|
`--build=${CIRCLE_CI_BUILD}`,
|
|
],
|
|
defaultOptions
|
|
);
|
|
logPromise(
|
|
promise,
|
|
theme`Checking out "next" build {version ${CIRCLE_CI_BUILD}}`
|
|
);
|
|
await promise;
|
|
|
|
const dateString = await getDateStringForCommit(COMMIT);
|
|
|
|
// Upgrade the above build top a known React version.
|
|
// Note that using the --local flag skips NPM checkout.
|
|
// This isn't totally necessary but is useful if we want to test an unpublished "next" build.
|
|
promise = spawn(
|
|
'node',
|
|
[
|
|
'./scripts/release/prepare-release-from-npm.js',
|
|
`--version=0.0.0-${COMMIT}-${dateString}`,
|
|
'--local',
|
|
],
|
|
defaultOptions
|
|
);
|
|
promise.childProcess.stdin.setEncoding('utf-8');
|
|
promise.childProcess.stdout.setEncoding('utf-8');
|
|
promise.childProcess.stdout.on('data', data => {
|
|
if (data.includes('✓ Version for')) {
|
|
// Update all packages to a stable version
|
|
promise.childProcess.stdin.write(VERSION);
|
|
} else if (data.includes('(y/N)')) {
|
|
// Accept all of the confirmation prompts
|
|
promise.childProcess.stdin.write('y');
|
|
}
|
|
});
|
|
logPromise(promise, theme`Preparing stable release {version ${VERSION}}`);
|
|
await promise;
|
|
|
|
const beforeContents = readFileSync(
|
|
join(cwd, 'scripts/release/snapshot-test.snapshot'),
|
|
'utf-8'
|
|
);
|
|
await exec('cp build/temp.diff scripts/release/snapshot-test.snapshot', {
|
|
cwd,
|
|
});
|
|
const afterContents = readFileSync(
|
|
join(cwd, 'scripts/release/snapshot-test.snapshot'),
|
|
'utf-8'
|
|
);
|
|
|
|
if (beforeContents === afterContents) {
|
|
console.log(theme.header`Snapshot test passed.`);
|
|
} else {
|
|
printDiff(
|
|
'scripts/release/snapshot-test.snapshot',
|
|
beforeContents,
|
|
afterContents
|
|
);
|
|
console.log();
|
|
console.error(theme.error('Snapshot test failed!'));
|
|
console.log();
|
|
console.log(
|
|
'If this failure was expected, please update the contents of the snapshot file:'
|
|
);
|
|
console.log(
|
|
theme` {command git add} {path scripts/release/snapshot-test.snapshot}`
|
|
);
|
|
console.log(
|
|
theme` {command git commit -m "Updating release script snapshot file."}`
|
|
);
|
|
process.exit(1);
|
|
}
|
|
} catch (error) {
|
|
console.error(theme.error(error));
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
run();
|