Performance improvements for "build-plugin" task
Summary: Few improvements for "build-plugin" task which together with Sandcastle command changes (D26872427) helps to build all plugins in CI ~30% faster if most of them has not changed (which is usually the case): 1) compute package checksum in the same script to not call additional yarn scripts for each plugin 2) avoid packaging plugin if it's checksum has not changed since last release Reviewed By: mweststrate Differential Revision: D26872253 fbshipit-source-id: 968102d32a1550ea7503f1169f0ef2863296383f
This commit is contained in:
committed by
Facebook GitHub Bot
parent
5df0fd6e52
commit
baeb8ba5be
@@ -11,6 +11,7 @@ import Metro from 'metro';
|
||||
import getWatchFolders from './getWatchFolders';
|
||||
import path from 'path';
|
||||
import fs from 'fs-extra';
|
||||
import {getInstalledPluginDetails} from 'flipper-plugin-lib';
|
||||
|
||||
let metroDir: string | undefined;
|
||||
const metroDirPromise = getMetroDir().then((dir) => (metroDir = dir));
|
||||
@@ -30,19 +31,29 @@ async function getMetroDir() {
|
||||
return __dirname;
|
||||
}
|
||||
|
||||
export default async function runBuild(
|
||||
inputDirectory: string,
|
||||
entry: string,
|
||||
out: string,
|
||||
dev: boolean,
|
||||
) {
|
||||
export default async function bundlePlugin(pluginDir: string, dev: boolean) {
|
||||
const stat = await fs.lstat(pluginDir);
|
||||
if (!stat.isDirectory()) {
|
||||
throw new Error(`Plugin source ${pluginDir} is not a directory.`);
|
||||
}
|
||||
const packageJsonPath = path.join(pluginDir, 'package.json');
|
||||
if (!(await fs.pathExists(packageJsonPath))) {
|
||||
throw new Error(
|
||||
`package.json is not found in plugin source directory ${pluginDir}.`,
|
||||
);
|
||||
}
|
||||
const plugin = await getInstalledPluginDetails(pluginDir);
|
||||
const entry = plugin.source;
|
||||
const out = path.resolve(pluginDir, plugin.main);
|
||||
await fs.ensureDir(path.dirname(out));
|
||||
|
||||
const sourceMapUrl = null; // inline source map
|
||||
const baseConfig = await Metro.loadConfig();
|
||||
const config = Object.assign({}, baseConfig, {
|
||||
reporter: {update: () => {}},
|
||||
projectRoot: inputDirectory,
|
||||
projectRoot: pluginDir,
|
||||
watchFolders: [metroDir || (await metroDirPromise)].concat(
|
||||
await getWatchFolders(inputDirectory),
|
||||
await getWatchFolders(pluginDir),
|
||||
),
|
||||
serializer: {
|
||||
...baseConfig.serializer,
|
||||
|
||||
Reference in New Issue
Block a user