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

@@ -211,3 +211,47 @@ export async function publishPackages({
}
}
}
export async function resolvePluginDir(name: string): Promise<string> {
const pluginDir =
(await resolvePluginByNameOrId(name)) ?? (await resolvePluginByPath(name));
if (!pluginDir) {
throw new Error(`Cannot find plugin by name or dir ${name}`);
} else {
return pluginDir;
}
}
async function resolvePluginByNameOrId(
pluginName: string,
): Promise<string | undefined> {
const workspaces = await getWorkspaces();
const pluginDir = workspaces.packages
.filter((p) => p.isPlugin)
.find(
(p) =>
p.json.name === pluginName ||
p.json.id === pluginName ||
p.json.name === `flipper-plugin-${pluginName}`,
)?.dir;
return pluginDir;
}
async function resolvePluginByPath(dir: string): Promise<string | undefined> {
if (path.isAbsolute(dir)) {
if (await fs.pathExists(dir)) {
return dir;
} else {
return undefined;
}
}
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;
}
return undefined;
}