cli: added new repo clean command

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
This commit is contained in:
Patrik Oldsberg
2022-08-31 22:00:35 +02:00
parent e15c7a0c49
commit 68c2697077
4 changed files with 77 additions and 0 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Added a new `backstage-cli repo clean` command that cleans the repo root and runs the clean script in all packages.
+10
View File
@@ -415,6 +415,7 @@ Options:
Commands:
build [options]
lint [options]
clean
help [command]
```
@@ -429,6 +430,15 @@ Options:
-h, --help
```
### `backstage-cli repo clean`
```
Usage: backstage-cli repo clean [options]
Options:
-h, --help
```
### `backstage-cli repo lint`
```
+5
View File
@@ -60,6 +60,11 @@ export function registerRepoCommand(program: Command) {
.option('--fix', 'Attempt to automatically fix violations')
.action(lazy(() => import('./repo/lint').then(m => m.command)));
command
.command('clean')
.description('Delete cache and output directories')
.action(lazy(() => import('./repo/clean').then(m => m.command)));
command
.command('list-deprecations', { hidden: true })
.description('List deprecations. [EXPERIMENTAL]')
+57
View File
@@ -0,0 +1,57 @@
/*
* 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 { execFile as execFileCb } from 'child_process';
import fs from 'fs-extra';
import { resolve as resolvePath } from 'path';
import { promisify } from 'util';
import { PackageGraph } from '../../lib/monorepo';
import { paths } from '../../lib/paths';
const execFile = promisify(execFileCb);
export async function command(): Promise<void> {
const packages = await PackageGraph.listTargetPackages();
await fs.remove(paths.resolveTargetRoot('dist'));
await fs.remove(paths.resolveTargetRoot('dist-types'));
await fs.remove(paths.resolveTargetRoot('coverage'));
await Promise.all(
Array.from(Array(10), async () => {
while (packages.length > 0) {
const pkg = packages.pop()!;
const cleanScript = pkg.packageJson.scripts?.clean;
if (
cleanScript === 'backstage-cli clean' ||
cleanScript === 'backstage-cli package clean'
) {
await fs.remove(resolvePath(pkg.dir, 'dist'));
await fs.remove(resolvePath(pkg.dir, 'dist-types'));
await fs.remove(resolvePath(pkg.dir, 'coverage'));
} else if (cleanScript) {
const result = await execFile('yarn', ['run', 'clean'], {
cwd: pkg.dir,
shell: true,
});
process.stdout.write(result.stdout);
process.stderr.write(result.stderr);
}
}
}),
);
}