"yarn build-plugin" command added

Summary: Added "build-plugin" command. Can be used like this: `yarn build-plugin fresco` which produces package to 'sonar/dist/plugins/fresco.tgz'

Reviewed By: mweststrate

Differential Revision: D22160253

fbshipit-source-id: 48b202984b0f515bf253b595be1f59953a9ce411
This commit is contained in:
Anton Nikolaev
2020-06-22 08:14:29 -07:00
committed by Facebook GitHub Bot
parent 4219df6a93
commit 666032fa46
2 changed files with 56 additions and 0 deletions

View File

@@ -233,6 +233,8 @@
"build:dev": "cross-env NODE_ENV=development ./ts-node scripts/build-release.ts $@", "build:dev": "cross-env NODE_ENV=development ./ts-node scripts/build-release.ts $@",
"prebuild-headless": "yarn build:pkg", "prebuild-headless": "yarn build:pkg",
"build-headless": "cross-env NODE_ENV=production ./ts-node scripts/build-headless.ts $@", "build-headless": "cross-env NODE_ENV=production ./ts-node scripts/build-headless.ts $@",
"prebuild-plugin": "yarn build:pkg",
"build-plugin": "./ts-node scripts/build-plugin.ts",
"open-dist": "open ../dist/mac/Flipper.app --args --launcher=false --inspect=9229", "open-dist": "open ../dist/mac/Flipper.app --args --launcher=false --inspect=9229",
"fix": "eslint . --fix --ext .js,.ts,.tsx", "fix": "eslint . --fix --ext .js,.ts,.tsx",
"pretest": "yarn build:pkg", "pretest": "yarn build:pkg",

View File

@@ -0,0 +1,54 @@
/**
* 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, rootDir, distDir} from './paths';
import path from 'path';
import fs from 'fs-extra';
import {execSync} from 'child_process';
(async function buildPlugin() {
const pluginDirArg = process.argv[2];
const pluginDir = await resolveAbsolutePluginDir(pluginDirArg);
if (path.relative(pluginsDir, pluginDir).includes('..')) {
throw new Error(
`Plugin dir ${pluginDir} is not inside plugins directory ${pluginsDir}`,
);
}
const outputFile = path.join(
distDir,
'plugins',
path.relative(pluginsDir, pluginDir) + '.tgz',
);
await fs.ensureDir(path.dirname(outputFile));
await fs.remove(outputFile);
const bundleCmd = `yarn flipper-pkg bundle "${pluginDir}" --production`;
const packCmd = `yarn pack --cwd "${pluginDir}" --filename ${outputFile}`;
execSync(bundleCmd, {cwd: rootDir, stdio: 'inherit'});
execSync(packCmd, {cwd: rootDir, stdio: 'inherit'});
})();
async function resolveAbsolutePluginDir(dir: string): Promise<string> {
if (path.isAbsolute(dir)) {
return dir;
}
const resolvedFromPluginDir = path.resolve(pluginsDir, dir);
if (await fs.pathExists(resolvedFromPluginDir)) {
return resolvedFromPluginDir;
}
const resolvedFromCwd = path.resolve(process.cwd(), dir);
if (await fs.pathExists(resolvedFromCwd)) {
return resolvedFromCwd;
}
throw new Error(
`Cannot resolve plugin dir path. Paths checked: ${[
resolvedFromPluginDir,
resolvedFromCwd,
]}`,
);
}