Script for resolving plugin directory by its package name

Summary:
Changed "build-plugin" script to allow triggering release by plugin name (required to enable triggering releases by button in Marketplace):
1) Added new script to resolve plugin dir by name
2) Allow passing either plugin dir or name to "build-plugin" script

Reviewed By: passy

Differential Revision: D22354643

fbshipit-source-id: b7aca57acefc81ca0b6d9c7f359f63d8f0599e39
This commit is contained in:
Anton Nikolaev
2020-07-02 02:47:06 -07:00
committed by Facebook GitHub Bot
parent b11082d229
commit 228d09d572
4 changed files with 72 additions and 32 deletions

View File

@@ -11,20 +11,19 @@ import {pluginsDir, rootDir, distDir} from './paths';
import path from 'path';
import fs from 'fs-extra';
import {execSync} from 'child_process';
import {resolvePluginDir} from './workspaces';
(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',
);
const pluginName = process.argv[2];
const pluginDir = await resolvePluginDir(pluginName);
const outputFileArg = process.argv.length > 3 ? process.argv[3] : null;
const outputFile = outputFileArg
? path.resolve(outputFileArg)
: 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`;
@@ -32,23 +31,3 @@ import {execSync} from 'child_process';
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,
]}`,
);
}