From bfca738a8c1b14c9653d9ed7bc7926ea8b31679d Mon Sep 17 00:00:00 2001 From: Hector Rincon Date: Sun, 14 Mar 2021 19:52:42 -0700 Subject: [PATCH 1/3] Update devtools-extensions build script to reflect changes in local build directory structure --- packages/react-devtools-extensions/build.js | 42 ++++++++++++++++++-- scripts/rollup/build-all-release-channels.js | 11 +++++ 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/packages/react-devtools-extensions/build.js b/packages/react-devtools-extensions/build.js index a38e909dd4630..1ae5b5e408882 100644 --- a/packages/react-devtools-extensions/build.js +++ b/packages/react-devtools-extensions/build.js @@ -5,14 +5,47 @@ const archiver = require('archiver'); const {execSync} = require('child_process'); const {readFileSync, writeFileSync, createWriteStream} = require('fs'); -const {copy, ensureDir, move, remove} = require('fs-extra'); -const {join} = require('path'); +const {copy, ensureDir, move, remove, pathExistsSync} = require('fs-extra'); +const {join, resolve} = require('path'); const {getGitCommit} = require('./utils'); // These files are copied along with Webpack-bundled files // to produce the final web extension const STATIC_FILES = ['icons', 'popups', 'main.html', 'panel.html']; +/** + * Ensures that a local build of the dependencies exist either by downloading + * or running a local build via one of the `react-build-fordevtools*` scripts. + */ +const ensureLocalBuild = async () => { + const buildDir = resolve(__dirname, '..', '..', 'build'); + const nodeModulesDir = join(buildDir, 'node_modules'); + + // TODO: remove this check whenever the CI pipeline is complete. + // See build-all-release-channels.js + const currentBuildDir = resolve( + __dirname, + '..', + '..', + 'build2', + 'oss-experimental', + ); + + if (pathExistsSync(buildDir)) { + return; // all good. + } + + if (pathExistsSync(currentBuildDir)) { + await ensureDir(buildDir); + await copy(currentBuildDir, nodeModulesDir); + return; // all good. + } + + throw Error( + 'Could not find build artifacts in repo root. See README for prerequisites.', + ); +}; + const preProcess = async (destinationPath, tempPath) => { await remove(destinationPath); // Clean up from previously completed builds await remove(tempPath); // Clean up from any previously failed builds @@ -74,13 +107,13 @@ const build = async (tempPath, manifestPath) => { // Pack the extension const archive = archiver('zip', {zlib: {level: 9}}); const zipStream = createWriteStream(join(tempPath, 'ReactDevTools.zip')); - await new Promise((resolve, reject) => { + await new Promise((resolvePromise, reject) => { archive .directory(zipPath, false) .on('error', err => reject(err)) .pipe(zipStream); archive.finalize(); - zipStream.on('close', () => resolve()); + zipStream.on('close', () => resolvePromise()); }); }; @@ -102,6 +135,7 @@ const main = async buildId => { try { const tempPath = join(__dirname, 'build', buildId); + await ensureLocalBuild(); await preProcess(destinationPath, tempPath); await build(tempPath, manifestPath); diff --git a/scripts/rollup/build-all-release-channels.js b/scripts/rollup/build-all-release-channels.js index 279d957475939..fa9ec61ae2106 100644 --- a/scripts/rollup/build-all-release-channels.js +++ b/scripts/rollup/build-all-release-channels.js @@ -144,6 +144,13 @@ function crossDeviceRenameSync(source, destination) { return fse.moveSync(source, destination, {overwrite: true}); } +/* + * Grabs the built packages in ${tmp_build_dir}/node_modules and updates the + * `version` key in their package.json to 0.0.0-${commitHash} for the commit + * you're building. Also updates the dependencies and peerDependencies + * to match this version for all of the 'React' packages + * (packages available in this repo). + */ function updatePackageVersions(modulesDir, version) { const allReactModuleNames = fs.readdirSync('packages'); for (const moduleName of fs.readdirSync(modulesDir)) { @@ -157,12 +164,16 @@ function updatePackageVersions(modulesDir, version) { // Update dependency versions if (packageInfo.dependencies) { + // Check everything under dependencies for (const dep of Object.keys(packageInfo.dependencies)) { + // if it's a react package (available in the current repo), update the version + // TODO: is this too broad? Assumes all of the packages were built. if (allReactModuleNames.includes(dep)) { packageInfo.dependencies[dep] = version; } } } + // Do the same for peerDeps if (packageInfo.peerDependencies) { for (const dep of Object.keys(packageInfo.peerDependencies)) { if (allReactModuleNames.includes(dep)) { From b331bf6a3a0a3533164b19b77469056ac7d7bd81 Mon Sep 17 00:00:00 2001 From: Hector Rincon Date: Sun, 14 Mar 2021 22:09:26 -0700 Subject: [PATCH 2/3] Fetch correct Firefox profile name based on WEB_EXT_FIREFOX env var --- .../firefox/README.md | 2 +- .../react-devtools-extensions/firefox/test.js | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/react-devtools-extensions/firefox/README.md b/packages/react-devtools-extensions/firefox/README.md index c4bbc8d2de6c6..92c763c8bc8e1 100644 --- a/packages/react-devtools-extensions/firefox/README.md +++ b/packages/react-devtools-extensions/firefox/README.md @@ -2,7 +2,7 @@ The source code for this extension has moved to `shells/webextension`. -Modify the source code there and then rebuild this extension by running `node build` from this directory or `yarn run build:extension:firefox` from the root directory. +Modify the source code there and then rebuild this extension by running `node build` from this directory or `yarn run build:firefox` from the root directory. ## Testing in Firefox diff --git a/packages/react-devtools-extensions/firefox/test.js b/packages/react-devtools-extensions/firefox/test.js index 4b0f5f04c7fbb..7f448fc2d44c4 100644 --- a/packages/react-devtools-extensions/firefox/test.js +++ b/packages/react-devtools-extensions/firefox/test.js @@ -10,13 +10,32 @@ const {argv} = require('yargs'); const EXTENSION_PATH = resolve('./firefox/build/unpacked'); const START_URL = argv.url || 'https://reactjs.org/'; +const ffVersion = process.env.WEB_EXT_FIREFOX; + +const getFFProfileName = () => { + // Keys are pulled from https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#--firefox + // and profile names from https://searchfox.org/mozilla-central/source/toolkit/profile/xpcshell/head.js#96 + switch (ffVersion) { + case 'firefox': + return 'default-release'; + case 'beta': + return 'default-beta'; + case 'nightly': + return 'default-nightly'; + case 'firefoxdeveloperedition': + return 'dev-edition-default'; + default: + return 'default'; + } +}; + const main = async () => { const finder = new Finder(); // Use default Firefox profile for testing purposes. // This prevents users from having to re-login-to sites before testing. const findPathPromise = new Promise((resolvePromise, rejectPromise) => { - finder.getPath('default', (error, profile) => { + finder.getPath(getFFProfileName(), (error, profile) => { if (error) { rejectPromise(error); } else { From e6ae3090d35424fd92508baadf5291dbf47a45da Mon Sep 17 00:00:00 2001 From: Brian Vaughn Date: Mon, 15 Mar 2021 09:40:02 -0400 Subject: [PATCH 3/3] Minor variable name nits --- packages/react-devtools-extensions/build.js | 4 ++-- packages/react-devtools-extensions/firefox/test.js | 12 ++++++------ scripts/rollup/build-all-release-channels.js | 3 --- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/packages/react-devtools-extensions/build.js b/packages/react-devtools-extensions/build.js index 1ae5b5e408882..76b7aee68cb36 100644 --- a/packages/react-devtools-extensions/build.js +++ b/packages/react-devtools-extensions/build.js @@ -107,10 +107,10 @@ const build = async (tempPath, manifestPath) => { // Pack the extension const archive = archiver('zip', {zlib: {level: 9}}); const zipStream = createWriteStream(join(tempPath, 'ReactDevTools.zip')); - await new Promise((resolvePromise, reject) => { + await new Promise((resolvePromise, rejectPromise) => { archive .directory(zipPath, false) - .on('error', err => reject(err)) + .on('error', err => rejectPromise(err)) .pipe(zipStream); archive.finalize(); zipStream.on('close', () => resolvePromise()); diff --git a/packages/react-devtools-extensions/firefox/test.js b/packages/react-devtools-extensions/firefox/test.js index 7f448fc2d44c4..b2e9e86e6ec01 100644 --- a/packages/react-devtools-extensions/firefox/test.js +++ b/packages/react-devtools-extensions/firefox/test.js @@ -10,12 +10,12 @@ const {argv} = require('yargs'); const EXTENSION_PATH = resolve('./firefox/build/unpacked'); const START_URL = argv.url || 'https://reactjs.org/'; -const ffVersion = process.env.WEB_EXT_FIREFOX; +const firefoxVersion = process.env.WEB_EXT_FIREFOX; -const getFFProfileName = () => { +const getFirefoxProfileName = () => { // Keys are pulled from https://extensionworkshop.com/documentation/develop/web-ext-command-reference/#--firefox // and profile names from https://searchfox.org/mozilla-central/source/toolkit/profile/xpcshell/head.js#96 - switch (ffVersion) { + switch (firefoxVersion) { case 'firefox': return 'default-release'; case 'beta': @@ -25,6 +25,8 @@ const getFFProfileName = () => { case 'firefoxdeveloperedition': return 'dev-edition-default'; default: + // Fall back to using the default Firefox profile for testing purposes. + // This prevents users from having to re-login-to sites before testing. return 'default'; } }; @@ -32,10 +34,8 @@ const getFFProfileName = () => { const main = async () => { const finder = new Finder(); - // Use default Firefox profile for testing purposes. - // This prevents users from having to re-login-to sites before testing. const findPathPromise = new Promise((resolvePromise, rejectPromise) => { - finder.getPath(getFFProfileName(), (error, profile) => { + finder.getPath(getFirefoxProfileName(), (error, profile) => { if (error) { rejectPromise(error); } else { diff --git a/scripts/rollup/build-all-release-channels.js b/scripts/rollup/build-all-release-channels.js index fa9ec61ae2106..19eec730706bf 100644 --- a/scripts/rollup/build-all-release-channels.js +++ b/scripts/rollup/build-all-release-channels.js @@ -162,9 +162,7 @@ function updatePackageVersions(modulesDir, version) { // Update version packageInfo.version = version; - // Update dependency versions if (packageInfo.dependencies) { - // Check everything under dependencies for (const dep of Object.keys(packageInfo.dependencies)) { // if it's a react package (available in the current repo), update the version // TODO: is this too broad? Assumes all of the packages were built. @@ -173,7 +171,6 @@ function updatePackageVersions(modulesDir, version) { } } } - // Do the same for peerDeps if (packageInfo.peerDependencies) { for (const dep of Object.keys(packageInfo.peerDependencies)) { if (allReactModuleNames.includes(dep)) {