From 49ed390eb7d2e0322e250a3abc9520d5c46d39a5 Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 11 Mar 2020 14:55:16 +0100 Subject: [PATCH] add copy assets to cli --- .../cli/src/commands/plugin/copyAssets.ts | 34 +++++++++++++++++++ packages/cli/src/index.ts | 7 ++++ .../templates/default-plugin/package.json.hbs | 2 +- plugins/home-page/package.json | 2 +- 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 packages/cli/src/commands/plugin/copyAssets.ts diff --git a/packages/cli/src/commands/plugin/copyAssets.ts b/packages/cli/src/commands/plugin/copyAssets.ts new file mode 100644 index 0000000000..b85acd7d43 --- /dev/null +++ b/packages/cli/src/commands/plugin/copyAssets.ts @@ -0,0 +1,34 @@ +import chalk from 'chalk'; +import fs from 'fs-extra'; +import recursive from 'recursive-readdir'; +import path from 'path'; + +const copyStaticAssets = async (source: string, destination: string) => { + const assetFiles = await recursive(source, [ + '**/*.tsx', + '**/*.ts', + '**/*.js', + ]); + assetFiles.forEach(file => { + const fileToBeCopied = file.replace(source, destination); + const dirForFileToBeCopied = fileToBeCopied.replace( + path.basename(fileToBeCopied), + '', + ); + fs.ensureDirSync(dirForFileToBeCopied); + fs.copyFileSync(file, file.replace(source, destination)); + }); +}; + +export default async () => { + try { + const pluginRoot = fs.realpathSync(process.cwd()); + const pluginSource = path.resolve(pluginRoot, 'src'); + const pluginDist = path.resolve(pluginRoot, 'dist', 'cjs'); + await copyStaticAssets(pluginSource, pluginDist); + process.exit(0); + } catch (error) { + process.stderr.write(`${chalk.red(error.message)}\n`); + process.exit(1); + } +}; diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index f41b533d54..cf0a91d613 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -19,6 +19,7 @@ import chalk from 'chalk'; import fs from 'fs'; import createPluginCommand from './commands/createPlugin'; import watch from './commands/watch-deps'; +import pluginCopyAssets from './commands/plugin/copyAssets'; import pluginBuild from './commands/plugin/build'; import pluginLint from './commands/plugin/lint'; import pluginServe from './commands/plugin/serve'; @@ -44,6 +45,12 @@ const main = (argv: string[]) => { .description('Build a plugin') .action(pluginBuild); + program + .command('plugin:copyAssets') + .option('--watch', 'Enable watch mode') + .description('Copy assets for a plugin') + .action(pluginCopyAssets); + program .command('plugin:lint') .option('--fix', 'Attempt to automatically fix violations') diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 2b0f66ea2f..f78b112cf1 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -6,7 +6,7 @@ "license": "Apache-2.0", "private": false, "scripts": { - "build": "backstage-cli plugin:build", + "build": "backstage-cli plugin:build && backstage-cli plugin:copyAssets", "lint": "backstage-cli plugin:lint", "test": "backstage-cli plugin:test" }, diff --git a/plugins/home-page/package.json b/plugins/home-page/package.json index a76b0a5291..f7f0c9c76c 100644 --- a/plugins/home-page/package.json +++ b/plugins/home-page/package.json @@ -19,7 +19,7 @@ "@material-ui/icons": "^4.9.1" }, "scripts": { - "build": "backstage-cli plugin:build", + "build": "backstage-cli plugin:copyAssets && backstage-cli plugin:build", "lint": "backstage-cli plugin:lint", "test": "backstage-cli plugin:test" },