From 49ed390eb7d2e0322e250a3abc9520d5c46d39a5 Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 11 Mar 2020 14:55:16 +0100 Subject: [PATCH 1/5] 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" }, From 13b8fe81f249129cd6e9e3823012c4af2fd8402f Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 11 Mar 2020 15:09:37 +0100 Subject: [PATCH 2/5] add module declaration for asset files --- packages/cli/src/commands/plugin/assets.d.ts | 80 ++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 packages/cli/src/commands/plugin/assets.d.ts diff --git a/packages/cli/src/commands/plugin/assets.d.ts b/packages/cli/src/commands/plugin/assets.d.ts new file mode 100644 index 0000000000..34ba07f75c --- /dev/null +++ b/packages/cli/src/commands/plugin/assets.d.ts @@ -0,0 +1,80 @@ +/// +/// +/// + +declare namespace NodeJS { + interface ProcessEnv { + readonly NODE_ENV: 'development' | 'production' | 'test'; + } +} + +declare module '*.bmp' { + const src: string; + export default src; +} + +declare module '*.gif' { + const src: string; + export default src; +} + +declare module '*.jpg' { + const src: string; + export default src; +} + +declare module '*.jpeg' { + const src: string; + export default src; +} + +declare module '*.png' { + const src: string; + export default src; +} + +declare module '*.webp' { + const src: string; + export default src; +} + +declare module '*.svg' { + import * as React from 'react'; + + export const ReactComponent: React.FunctionComponent & { title?: string }>; + + const src: string; + export default src; +} + +declare module '*.css' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.scss' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.sass' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.module.css' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.module.scss' { + const classes: { readonly [key: string]: string }; + export default classes; +} + +declare module '*.module.sass' { + const classes: { readonly [key: string]: string }; + export default classes; +} From d4f4c6c978438013517831880eca98ea28c84c58 Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 11 Mar 2020 15:11:50 +0100 Subject: [PATCH 3/5] remove watch mode options for copyAssets command --- packages/cli/src/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index cf0a91d613..5d355fb572 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -47,7 +47,6 @@ const main = (argv: string[]) => { program .command('plugin:copyAssets') - .option('--watch', 'Enable watch mode') .description('Copy assets for a plugin') .action(pluginCopyAssets); From b65160dcf55b17dc00572587d4f6db1eace70697 Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Wed, 11 Mar 2020 15:12:49 +0100 Subject: [PATCH 4/5] switch order for plugin build script --- packages/cli/templates/default-plugin/package.json.hbs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index f78b112cf1..5fff3184ae 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 && backstage-cli plugin:copyAssets", + "build": "backstage-cli plugin:copyAssets && backstage-cli plugin:build", "lint": "backstage-cli plugin:lint", "test": "backstage-cli plugin:test" }, From 78321d27181e197a5eec7e7166b60793d8626afe Mon Sep 17 00:00:00 2001 From: Raghunandan Date: Fri, 13 Mar 2020 09:39:15 +0100 Subject: [PATCH 5/5] move copy assets to build step --- packages/cli/src/commands/plugin/build.ts | 21 ++++++++++++ .../cli/src/commands/plugin/copyAssets.ts | 34 ------------------- packages/cli/src/index.ts | 6 ---- .../templates/default-plugin/package.json.hbs | 2 +- plugins/home-page/package.json | 2 +- 5 files changed, 23 insertions(+), 42 deletions(-) delete mode 100644 packages/cli/src/commands/plugin/copyAssets.ts diff --git a/packages/cli/src/commands/plugin/build.ts b/packages/cli/src/commands/plugin/build.ts index 0d45a583a3..6607b0507a 100644 --- a/packages/cli/src/commands/plugin/build.ts +++ b/packages/cli/src/commands/plugin/build.ts @@ -17,6 +17,9 @@ import chalk from 'chalk'; import { Command } from 'commander'; import { spawnSync } from 'child_process'; +import fs from 'fs-extra'; +import recursive from 'recursive-readdir'; +import path from 'path'; export default async (cmd: Command) => { const args = [ @@ -33,6 +36,7 @@ export default async (cmd: Command) => { } try { + await copyStaticAssets(); const result = spawnSync('tsc', args, { stdio: 'inherit' }); if (result.error) { throw result.error; @@ -43,3 +47,20 @@ export default async (cmd: Command) => { process.exit(1); } }; + +const copyStaticAssets = async () => { + const pluginRoot = fs.realpathSync(process.cwd()); + const source = path.resolve(pluginRoot, 'src'); + const destination = path.resolve(pluginRoot, 'dist', 'cjs'); + const assetFiles = await recursive(source, [ + '**/*.tsx', + '**/*.ts', + '**/*.js', + ]); + assetFiles.forEach(file => { + const fileToBeCopied = file.replace(source, destination); + const dirForFileToBeCopied = path.dirname(fileToBeCopied); + fs.ensureDirSync(dirForFileToBeCopied); + fs.copyFileSync(file, file.replace(source, destination).toString()); + }); +}; diff --git a/packages/cli/src/commands/plugin/copyAssets.ts b/packages/cli/src/commands/plugin/copyAssets.ts deleted file mode 100644 index b85acd7d43..0000000000 --- a/packages/cli/src/commands/plugin/copyAssets.ts +++ /dev/null @@ -1,34 +0,0 @@ -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 5d355fb572..f41b533d54 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -19,7 +19,6 @@ 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'; @@ -45,11 +44,6 @@ const main = (argv: string[]) => { .description('Build a plugin') .action(pluginBuild); - program - .command('plugin:copyAssets') - .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 5fff3184ae..2b0f66ea2f 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:copyAssets && backstage-cli plugin:build", + "build": "backstage-cli plugin:build", "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 f7f0c9c76c..a76b0a5291 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:copyAssets && backstage-cli plugin:build", + "build": "backstage-cli plugin:build", "lint": "backstage-cli plugin:lint", "test": "backstage-cli plugin:test" },