diff --git a/.circleci/config.yml b/.circleci/config.yml index 31d52c7e6a6..d0c2bd99181 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -238,7 +238,7 @@ jobs: - run: name: Install nested packages from Yarn cache command: yarn --frozen-lockfile --cache-folder ~/.cache/yarn - - run: ./scripts/circleci/download_devtools_regression_build.js << parameters.version >> + - run: ./scripts/circleci/download_devtools_regression_build.js << parameters.version >> --replaceBuild - run: node ./scripts/jest/jest-cli.js --build --project devtools --release-channel=experimental --reactVersion << parameters.version >> --ci yarn_lint_build: diff --git a/scripts/circleci/download_devtools_regression_build.js b/scripts/circleci/download_devtools_regression_build.js index d8b7c88a0a7..01ef377094c 100755 --- a/scripts/circleci/download_devtools_regression_build.js +++ b/scripts/circleci/download_devtools_regression_build.js @@ -6,6 +6,7 @@ const {exec} = require('child-process-promise'); const chalk = require('chalk'); const {join} = require('path'); const semver = require('semver'); +const yargs = require('yargs'); const fs = require('fs'); const INSTALL_PACKAGES = ['react-dom', 'react', 'react-test-renderer']; @@ -16,7 +17,10 @@ const ROOT_PATH = join(__dirname, '..', '..'); const buildPath = join(ROOT_PATH, `build`, 'oss-experimental'); const regressionBuildPath = join(ROOT_PATH, REGRESSION_FOLDER); +const argv = yargs(process.argv.slice(2)).argv; + const version = process.argv[2]; +const shouldReplaceBuild = !!argv.replaceBuild; async function downloadRegressionBuild() { console.log(chalk.bold.white(`Downloading React v${version}\n`)); @@ -39,6 +43,12 @@ async function downloadRegressionBuild() { `npm install --prefix ${REGRESSION_FOLDER} ${downloadPackagesStr}` ); + // If we shouldn't replace the build folder, we can stop here now + // before we modify anything + if (!shouldReplaceBuild) { + return; + } + // Remove all the packages that we downloaded in the original build folder // so we can move the modules from the regression build over const removePackagesStr = INSTALL_PACKAGES.reduce( @@ -102,12 +112,20 @@ async function downloadRegressionBuild() { async function main() { try { + if (!version) { + console.log(chalk.red('Must specify React version to download')); + return; + } await downloadRegressionBuild(); } catch (e) { console.log(chalk.red(e)); } finally { - console.log(chalk.bold.white(`Removing regression build`)); - await exec(`rm -r ${regressionBuildPath}`); + // We shouldn't remove the regression-build folder unless we're using + // it to replace the build folder + if (shouldReplaceBuild) { + console.log(chalk.bold.white(`Removing regression build`)); + await exec(`rm -r ${regressionBuildPath}`); + } } }