From a43d29eb9d307d89ad0a38ce426d2ba22df32a32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Sat, 18 Jul 2020 17:02:09 +0200 Subject: [PATCH 1/8] refactor(cli): move create-app into his own package --- packages/cli/src/index.ts | 11 -- packages/create-app/.eslintrc.js | 7 + packages/create-app/README.md | 22 +++ packages/create-app/bin/backstage-create-app | 34 ++++ packages/create-app/package.json | 44 +++++ .../src}/createApp.ts | 8 +- packages/create-app/src/index.ts | 69 ++++++++ packages/create-app/src/lib/errors.ts | 46 ++++++ packages/create-app/src/lib/paths.ts | 150 ++++++++++++++++++ packages/create-app/src/lib/tasks.ts | 105 ++++++++++++ packages/create-app/src/lib/version.ts | 26 +++ 11 files changed, 507 insertions(+), 15 deletions(-) create mode 100644 packages/create-app/.eslintrc.js create mode 100644 packages/create-app/README.md create mode 100755 packages/create-app/bin/backstage-create-app create mode 100644 packages/create-app/package.json rename packages/{cli/src/commands/create-app => create-app/src}/createApp.ts (95%) create mode 100644 packages/create-app/src/index.ts create mode 100644 packages/create-app/src/lib/errors.ts create mode 100644 packages/create-app/src/lib/paths.ts create mode 100644 packages/create-app/src/lib/tasks.ts create mode 100644 packages/create-app/src/lib/version.ts diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 7521549d96..3123cda613 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -22,17 +22,6 @@ import { version } from './lib/version'; const main = (argv: string[]) => { program.name('backstage-cli').version(version); - program - .command('create-app') - .description('Creates a new app in a new directory') - .option( - '--skip-install', - 'Skip the install and builds steps after creating the app', - ) - .action( - lazyAction(() => import('./commands/create-app/createApp'), 'default'), - ); - program .command('app:build') .description('Build an app for a production release') diff --git a/packages/create-app/.eslintrc.js b/packages/create-app/.eslintrc.js new file mode 100644 index 0000000000..69bec6cd2a --- /dev/null +++ b/packages/create-app/.eslintrc.js @@ -0,0 +1,7 @@ +module.exports = { + extends: [require.resolve('@backstage/cli/config/eslint.backend')], + ignorePatterns: ['templates/**'], + rules: { + 'no-console': 0, + }, +}; diff --git a/packages/create-app/README.md b/packages/create-app/README.md new file mode 100644 index 0000000000..da53c6dd89 --- /dev/null +++ b/packages/create-app/README.md @@ -0,0 +1,22 @@ +# @backstage/create-app + +This package provides a CLI for creating apps. + +## Installation + +Install the package via npm or yarn: + +```sh +$ npm install --save @backstage/create-app +``` + +or + +```sh +$ yarn add @backstage/create-app +``` + +## Documentation + +- [Backstage Readme](https://github.com/spotify/backstage/blob/master/README.md) +- [Backstage Documentation](https://github.com/spotify/backstage/blob/master/docs/README.md) diff --git a/packages/create-app/bin/backstage-create-app b/packages/create-app/bin/backstage-create-app new file mode 100755 index 0000000000..c9baf5d57c --- /dev/null +++ b/packages/create-app/bin/backstage-create-app @@ -0,0 +1,34 @@ +#!/usr/bin/env node +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const path = require('path'); + +// Figure out whether we're running inside the backstage repo or as an installed dependency +const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); + +if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { + require('../src'); +} else { + require('ts-node').register({ + transpileOnly: true, + compilerOptions: { + module: 'CommonJS', + }, + }); + + require('../src'); +} diff --git a/packages/create-app/package.json b/packages/create-app/package.json new file mode 100644 index 0000000000..4458daaedf --- /dev/null +++ b/packages/create-app/package.json @@ -0,0 +1,44 @@ +{ + "name": "@backstage/create-app", + "description": "Create app package for Backstage", + "version": "0.1.1", + "private": false, + "publishConfig": { + "access": "public" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/spotify/backstage", + "directory": "packages/create-app" + }, + "keywords": [ + "backstage" + ], + "license": "Apache-2.0", + "main": "src/index.ts", + "bin": { + "backstage-create-app": "bin/backstage-create-app" + }, + "dependencies": { + "commander": "^4.1.1", + "chalk": "^4.0.0", + "fs-extra": "^9.0.0", + "react-dev-utils": "^10.2.1", + "inquirer": "^7.0.4", + "recursive-readdir": "^2.2.2", + "ora": "^4.0.3" + }, + "devDependencies": { + "@types/fs-extra": "^9.0.1", + "@types/react-dev-utils": "^9.0.4", + "@types/inquirer": "^6.5.0", + "@types/recursive-readdir": "^2.2.0", + "@types/ora": "^3.2.0", + "ts-node": "^8.6.2" + }, + "nodemonConfig": { + "watch": "./src", + "ext": "ts" + } +} diff --git a/packages/cli/src/commands/create-app/createApp.ts b/packages/create-app/src/createApp.ts similarity index 95% rename from packages/cli/src/commands/create-app/createApp.ts rename to packages/create-app/src/createApp.ts index b3ddcd3109..ebdd7583da 100644 --- a/packages/cli/src/commands/create-app/createApp.ts +++ b/packages/create-app/src/createApp.ts @@ -22,9 +22,9 @@ import inquirer, { Answers, Question } from 'inquirer'; import { exec as execCb } from 'child_process'; import { resolve as resolvePath } from 'path'; import os from 'os'; -import { Task, templatingTask } from '../../lib/tasks'; -import { paths } from '../../lib/paths'; -import { version } from '../../lib/version'; +import { Task, templatingTask } from './lib/tasks'; +import { paths } from './lib/paths'; +import { version } from './lib/version'; const exec = promisify(execCb); @@ -116,7 +116,7 @@ export default async (cmd: Command): Promise => { answers.dbTypePG = answers.dbType === 'PostgreSQL'; answers.dbTypeSqlite = answers.dbType === 'SQLite'; - const templateDir = paths.resolveOwn('templates/default-app'); + const templateDir = paths.resolveOwnRoot('packages/cli/templates/default-app'); const tempDir = resolvePath(os.tmpdir(), answers.name); const appDir = resolvePath(paths.targetDir, answers.name); diff --git a/packages/create-app/src/index.ts b/packages/create-app/src/index.ts new file mode 100644 index 0000000000..2c2106bec2 --- /dev/null +++ b/packages/create-app/src/index.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import program from 'commander'; +import chalk from 'chalk'; +import { exitWithError } from './lib/errors'; +import { version } from './lib/version'; + +const main = (argv: string[]) => { + program.name('backstage-create-app').version(version); + + program + .description('Creates a new app in a new directory') + .option( + '--skip-install', + 'Skip the install and builds steps after creating the app', + ) + .action( + lazyAction(() => import('./createApp'), 'default'), + ); + + if (!process.argv.slice(2).length) { + program.outputHelp(chalk.yellow); + } + + program.parse(argv); +}; + +// Wraps an action function so that it always exits and handles errors +function lazyAction( + actionRequireFunc: () => Promise< + { [name in Export]: (...args: T) => Promise } + >, + exportName: Export, +): (...args: T) => Promise { + return async (...args: T) => { + try { + const module = await actionRequireFunc(); + const actionFunc = module[exportName]; + await actionFunc(...args); + process.exit(0); + } catch (error) { + exitWithError(error); + } + }; +} + +process.on('unhandledRejection', rejection => { + if (rejection instanceof Error) { + exitWithError(rejection); + } else { + exitWithError(new Error(`Unknown rejection: '${rejection}'`)); + } +}); + +main(process.argv); diff --git a/packages/create-app/src/lib/errors.ts b/packages/create-app/src/lib/errors.ts new file mode 100644 index 0000000000..a1eab4c9e5 --- /dev/null +++ b/packages/create-app/src/lib/errors.ts @@ -0,0 +1,46 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import chalk from 'chalk'; + +export class CustomError extends Error { + get name(): string { + return this.constructor.name; + } +} + +export class ExitCodeError extends CustomError { + readonly code: number; + + constructor(code: number, command?: string) { + if (command) { + super(`Command '${command}' exited with code ${code}`); + } else { + super(`Child exited with code ${code}`); + } + this.code = code; + } +} + +export function exitWithError(error: Error): never { + if (error instanceof ExitCodeError) { + process.stderr.write(`\n${chalk.red(error.message)}\n\n`); + process.exit(error.code); + } else { + process.stderr.write(`\n${chalk.red(`${error}`)}\n\n`); + process.exit(1); + } +} diff --git a/packages/create-app/src/lib/paths.ts b/packages/create-app/src/lib/paths.ts new file mode 100644 index 0000000000..be3f3dcee8 --- /dev/null +++ b/packages/create-app/src/lib/paths.ts @@ -0,0 +1,150 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from 'fs-extra'; +import { dirname, resolve as resolvePath } from 'path'; + +export type ResolveFunc = (...paths: string[]) => string; + +// Common paths and resolve functions used by the cli. +// Currently assumes it is being executed within a monorepo. +export type Paths = { + // Root dir of the cli itself, containing package.json + ownDir: string; + + // Monorepo root dir of the cli itself. Only accessible when running inside Backstage repo. + ownRoot: string; + + // The location of the app that the cli is being executed in + targetDir: string; + + // The monorepo root package of the app that the cli is being executed in. + targetRoot: string; + + // Resolve a path relative to own repo + resolveOwn: ResolveFunc; + + // Resolve a path relative to own monorepo root. Only accessible when running inside Backstage repo. + resolveOwnRoot: ResolveFunc; + + // Resolve a path relative to the app + resolveTarget: ResolveFunc; + + // Resolve a path relative to the app repo root + resolveTargetRoot: ResolveFunc; +}; + +// Looks for a package.json that has name: "root" to identify the root of the monorepo +export function findRootPath(topPath: string): string { + let path = topPath; + + // Some sanity check to avoid infinite loop + for (let i = 0; i < 1000; i++) { + const packagePath = resolvePath(path, 'package.json'); + const exists = fs.pathExistsSync(packagePath); + if (exists) { + try { + const data = fs.readJsonSync(packagePath); + if (data.name === 'root' || data.name.includes('backstage-e2e')) { + return path; + } + } catch (error) { + throw new Error( + `Failed to parse package.json file while searching for root, ${error}`, + ); + } + } + + const newPath = dirname(path); + if (newPath === path) { + throw new Error( + `No package.json with name "root" found as a parent of ${topPath}`, + ); + } + path = newPath; + } + + throw new Error( + `Iteration limit reached when searching for root package.json at ${topPath}`, + ); +} + +// Finds the root of the cli package itself +export function findOwnDir() { + // Known relative locations of package in dist/dev + const pathDist = '..'; + const pathDev = '../..'; + + // Check the closest dir first + const pkgInDist = resolvePath(__dirname, pathDist, 'package.json'); + const isDist = fs.pathExistsSync(pkgInDist); + + const path = isDist ? pathDist : pathDev; + return resolvePath(__dirname, path); +} + +// Finds the root of the monorepo that the cli exists in. Only accessible when running inside Backstage repo. +export function findOwnRootPath(ownDir: string) { + const isLocal = fs.pathExistsSync(resolvePath(ownDir, 'src')); + if (!isLocal) { + throw new Error( + 'Tried to access monorepo package root dir outside of Backstage repository', + ); + } + + return resolvePath(ownDir, '../..'); +} + +export function findPaths(): Paths { + const ownDir = findOwnDir(); + const targetDir = fs.realpathSync(process.cwd()); + + // Lazy load this as it will throw an error if we're not inside the Backstage repo. + let ownRoot = ''; + const getOwnRoot = () => { + if (!ownRoot) { + ownRoot = findOwnRootPath(ownDir); + } + return ownRoot; + }; + + // We're not always running in a monorepo, so we lazy init this to only crash commands + // that require a monorepo when we're not in one. + let targetRoot = ''; + const getTargetRoot = () => { + if (!targetRoot) { + targetRoot = findRootPath(targetDir); + } + return targetRoot; + }; + + return { + ownDir, + get ownRoot() { + return getOwnRoot(); + }, + targetDir, + get targetRoot() { + return getTargetRoot(); + }, + resolveOwn: (...paths) => resolvePath(ownDir, ...paths), + resolveOwnRoot: (...paths) => resolvePath(getOwnRoot(), ...paths), + resolveTarget: (...paths) => resolvePath(targetDir, ...paths), + resolveTargetRoot: (...paths) => resolvePath(getTargetRoot(), ...paths), + }; +} + +export const paths = findPaths(); diff --git a/packages/create-app/src/lib/tasks.ts b/packages/create-app/src/lib/tasks.ts new file mode 100644 index 0000000000..0753301b78 --- /dev/null +++ b/packages/create-app/src/lib/tasks.ts @@ -0,0 +1,105 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import chalk from 'chalk'; +import fs from 'fs-extra'; +import handlebars from 'handlebars'; +import ora from 'ora'; +import { basename, dirname } from 'path'; +import recursive from 'recursive-readdir'; + +const TASK_NAME_MAX_LENGTH = 14; + +export class Task { + static log(name: string = '') { + process.stdout.write(`${chalk.green(name)}\n`); + } + + static error(message: string = '') { + process.stdout.write(`\n${chalk.red(message)}\n\n`); + } + + static section(name: string) { + const title = chalk.green(`${name}:`); + process.stdout.write(`\n ${title}\n`); + } + + static exit(code: number = 0) { + process.exit(code); + } + + static async forItem( + task: string, + item: string, + taskFunc: () => Promise, + ): Promise { + const paddedTask = chalk.green(task.padEnd(TASK_NAME_MAX_LENGTH)); + + const spinner = ora({ + prefixText: chalk.green(` ${paddedTask}${chalk.cyan(item)}`), + spinner: 'arc', + color: 'green', + }).start(); + + try { + await taskFunc(); + spinner.succeed(); + } catch (error) { + spinner.fail(); + throw error; + } + } +} + +export async function templatingTask( + templateDir: string, + destinationDir: string, + context: any, +) { + const files = await recursive(templateDir).catch(error => { + throw new Error(`Failed to read template directory: ${error.message}`); + }); + + for (const file of files) { + const destinationFile = file.replace(templateDir, destinationDir); + await fs.ensureDir(dirname(destinationFile)); + + if (file.endsWith('.hbs')) { + await Task.forItem('templating', basename(file), async () => { + const destination = destinationFile.replace(/\.hbs$/, ''); + + const template = await fs.readFile(file); + const compiled = handlebars.compile(template.toString()); + const contents = compiled({ name: basename(destination), ...context }); + + await fs.writeFile(destination, contents).catch(error => { + throw new Error( + `Failed to create file: ${destination}: ${error.message}`, + ); + }); + }); + } else { + await Task.forItem('copying', basename(file), async () => { + await fs.copyFile(file, destinationFile).catch(error => { + const destination = destinationFile; + throw new Error( + `Failed to copy file to ${destination} : ${error.message}`, + ); + }); + }); + } + } +} diff --git a/packages/create-app/src/lib/version.ts b/packages/create-app/src/lib/version.ts new file mode 100644 index 0000000000..24734b87cc --- /dev/null +++ b/packages/create-app/src/lib/version.ts @@ -0,0 +1,26 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import fs from 'fs-extra'; +import { paths } from './paths'; + +export function findVersion() { + const pkgContent = fs.readFileSync(paths.resolveOwn('package.json'), 'utf8'); + return JSON.parse(pkgContent).version; +} + +export const version = findVersion(); +export const isDev = fs.pathExistsSync(paths.resolveOwn('src')); From 5eb1f2d69f2d60a5024fe42d5926d41290fb7242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Sun, 26 Jul 2020 16:32:42 +0200 Subject: [PATCH 2/8] refactor(create-app): remove useless extras --- packages/create-app/.eslintrc.js | 1 - packages/create-app/README.md | 1 + packages/create-app/package.json | 4 ---- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/create-app/.eslintrc.js b/packages/create-app/.eslintrc.js index 69bec6cd2a..503c048748 100644 --- a/packages/create-app/.eslintrc.js +++ b/packages/create-app/.eslintrc.js @@ -1,6 +1,5 @@ module.exports = { extends: [require.resolve('@backstage/cli/config/eslint.backend')], - ignorePatterns: ['templates/**'], rules: { 'no-console': 0, }, diff --git a/packages/create-app/README.md b/packages/create-app/README.md index da53c6dd89..09b881e73f 100644 --- a/packages/create-app/README.md +++ b/packages/create-app/README.md @@ -1,6 +1,7 @@ # @backstage/create-app This package provides a CLI for creating apps. +You can use the flag `--skip-install` to skip the install. ## Installation diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 4458daaedf..9ba2dc76d8 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -36,9 +36,5 @@ "@types/recursive-readdir": "^2.2.0", "@types/ora": "^3.2.0", "ts-node": "^8.6.2" - }, - "nodemonConfig": { - "watch": "./src", - "ext": "ts" } } From 489a57b0c7b92b4afd4fa1f18ead3d3b9b02e9be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Thu, 30 Jul 2020 01:08:07 +0200 Subject: [PATCH 3/8] feat(create-app): requested changes --- docs/getting-started/create-an-app.md | 2 +- packages/cli/e2e-test/cli-e2e-test.js | 3 +- .../default-app/plugins/welcome/src/plugin.ts | 9 ------ packages/create-app/README.md | 10 ++----- packages/create-app/package.json | 2 +- packages/create-app/src/createApp.ts | 2 +- packages/create-app/src/index.ts | 24 ++-------------- .../templates/default-app/.eslintrc.js | 0 .../templates/default-app/README.md | 0 .../templates/default-app/app-config.yaml | 0 .../templates/default-app/lerna.json | 0 .../templates/default-app/package.json.hbs | 0 .../default-app/packages/app/.eslintrc.js | 0 .../default-app/packages/app/cypress.json | 0 .../packages/app/cypress/.eslintrc.json | 0 .../packages/app/cypress/integration/app.js | 0 .../default-app/packages/app/package.json.hbs | 0 .../app/public/android-chrome-192x192.png | Bin .../packages/app/public/apple-touch-icon.png | Bin .../packages/app/public/favicon-16x16.png | Bin .../packages/app/public/favicon-32x32.png | Bin .../packages/app/public/favicon.ico | Bin .../packages/app/public/index.html | 0 .../packages/app/public/manifest.json | 0 .../packages/app/public/robots.txt | 0 .../packages/app/public/safari-pinned-tab.svg | 0 .../default-app/packages/app/src/App.test.tsx | 0 .../default-app/packages/app/src/App.tsx | 0 .../default-app/packages/app/src/index.tsx | 0 .../default-app/packages/app/src/plugins.ts | 0 .../packages/app/src/setupTests.ts | 0 .../default-app/plugins/welcome/.eslintrc.js | 0 .../default-app/plugins/welcome/README.md | 0 .../default-app/plugins/welcome/dev/index.tsx | 0 .../plugins/welcome/package.json.hbs | 0 .../welcome/src/components/Timer/Timer.tsx | 0 .../welcome/src/components/Timer/index.ts | 0 .../WelcomePage/WelcomePage.test.tsx | 0 .../components/WelcomePage/WelcomePage.tsx | 0 .../src/components/WelcomePage/index.ts | 0 .../default-app/plugins/welcome/src/index.ts | 0 .../plugins/welcome/src/plugin.test.ts | 0 .../default-app/plugins/welcome/src/plugin.ts | 24 ++++++++++++++++ .../plugins/welcome/src/setupTests.ts | 0 .../templates/default-app/tsconfig.json | 0 .../create-app/templates/serve_index.html | 27 ++++++++++++++++++ 46 files changed, 59 insertions(+), 44 deletions(-) delete mode 100644 packages/cli/templates/default-app/plugins/welcome/src/plugin.ts rename packages/{cli => create-app}/templates/default-app/.eslintrc.js (100%) rename packages/{cli => create-app}/templates/default-app/README.md (100%) rename packages/{cli => create-app}/templates/default-app/app-config.yaml (100%) rename packages/{cli => create-app}/templates/default-app/lerna.json (100%) rename packages/{cli => create-app}/templates/default-app/package.json.hbs (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/.eslintrc.js (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/cypress.json (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/cypress/.eslintrc.json (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/cypress/integration/app.js (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/package.json.hbs (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/android-chrome-192x192.png (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/apple-touch-icon.png (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/favicon-16x16.png (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/favicon-32x32.png (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/favicon.ico (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/index.html (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/manifest.json (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/robots.txt (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/public/safari-pinned-tab.svg (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/src/App.test.tsx (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/src/App.tsx (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/src/index.tsx (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/src/plugins.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/app/src/setupTests.ts (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/.eslintrc.js (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/README.md (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/dev/index.tsx (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/package.json.hbs (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/components/Timer/Timer.tsx (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/components/Timer/index.ts (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.test.tsx (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.tsx (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/components/WelcomePage/index.ts (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/index.ts (100%) rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/plugin.test.ts (100%) create mode 100644 packages/create-app/templates/default-app/plugins/welcome/src/plugin.ts rename packages/{cli => create-app}/templates/default-app/plugins/welcome/src/setupTests.ts (100%) rename packages/{cli => create-app}/templates/default-app/tsconfig.json (100%) create mode 100644 packages/create-app/templates/serve_index.html diff --git a/docs/getting-started/create-an-app.md b/docs/getting-started/create-an-app.md index b69ff1508c..ab5e71ad60 100644 --- a/docs/getting-started/create-an-app.md +++ b/docs/getting-started/create-an-app.md @@ -15,7 +15,7 @@ To create a Backstage app, you will need to have With `npx`: ```bash -npx @backstage/cli create-app +npx @backstage/create-app ``` This will create a new Backstage App inside the current folder. The name of the diff --git a/packages/cli/e2e-test/cli-e2e-test.js b/packages/cli/e2e-test/cli-e2e-test.js index 206ea25ccd..e3829a65e6 100644 --- a/packages/cli/e2e-test/cli-e2e-test.js +++ b/packages/cli/e2e-test/cli-e2e-test.js @@ -107,8 +107,7 @@ async function createApp(appName, isPostgres, workspaceDir, rootDir) { const child = spawnPiped( [ 'node', - resolvePath(workspaceDir, 'packages/cli/bin/backstage-cli'), - 'create-app', + resolvePath(workspaceDir, 'packages/cli/bin/backstage-create-app'), '--skip-install', ], { diff --git a/packages/cli/templates/default-app/plugins/welcome/src/plugin.ts b/packages/cli/templates/default-app/plugins/welcome/src/plugin.ts deleted file mode 100644 index a65fad5348..0000000000 --- a/packages/cli/templates/default-app/plugins/welcome/src/plugin.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createPlugin } from '@backstage/core'; -import WelcomePage from './components/WelcomePage'; - -export const plugin = createPlugin({ - id: 'welcome', - register({ router }) { - router.registerRoute('/', WelcomePage); - }, -}); diff --git a/packages/create-app/README.md b/packages/create-app/README.md index 09b881e73f..b5f231a326 100644 --- a/packages/create-app/README.md +++ b/packages/create-app/README.md @@ -5,16 +5,10 @@ You can use the flag `--skip-install` to skip the install. ## Installation -Install the package via npm or yarn: +With `npx`: ```sh -$ npm install --save @backstage/create-app -``` - -or - -```sh -$ yarn add @backstage/create-app +$ npx @backstage/create-app ``` ## Documentation diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 9ba2dc76d8..74017fe53d 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "Create app package for Backstage", - "version": "0.1.1", + "version": "0.1.1-alpha.12", "private": false, "publishConfig": { "access": "public" diff --git a/packages/create-app/src/createApp.ts b/packages/create-app/src/createApp.ts index ebdd7583da..b4564b1ff8 100644 --- a/packages/create-app/src/createApp.ts +++ b/packages/create-app/src/createApp.ts @@ -116,7 +116,7 @@ export default async (cmd: Command): Promise => { answers.dbTypePG = answers.dbType === 'PostgreSQL'; answers.dbTypeSqlite = answers.dbType === 'SQLite'; - const templateDir = paths.resolveOwnRoot('packages/cli/templates/default-app'); + const templateDir = paths.resolveOwn('templates/default-app'); const tempDir = resolvePath(os.tmpdir(), answers.name); const appDir = resolvePath(paths.targetDir, answers.name); diff --git a/packages/create-app/src/index.ts b/packages/create-app/src/index.ts index 2c2106bec2..93c10c8c99 100644 --- a/packages/create-app/src/index.ts +++ b/packages/create-app/src/index.ts @@ -18,6 +18,7 @@ import program from 'commander'; import chalk from 'chalk'; import { exitWithError } from './lib/errors'; import { version } from './lib/version'; +import createApp from './createApp'; const main = (argv: string[]) => { program.name('backstage-create-app').version(version); @@ -28,9 +29,7 @@ const main = (argv: string[]) => { '--skip-install', 'Skip the install and builds steps after creating the app', ) - .action( - lazyAction(() => import('./createApp'), 'default'), - ); + .action(createApp) if (!process.argv.slice(2).length) { program.outputHelp(chalk.yellow); @@ -39,25 +38,6 @@ const main = (argv: string[]) => { program.parse(argv); }; -// Wraps an action function so that it always exits and handles errors -function lazyAction( - actionRequireFunc: () => Promise< - { [name in Export]: (...args: T) => Promise } - >, - exportName: Export, -): (...args: T) => Promise { - return async (...args: T) => { - try { - const module = await actionRequireFunc(); - const actionFunc = module[exportName]; - await actionFunc(...args); - process.exit(0); - } catch (error) { - exitWithError(error); - } - }; -} - process.on('unhandledRejection', rejection => { if (rejection instanceof Error) { exitWithError(rejection); diff --git a/packages/cli/templates/default-app/.eslintrc.js b/packages/create-app/templates/default-app/.eslintrc.js similarity index 100% rename from packages/cli/templates/default-app/.eslintrc.js rename to packages/create-app/templates/default-app/.eslintrc.js diff --git a/packages/cli/templates/default-app/README.md b/packages/create-app/templates/default-app/README.md similarity index 100% rename from packages/cli/templates/default-app/README.md rename to packages/create-app/templates/default-app/README.md diff --git a/packages/cli/templates/default-app/app-config.yaml b/packages/create-app/templates/default-app/app-config.yaml similarity index 100% rename from packages/cli/templates/default-app/app-config.yaml rename to packages/create-app/templates/default-app/app-config.yaml diff --git a/packages/cli/templates/default-app/lerna.json b/packages/create-app/templates/default-app/lerna.json similarity index 100% rename from packages/cli/templates/default-app/lerna.json rename to packages/create-app/templates/default-app/lerna.json diff --git a/packages/cli/templates/default-app/package.json.hbs b/packages/create-app/templates/default-app/package.json.hbs similarity index 100% rename from packages/cli/templates/default-app/package.json.hbs rename to packages/create-app/templates/default-app/package.json.hbs diff --git a/packages/cli/templates/default-app/packages/app/.eslintrc.js b/packages/create-app/templates/default-app/packages/app/.eslintrc.js similarity index 100% rename from packages/cli/templates/default-app/packages/app/.eslintrc.js rename to packages/create-app/templates/default-app/packages/app/.eslintrc.js diff --git a/packages/cli/templates/default-app/packages/app/cypress.json b/packages/create-app/templates/default-app/packages/app/cypress.json similarity index 100% rename from packages/cli/templates/default-app/packages/app/cypress.json rename to packages/create-app/templates/default-app/packages/app/cypress.json diff --git a/packages/cli/templates/default-app/packages/app/cypress/.eslintrc.json b/packages/create-app/templates/default-app/packages/app/cypress/.eslintrc.json similarity index 100% rename from packages/cli/templates/default-app/packages/app/cypress/.eslintrc.json rename to packages/create-app/templates/default-app/packages/app/cypress/.eslintrc.json diff --git a/packages/cli/templates/default-app/packages/app/cypress/integration/app.js b/packages/create-app/templates/default-app/packages/app/cypress/integration/app.js similarity index 100% rename from packages/cli/templates/default-app/packages/app/cypress/integration/app.js rename to packages/create-app/templates/default-app/packages/app/cypress/integration/app.js diff --git a/packages/cli/templates/default-app/packages/app/package.json.hbs b/packages/create-app/templates/default-app/packages/app/package.json.hbs similarity index 100% rename from packages/cli/templates/default-app/packages/app/package.json.hbs rename to packages/create-app/templates/default-app/packages/app/package.json.hbs diff --git a/packages/cli/templates/default-app/packages/app/public/android-chrome-192x192.png b/packages/create-app/templates/default-app/packages/app/public/android-chrome-192x192.png similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/android-chrome-192x192.png rename to packages/create-app/templates/default-app/packages/app/public/android-chrome-192x192.png diff --git a/packages/cli/templates/default-app/packages/app/public/apple-touch-icon.png b/packages/create-app/templates/default-app/packages/app/public/apple-touch-icon.png similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/apple-touch-icon.png rename to packages/create-app/templates/default-app/packages/app/public/apple-touch-icon.png diff --git a/packages/cli/templates/default-app/packages/app/public/favicon-16x16.png b/packages/create-app/templates/default-app/packages/app/public/favicon-16x16.png similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/favicon-16x16.png rename to packages/create-app/templates/default-app/packages/app/public/favicon-16x16.png diff --git a/packages/cli/templates/default-app/packages/app/public/favicon-32x32.png b/packages/create-app/templates/default-app/packages/app/public/favicon-32x32.png similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/favicon-32x32.png rename to packages/create-app/templates/default-app/packages/app/public/favicon-32x32.png diff --git a/packages/cli/templates/default-app/packages/app/public/favicon.ico b/packages/create-app/templates/default-app/packages/app/public/favicon.ico similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/favicon.ico rename to packages/create-app/templates/default-app/packages/app/public/favicon.ico diff --git a/packages/cli/templates/default-app/packages/app/public/index.html b/packages/create-app/templates/default-app/packages/app/public/index.html similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/index.html rename to packages/create-app/templates/default-app/packages/app/public/index.html diff --git a/packages/cli/templates/default-app/packages/app/public/manifest.json b/packages/create-app/templates/default-app/packages/app/public/manifest.json similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/manifest.json rename to packages/create-app/templates/default-app/packages/app/public/manifest.json diff --git a/packages/cli/templates/default-app/packages/app/public/robots.txt b/packages/create-app/templates/default-app/packages/app/public/robots.txt similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/robots.txt rename to packages/create-app/templates/default-app/packages/app/public/robots.txt diff --git a/packages/cli/templates/default-app/packages/app/public/safari-pinned-tab.svg b/packages/create-app/templates/default-app/packages/app/public/safari-pinned-tab.svg similarity index 100% rename from packages/cli/templates/default-app/packages/app/public/safari-pinned-tab.svg rename to packages/create-app/templates/default-app/packages/app/public/safari-pinned-tab.svg diff --git a/packages/cli/templates/default-app/packages/app/src/App.test.tsx b/packages/create-app/templates/default-app/packages/app/src/App.test.tsx similarity index 100% rename from packages/cli/templates/default-app/packages/app/src/App.test.tsx rename to packages/create-app/templates/default-app/packages/app/src/App.test.tsx diff --git a/packages/cli/templates/default-app/packages/app/src/App.tsx b/packages/create-app/templates/default-app/packages/app/src/App.tsx similarity index 100% rename from packages/cli/templates/default-app/packages/app/src/App.tsx rename to packages/create-app/templates/default-app/packages/app/src/App.tsx diff --git a/packages/cli/templates/default-app/packages/app/src/index.tsx b/packages/create-app/templates/default-app/packages/app/src/index.tsx similarity index 100% rename from packages/cli/templates/default-app/packages/app/src/index.tsx rename to packages/create-app/templates/default-app/packages/app/src/index.tsx diff --git a/packages/cli/templates/default-app/packages/app/src/plugins.ts b/packages/create-app/templates/default-app/packages/app/src/plugins.ts similarity index 100% rename from packages/cli/templates/default-app/packages/app/src/plugins.ts rename to packages/create-app/templates/default-app/packages/app/src/plugins.ts diff --git a/packages/cli/templates/default-app/packages/app/src/setupTests.ts b/packages/create-app/templates/default-app/packages/app/src/setupTests.ts similarity index 100% rename from packages/cli/templates/default-app/packages/app/src/setupTests.ts rename to packages/create-app/templates/default-app/packages/app/src/setupTests.ts diff --git a/packages/cli/templates/default-app/plugins/welcome/.eslintrc.js b/packages/create-app/templates/default-app/plugins/welcome/.eslintrc.js similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/.eslintrc.js rename to packages/create-app/templates/default-app/plugins/welcome/.eslintrc.js diff --git a/packages/cli/templates/default-app/plugins/welcome/README.md b/packages/create-app/templates/default-app/plugins/welcome/README.md similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/README.md rename to packages/create-app/templates/default-app/plugins/welcome/README.md diff --git a/packages/cli/templates/default-app/plugins/welcome/dev/index.tsx b/packages/create-app/templates/default-app/plugins/welcome/dev/index.tsx similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/dev/index.tsx rename to packages/create-app/templates/default-app/plugins/welcome/dev/index.tsx diff --git a/packages/cli/templates/default-app/plugins/welcome/package.json.hbs b/packages/create-app/templates/default-app/plugins/welcome/package.json.hbs similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/package.json.hbs rename to packages/create-app/templates/default-app/plugins/welcome/package.json.hbs diff --git a/packages/cli/templates/default-app/plugins/welcome/src/components/Timer/Timer.tsx b/packages/create-app/templates/default-app/plugins/welcome/src/components/Timer/Timer.tsx similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/components/Timer/Timer.tsx rename to packages/create-app/templates/default-app/plugins/welcome/src/components/Timer/Timer.tsx diff --git a/packages/cli/templates/default-app/plugins/welcome/src/components/Timer/index.ts b/packages/create-app/templates/default-app/plugins/welcome/src/components/Timer/index.ts similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/components/Timer/index.ts rename to packages/create-app/templates/default-app/plugins/welcome/src/components/Timer/index.ts diff --git a/packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.test.tsx b/packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.test.tsx similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.test.tsx rename to packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.test.tsx diff --git a/packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.tsx b/packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.tsx similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.tsx rename to packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/WelcomePage.tsx diff --git a/packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/index.ts b/packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/index.ts similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/components/WelcomePage/index.ts rename to packages/create-app/templates/default-app/plugins/welcome/src/components/WelcomePage/index.ts diff --git a/packages/cli/templates/default-app/plugins/welcome/src/index.ts b/packages/create-app/templates/default-app/plugins/welcome/src/index.ts similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/index.ts rename to packages/create-app/templates/default-app/plugins/welcome/src/index.ts diff --git a/packages/cli/templates/default-app/plugins/welcome/src/plugin.test.ts b/packages/create-app/templates/default-app/plugins/welcome/src/plugin.test.ts similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/plugin.test.ts rename to packages/create-app/templates/default-app/plugins/welcome/src/plugin.test.ts diff --git a/packages/create-app/templates/default-app/plugins/welcome/src/plugin.ts b/packages/create-app/templates/default-app/plugins/welcome/src/plugin.ts new file mode 100644 index 0000000000..3121e982b7 --- /dev/null +++ b/packages/create-app/templates/default-app/plugins/welcome/src/plugin.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Spotify AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { createPlugin } from '@backstage/core'; +import WelcomePage from './components/WelcomePage'; + +export const plugin = createPlugin({ + id: 'welcome', + register({ router }) { + router.registerRoute('/', WelcomePage); + }, +}); diff --git a/packages/cli/templates/default-app/plugins/welcome/src/setupTests.ts b/packages/create-app/templates/default-app/plugins/welcome/src/setupTests.ts similarity index 100% rename from packages/cli/templates/default-app/plugins/welcome/src/setupTests.ts rename to packages/create-app/templates/default-app/plugins/welcome/src/setupTests.ts diff --git a/packages/cli/templates/default-app/tsconfig.json b/packages/create-app/templates/default-app/tsconfig.json similarity index 100% rename from packages/cli/templates/default-app/tsconfig.json rename to packages/create-app/templates/default-app/tsconfig.json diff --git a/packages/create-app/templates/serve_index.html b/packages/create-app/templates/serve_index.html new file mode 100644 index 0000000000..d7aebb7f4b --- /dev/null +++ b/packages/create-app/templates/serve_index.html @@ -0,0 +1,27 @@ + + + + + + + + Backstage + + + +
+ + + From 7bedd6f2a016c9b1cdb353b05fd5c29cf93f2ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Thu, 30 Jul 2020 09:50:29 +0200 Subject: [PATCH 4/8] fix(cli): e2e tests createApp path --- packages/cli/e2e-test/cli-e2e-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/e2e-test/cli-e2e-test.js b/packages/cli/e2e-test/cli-e2e-test.js index e3829a65e6..0a03e65bdd 100644 --- a/packages/cli/e2e-test/cli-e2e-test.js +++ b/packages/cli/e2e-test/cli-e2e-test.js @@ -107,7 +107,7 @@ async function createApp(appName, isPostgres, workspaceDir, rootDir) { const child = spawnPiped( [ 'node', - resolvePath(workspaceDir, 'packages/cli/bin/backstage-create-app'), + resolvePath(workspaceDir, 'packages/create-app/bin/backstage-create-app'), '--skip-install', ], { From 730d1b21bed43dd926d3bfc541fc49bdbd78fff3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Fri, 31 Jul 2020 10:34:00 +0200 Subject: [PATCH 5/8] fix(cli): add create-app import to e2e tests --- packages/cli/e2e-test/cli-e2e-test.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/cli/e2e-test/cli-e2e-test.js b/packages/cli/e2e-test/cli-e2e-test.js index 0a03e65bdd..e9635de6bb 100644 --- a/packages/cli/e2e-test/cli-e2e-test.js +++ b/packages/cli/e2e-test/cli-e2e-test.js @@ -69,6 +69,7 @@ async function buildDistWorkspace(workspaceName, rootDir) { 'build-workspace', workspaceDir, '@backstage/cli', + '@backstage/create-app', '@backstage/core', '@backstage/dev-utils', '@backstage/test-utils', From 5e78cc108265b33ed08c660048bfc2e1eda0e40f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Sun, 2 Aug 2020 13:46:28 +0200 Subject: [PATCH 6/8] fix(create-app): update entrypoint --- packages/create-app/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 74017fe53d..390c9cf2cb 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -16,7 +16,7 @@ "backstage" ], "license": "Apache-2.0", - "main": "src/index.ts", + "main": "dist/index.cjs.js", "bin": { "backstage-create-app": "bin/backstage-create-app" }, From d273c74985cd6ba15b775bd765bcbf5f3e244c4b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 2 Aug 2020 16:28:27 +0200 Subject: [PATCH 7/8] create-app: packaging fixes --- packages/create-app/bin/backstage-create-app | 2 +- packages/create-app/package.json | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/create-app/bin/backstage-create-app b/packages/create-app/bin/backstage-create-app index c9baf5d57c..2b445ca9af 100755 --- a/packages/create-app/bin/backstage-create-app +++ b/packages/create-app/bin/backstage-create-app @@ -21,7 +21,7 @@ const path = require('path'); const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { - require('../src'); + require('..'); } else { require('ts-node').register({ transpileOnly: true, diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 390c9cf2cb..282a1f692f 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -20,6 +20,9 @@ "bin": { "backstage-create-app": "bin/backstage-create-app" }, + "scripts": { + "build": "backstage-cli build --outputs cjs" + }, "dependencies": { "commander": "^4.1.1", "chalk": "^4.0.0", @@ -36,5 +39,10 @@ "@types/recursive-readdir": "^2.2.0", "@types/ora": "^3.2.0", "ts-node": "^8.6.2" - } + }, + "files": [ + "bin", + "dist", + "templates" + ] } From b5a6d82d5cb188b6b044516901eb5550e92c09cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20DOREAU?= Date: Sun, 2 Aug 2020 20:29:48 +0200 Subject: [PATCH 8/8] feat(create-app): add missing template backend package --- .../templates/default-app/packages/backend/.eslintrc.js | 0 .../templates/default-app/packages/backend/Dockerfile | 0 .../templates/default-app/packages/backend/README.md | 0 .../templates/default-app/packages/backend/package.json.hbs | 0 .../templates/default-app/packages/backend/src/index.test.ts | 0 .../templates/default-app/packages/backend/src/index.ts.hbs | 0 .../templates/default-app/packages/backend/src/plugins/auth.ts | 0 .../templates/default-app/packages/backend/src/plugins/catalog.ts | 0 .../default-app/packages/backend/src/plugins/identity.ts | 0 .../templates/default-app/packages/backend/src/plugins/proxy.ts | 0 .../default-app/packages/backend/src/plugins/scaffolder.ts | 0 .../default-app/packages/backend/src/plugins/techdocs.ts | 0 .../templates/default-app/packages/backend/src/types.ts | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename packages/{cli => create-app}/templates/default-app/packages/backend/.eslintrc.js (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/Dockerfile (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/README.md (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/package.json.hbs (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/index.test.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/index.ts.hbs (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/auth.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/catalog.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/identity.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/proxy.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/scaffolder.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/plugins/techdocs.ts (100%) rename packages/{cli => create-app}/templates/default-app/packages/backend/src/types.ts (100%) diff --git a/packages/cli/templates/default-app/packages/backend/.eslintrc.js b/packages/create-app/templates/default-app/packages/backend/.eslintrc.js similarity index 100% rename from packages/cli/templates/default-app/packages/backend/.eslintrc.js rename to packages/create-app/templates/default-app/packages/backend/.eslintrc.js diff --git a/packages/cli/templates/default-app/packages/backend/Dockerfile b/packages/create-app/templates/default-app/packages/backend/Dockerfile similarity index 100% rename from packages/cli/templates/default-app/packages/backend/Dockerfile rename to packages/create-app/templates/default-app/packages/backend/Dockerfile diff --git a/packages/cli/templates/default-app/packages/backend/README.md b/packages/create-app/templates/default-app/packages/backend/README.md similarity index 100% rename from packages/cli/templates/default-app/packages/backend/README.md rename to packages/create-app/templates/default-app/packages/backend/README.md diff --git a/packages/cli/templates/default-app/packages/backend/package.json.hbs b/packages/create-app/templates/default-app/packages/backend/package.json.hbs similarity index 100% rename from packages/cli/templates/default-app/packages/backend/package.json.hbs rename to packages/create-app/templates/default-app/packages/backend/package.json.hbs diff --git a/packages/cli/templates/default-app/packages/backend/src/index.test.ts b/packages/create-app/templates/default-app/packages/backend/src/index.test.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/index.test.ts rename to packages/create-app/templates/default-app/packages/backend/src/index.test.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/index.ts.hbs b/packages/create-app/templates/default-app/packages/backend/src/index.ts.hbs similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/index.ts.hbs rename to packages/create-app/templates/default-app/packages/backend/src/index.ts.hbs diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/auth.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/auth.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/auth.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/catalog.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/catalog.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/catalog.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/catalog.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/identity.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/identity.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/identity.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/identity.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/proxy.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/proxy.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/proxy.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/scaffolder.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/scaffolder.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/scaffolder.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/plugins/techdocs.ts b/packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/plugins/techdocs.ts rename to packages/create-app/templates/default-app/packages/backend/src/plugins/techdocs.ts diff --git a/packages/cli/templates/default-app/packages/backend/src/types.ts b/packages/create-app/templates/default-app/packages/backend/src/types.ts similarity index 100% rename from packages/cli/templates/default-app/packages/backend/src/types.ts rename to packages/create-app/templates/default-app/packages/backend/src/types.ts