Merge pull request #8245 from backstage/mob/deprecate-cli-comamnds

Deprecate some CLI commands and options
This commit is contained in:
Patrik Oldsberg
2021-12-01 17:15:10 +01:00
committed by GitHub
5 changed files with 25 additions and 107 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': minor
---
Remove the `backend:build-image` command from the CLI and added more deprecation warnings to other deprecated fields like `--lax` and `remove-plugin`
+9
View File
@@ -20,8 +20,17 @@ import { buildBundle } from '../../lib/bundler';
import { parseParallel, PARALLEL_ENV_VAR } from '../../lib/parallel';
import { loadCliConfig } from '../../lib/config';
import { paths } from '../../lib/paths';
import chalk from 'chalk';
export default async (cmd: Command) => {
if (cmd.lax) {
console.warn(
chalk.yellow(
`[DEPRECATED] - The --lax option is deprecated and will be removed in the future. Please open an issue towards https://github.com/backstage/backstage that describes your use-case if you need the flag to stay around.`,
),
);
}
const { name } = await fs.readJson(paths.resolveTarget('package.json'));
await buildBundle({
entry: 'src/index',
@@ -1,95 +0,0 @@
/*
* Copyright 2020 The Backstage Authors
*
* 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 { Command } from 'commander';
import { yellow } from 'chalk';
import fs from 'fs-extra';
import { join as joinPath, relative as relativePath } from 'path';
import { createDistWorkspace } from '../../lib/packager';
import { paths } from '../../lib/paths';
import { run } from '../../lib/run';
import { parseParallel, PARALLEL_ENV_VAR } from '../../lib/parallel';
const PKG_PATH = 'package.json';
export default async (cmd: Command) => {
// Skip the preparation steps if we're being asked for help
if (cmd.args.includes('--help')) {
await run('docker', ['image', 'build', '--help']);
return;
}
console.warn(
yellow(`
The backend:build-image command is deprecated and will be removed in the future.
Please use the backend:bundle command instead along with your own Docker setup.
https://backstage.io/docs/deployment/docker
`),
);
const pkgPath = paths.resolveTarget(PKG_PATH);
const pkg = await fs.readJson(pkgPath);
const appConfigs = await findAppConfigs();
const npmrc = (await fs.pathExists(paths.resolveTargetRoot('.npmrc')))
? ['.npmrc']
: [];
const tempDistWorkspace = await createDistWorkspace([pkg.name], {
buildDependencies: Boolean(cmd.build),
files: [
'package.json',
'yarn.lock',
...npmrc,
...appConfigs,
{ src: paths.resolveTarget('Dockerfile'), dest: 'Dockerfile' },
],
parallel: parseParallel(process.env[PARALLEL_ENV_VAR]),
skeleton: 'skeleton.tar',
});
console.log(`Dist workspace ready at ${tempDistWorkspace}`);
// all args are forwarded to docker build
await run('docker', ['image', 'build', '.', ...cmd.args], {
cwd: tempDistWorkspace,
});
await fs.remove(tempDistWorkspace);
};
/**
* Find all config files to copy into the image
*/
async function findAppConfigs(): Promise<string[]> {
const files = [];
for (const name of await fs.readdir(paths.targetRoot)) {
if (name.startsWith('app-config.') && name.endsWith('.yaml')) {
files.push(name);
}
}
if (paths.targetRoot !== paths.targetDir) {
const dirPath = relativePath(paths.targetRoot, paths.targetDir);
for (const name of await fs.readdir(paths.targetDir)) {
if (name.startsWith('app-config.') && name.endsWith('.yaml')) {
files.push(joinPath(dirPath, name));
}
}
}
return files;
}
+5 -12
View File
@@ -30,7 +30,10 @@ export function registerCommands(program: CommanderStatic) {
.command('app:build')
.description('Build an app for a production release')
.option('--stats', 'Write bundle stats to output directory')
.option('--lax', 'Do not require environment variables to be set')
.option(
'--lax',
'[DEPRECATED] - Do not require environment variables to be set',
)
.option(...configOption)
.action(lazy(() => import('./app/build').then(m => m.default)));
@@ -55,16 +58,6 @@ export function registerCommands(program: CommanderStatic) {
)
.action(lazy(() => import('./backend/bundle').then(m => m.default)));
program
.command('backend:build-image')
.allowUnknownOption(true)
.helpOption(', --backstage-cli-help') // Let docker handle --help
.option('--build', 'Build packages before packing them into the image')
.description(
'Bundles the package into a docker image. This command is deprecated and will be removed.',
)
.action(lazy(() => import('./backend/buildImage').then(m => m.default)));
program
.command('backend:dev')
.description('Start local development server with HMR for the backend')
@@ -115,7 +108,7 @@ export function registerCommands(program: CommanderStatic) {
program
.command('remove-plugin')
.description('Removes plugin in the current repository')
.description('[DEPRECATED] - Removes plugin in the current repository')
.action(
lazy(() => import('./remove-plugin/removePlugin').then(m => m.default)),
);
@@ -184,6 +184,12 @@ export const removeReferencesFromAppPackage = async (
};
export default async () => {
console.warn(
chalk.yellow(
'[DEPRECATED] - The remove-plugin command is deprecated and will be removed in the future.',
),
);
const questions: Question[] = [
{
type: 'input',