Bundle all plugins script

Summary: New script which bundles all plugins. It is faster to bundle them all in one script rather than call "build-plugin" for each of them. The new script will be used in CI to catch regressions when some plugins cannot be bundled into standalone packages.

Reviewed By: passy

Differential Revision: D26918103

fbshipit-source-id: dbc5c4cd706e8d585718a198dbd7ae9ffd988e28
This commit is contained in:
Anton Nikolaev
2021-03-10 08:06:19 -08:00
committed by Facebook GitHub Bot
parent c065760d15
commit 58b2daea02
2 changed files with 56 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {pluginsDir} from './paths';
import path from 'path';
import {runBuild} from 'flipper-pkg-lib';
import {getWorkspaces} from './workspaces';
async function bundleAllPlugins() {
const plugins = await getWorkspaces().then((workspaces) =>
workspaces.packages.filter((x) => x.isPlugin),
);
const errors = new Map<string, any>();
for (const plugin of plugins) {
const relativeDir = path.relative(pluginsDir, plugin.dir);
console.log(`Bundling "${relativeDir}"`);
console.time(`Finished bundling "${relativeDir}"`);
try {
await runBuild(plugin.dir, false);
} catch (err) {
console.log(`Failed to bundle "${relativeDir}": ${err.message}`);
errors.set(relativeDir, err);
} finally {
console.timeEnd(`Finished bundling "${relativeDir}"`);
}
}
if (errors.size) {
console.error('---');
for (const [plugin, error] of errors) {
console.error(`Failed to bundle ${plugin}`);
console.error(error);
console.error('---');
}
throw new Error(
`Failed to bundle ${errors.size} plugins: ${[...errors.keys()].join(
', ',
)}`,
);
}
}
bundleAllPlugins()
.then(() => {
process.exit(0);
})
.catch((err: any) => {
console.error(err);
process.exit(1);
});