Merge pull request #19830 from backstage/rugvip/fix

cli: add new repo fix command, initially for exports and side effects
This commit is contained in:
Patrik Oldsberg
2023-09-07 14:53:19 +02:00
committed by GitHub
151 changed files with 547 additions and 117 deletions
+14
View File
@@ -0,0 +1,14 @@
---
'@backstage/create-app': patch
---
Added a `fix` scripts that calls the new `backstage-cli repo fix` command.
To apply this change to an existing app, make the following change to your root `package.json`:
```diff
"test": "backstage-cli repo test",
"test:all": "backstage-cli repo test --coverage",
+ "fix": "backstage-cli repo fix",
"lint": "backstage-cli repo lint --since origin/master",
```
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Added a new `repo fix` command that fixes auto-fixable problems in all packages. Initially the command fixes package export declarations, as well as marks all non-bundled frontend packages as side-effect free. Marking packages as free of side-effects can drastically reduce the Webpack bundle size.
+129
View File
@@ -0,0 +1,129 @@
---
'@backstage/app-defaults': patch
'@backstage/catalog-client': patch
'@backstage/catalog-model': patch
'@backstage/config': patch
'@backstage/core-app-api': patch
'@backstage/core-components': patch
'@backstage/core-plugin-api': patch
'@backstage/dev-utils': patch
'@backstage/errors': patch
'@backstage/integration': patch
'@backstage/integration-react': patch
'@backstage/plugin-adr': patch
'@backstage/plugin-adr-common': patch
'@backstage/plugin-airbrake': patch
'@backstage/plugin-allure': patch
'@backstage/plugin-analytics-module-ga': patch
'@backstage/plugin-analytics-module-ga4': patch
'@backstage/plugin-analytics-module-newrelic-browser': patch
'@backstage/plugin-apache-airflow': patch
'@backstage/plugin-api-docs': patch
'@backstage/plugin-api-docs-module-protoc-gen-doc': patch
'@backstage/plugin-apollo-explorer': patch
'@backstage/plugin-azure-devops': patch
'@backstage/plugin-azure-devops-common': patch
'@backstage/plugin-azure-sites': patch
'@backstage/plugin-azure-sites-common': patch
'@backstage/plugin-badges': patch
'@backstage/plugin-bazaar': patch
'@backstage/plugin-bitbucket-cloud-common': patch
'@backstage/plugin-bitrise': patch
'@backstage/plugin-catalog': patch
'@backstage/plugin-catalog-common': patch
'@backstage/plugin-catalog-graph': patch
'@backstage/plugin-catalog-import': patch
'@backstage/plugin-catalog-react': patch
'@backstage/plugin-catalog-unprocessed-entities': patch
'@backstage/plugin-cicd-statistics': patch
'@backstage/plugin-cicd-statistics-module-gitlab': patch
'@backstage/plugin-circleci': patch
'@backstage/plugin-cloudbuild': patch
'@backstage/plugin-code-climate': patch
'@backstage/plugin-code-coverage': patch
'@backstage/plugin-codescene': patch
'@backstage/plugin-config-schema': patch
'@backstage/plugin-cost-insights': patch
'@backstage/plugin-cost-insights-common': patch
'@backstage/plugin-devtools': patch
'@backstage/plugin-devtools-common': patch
'@backstage/plugin-dynatrace': patch
'@backstage/plugin-entity-feedback': patch
'@backstage/plugin-entity-feedback-common': patch
'@backstage/plugin-entity-validation': patch
'@backstage/plugin-explore': patch
'@backstage/plugin-explore-common': patch
'@backstage/plugin-explore-react': patch
'@backstage/plugin-firehydrant': patch
'@backstage/plugin-fossa': patch
'@backstage/plugin-gcalendar': patch
'@backstage/plugin-gcp-projects': patch
'@backstage/plugin-git-release-manager': patch
'@backstage/plugin-github-actions': patch
'@backstage/plugin-github-deployments': patch
'@backstage/plugin-github-issues': patch
'@backstage/plugin-github-pull-requests-board': patch
'@backstage/plugin-gitops-profiles': patch
'@backstage/plugin-gocd': patch
'@backstage/plugin-graphiql': patch
'@backstage/plugin-graphql-voyager': patch
'@backstage/plugin-home': patch
'@backstage/plugin-home-react': patch
'@backstage/plugin-ilert': patch
'@backstage/plugin-jenkins': patch
'@backstage/plugin-jenkins-common': patch
'@backstage/plugin-kafka': patch
'@backstage/plugin-kubernetes': patch
'@backstage/plugin-kubernetes-common': patch
'@backstage/plugin-lighthouse': patch
'@backstage/plugin-lighthouse-common': patch
'@backstage/plugin-linguist': patch
'@backstage/plugin-linguist-common': patch
'@backstage/plugin-microsoft-calendar': patch
'@backstage/plugin-newrelic': patch
'@backstage/plugin-newrelic-dashboard': patch
'@backstage/plugin-nomad': patch
'@backstage/plugin-octopus-deploy': patch
'@backstage/plugin-opencost': patch
'@backstage/plugin-org': patch
'@backstage/plugin-org-react': patch
'@backstage/plugin-pagerduty': patch
'@backstage/plugin-periskop': patch
'@backstage/plugin-permission-common': patch
'@backstage/plugin-permission-react': patch
'@backstage/plugin-playlist': patch
'@backstage/plugin-playlist-common': patch
'@backstage/plugin-puppetdb': patch
'@backstage/plugin-rollbar': patch
'@backstage/plugin-scaffolder': patch
'@backstage/plugin-scaffolder-common': patch
'@backstage/plugin-scaffolder-react': patch
'@backstage/plugin-search': patch
'@backstage/plugin-search-common': patch
'@backstage/plugin-search-react': patch
'@backstage/plugin-sentry': patch
'@backstage/plugin-shortcuts': patch
'@backstage/plugin-sonarqube': patch
'@backstage/plugin-sonarqube-react': patch
'@backstage/plugin-splunk-on-call': patch
'@backstage/plugin-stack-overflow': patch
'@backstage/plugin-stackstorm': patch
'@backstage/plugin-tech-insights': patch
'@backstage/plugin-tech-insights-common': patch
'@backstage/plugin-tech-radar': patch
'@backstage/plugin-techdocs': patch
'@backstage/plugin-techdocs-addons-test-utils': patch
'@backstage/plugin-techdocs-module-addons-contrib': patch
'@backstage/plugin-techdocs-react': patch
'@backstage/plugin-todo': patch
'@backstage/plugin-user-settings': patch
'@backstage/plugin-vault': patch
'@backstage/plugin-xcmetrics': patch
'@backstage/release-manifests': patch
'@backstage/test-utils': patch
'@backstage/theme': patch
'@backstage/types': patch
'@backstage/version-bridge': patch
---
Mark package as being free of side effects, allowing more optimized Webpack builds.
+8
View File
@@ -0,0 +1,8 @@
---
'@backstage/plugin-kubernetes-backend': patch
'@backstage/plugin-permission-backend': patch
'@backstage/plugin-techdocs-backend': patch
'@backstage/plugin-permission-node': patch
---
Minor `package.json` update.
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Add `"sideEffects": false` to `package.json` in frontend package templates. This can be added to existing packages using the new `yarn fix` command.
+3
View File
@@ -79,6 +79,9 @@ jobs:
- name: verify local dependency ranges
run: node scripts/verify-local-dependencies.js
- name: type checking and declarations
run: yarn fix --check
- name: validate config
run: yarn backstage-cli config:check --lax
+1
View File
@@ -18,6 +18,7 @@
"clean": "backstage-cli repo clean",
"test": "backstage-cli repo test",
"test:all": "backstage-cli repo test --coverage",
"fix": "backstage-cli repo fix",
"lint": "backstage-cli repo lint --since origin/master",
"lint:docs": "node ./scripts/check-docs-quality",
"lint:all": "backstage-cli repo lint",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
@@ -23,6 +23,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -35,6 +35,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+11
View File
@@ -405,6 +405,7 @@ Options:
Commands:
build [options]
lint [options]
fix [options]
clean
list-deprecations [options]
test [options]
@@ -431,6 +432,16 @@ Options:
-h, --help
```
### `backstage-cli repo fix`
```
Usage: backstage-cli repo fix [options]
Options:
--check
-h, --help
```
### `backstage-cli repo lint`
```
+9
View File
@@ -67,6 +67,15 @@ export function registerRepoCommand(program: Command) {
.option('--fix', 'Attempt to automatically fix violations')
.action(lazy(() => import('./repo/lint').then(m => m.command)));
command
.command('fix')
.description('Automatically fix packages in the project')
.option(
'--check',
'Fail if any packages would have been changed by the command',
)
.action(lazy(() => import('./repo/fix').then(m => m.command)));
command
.command('clean')
.description('Delete cache and output directories')
@@ -14,108 +14,21 @@
* limitations under the License.
*/
import fs from 'fs-extra';
import { resolve as resolvePath } from 'path';
import { BackstagePackageJson, PackageGraph } from '@backstage/cli-node';
function trimRelative(path: string): string {
if (path.startsWith('./')) {
return path.slice(2);
}
return path;
}
import {
fixPackageExports,
readFixablePackages,
writeFixedPackages,
} from '../repo/fix';
export async function command() {
const packages = await PackageGraph.listTargetPackages();
await Promise.all(
packages.map(async ({ dir, packageJson }) => {
let changed = false;
let newPackageJson = packageJson;
let { exports: exp } = newPackageJson;
if (!exp) {
return;
}
if (Array.isArray(exp)) {
throw new Error('Unexpected array in package.json exports field');
}
// If exports is a string we rewrite it to an object to add package.json
if (typeof exp === 'string') {
changed = true;
exp = { '.': exp };
newPackageJson.exports = exp;
} else if (typeof exp !== 'object') {
return;
}
if (!exp['./package.json']) {
changed = true;
exp['./package.json'] = './package.json';
}
const existingTypesVersions = JSON.stringify(packageJson.typesVersions);
const typeEntries: Record<string, [string]> = {};
for (const [path, value] of Object.entries(exp)) {
// Main entry point does not need to be listed
if (path === '.') {
continue;
}
const newPath = trimRelative(path);
if (typeof value === 'string') {
typeEntries[newPath] = [trimRelative(value)];
} else if (
value &&
typeof value === 'object' &&
!Array.isArray(value)
) {
if (typeof value.types === 'string') {
typeEntries[newPath] = [trimRelative(value.types)];
} else if (typeof value.default === 'string') {
typeEntries[newPath] = [trimRelative(value.default)];
}
}
}
const typesVersions = { '*': typeEntries };
if (existingTypesVersions !== JSON.stringify(typesVersions)) {
console.log(`Synchronizing exports in ${packageJson.name}`);
const newPkgEntries = Object.entries(newPackageJson).filter(
([name]) => name !== 'typesVersions',
);
newPkgEntries.splice(
newPkgEntries.findIndex(([name]) => name === 'exports') + 1,
0,
['typesVersions', typesVersions],
);
newPackageJson = Object.fromEntries(
newPkgEntries,
) as BackstagePackageJson;
changed = true;
}
// Remove the legacy fields from publishConfig, which are no longer needed
const publishConfig = newPackageJson.publishConfig as
| Record<string, string>
| undefined;
if (publishConfig) {
for (const field of ['main', 'module', 'browser', 'types']) {
if (publishConfig[field]) {
delete publishConfig[field];
changed = true;
}
}
}
if (changed) {
await fs.writeJson(resolvePath(dir, 'package.json'), newPackageJson, {
spaces: 2,
});
}
}),
console.log(
'The `migrate package-exports` command is deprecated, use `repo fix` instead.',
);
const packages = await readFixablePackages();
for (const pkg of packages) {
fixPackageExports(pkg);
}
await writeFixedPackages(packages);
}
+207
View File
@@ -0,0 +1,207 @@
/*
* 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 {
BackstagePackage,
BackstagePackageJson,
PackageGraph,
PackageRoles,
} from '@backstage/cli-node';
import { OptionValues } from 'commander';
import fs from 'fs-extra';
import { resolve as resolvePath } from 'path';
import { paths } from '../../lib/paths';
/**
* A mutable object representing a package.json file with potential fixes.
*/
export interface FixablePackage extends BackstagePackage {
changed: boolean;
}
export async function readFixablePackages(): Promise<FixablePackage[]> {
const packages = await PackageGraph.listTargetPackages();
return packages.map(pkg => ({ ...pkg, changed: false }));
}
export function printPackageFixHint(packages: FixablePackage[]) {
const changed = packages.filter(pkg => pkg.changed);
if (changed.length > 0) {
const rootPkg = require(paths.resolveTargetRoot('package.json'));
const fixCmd =
rootPkg.scripts?.fix === 'backstage-cli repo fix'
? 'fix'
: 'backstage-cli repo fix';
console.log(
`The following packages are out of sync, run 'yarn ${fixCmd}' to fix them:`,
);
for (const pkg of changed) {
console.log(` ${pkg.packageJson.name}`);
}
return true;
}
return false;
}
export async function writeFixedPackages(
packages: FixablePackage[],
): Promise<void> {
await Promise.all(
packages.map(async pkg => {
if (!pkg.changed) {
return;
}
await fs.writeJson(
resolvePath(pkg.dir, 'package.json'),
pkg.packageJson,
{
spaces: 2,
},
);
}),
);
}
function trimRelative(path: string): string {
if (path.startsWith('./')) {
return path.slice(2);
}
return path;
}
export function fixPackageExports(pkg: FixablePackage) {
let { exports: exp } = pkg.packageJson;
if (!exp) {
return;
}
if (Array.isArray(exp)) {
throw new Error('Unexpected array in package.json exports field');
}
// If exports is a string we rewrite it to an object to add package.json
if (typeof exp === 'string') {
pkg.changed = true;
exp = { '.': exp };
pkg.packageJson.exports = exp;
} else if (typeof exp !== 'object') {
return;
}
if (!exp['./package.json']) {
pkg.changed = true;
exp['./package.json'] = './package.json';
}
const existingTypesVersions = JSON.stringify(pkg.packageJson.typesVersions);
const typeEntries: Record<string, [string]> = {};
for (const [path, value] of Object.entries(exp)) {
// Main entry point does not need to be listed
if (path === '.') {
continue;
}
const newPath = trimRelative(path);
if (typeof value === 'string') {
typeEntries[newPath] = [trimRelative(value)];
} else if (value && typeof value === 'object' && !Array.isArray(value)) {
if (typeof value.types === 'string') {
typeEntries[newPath] = [trimRelative(value.types)];
} else if (typeof value.default === 'string') {
typeEntries[newPath] = [trimRelative(value.default)];
}
}
}
const typesVersions = { '*': typeEntries };
if (existingTypesVersions !== JSON.stringify(typesVersions)) {
const newPkgEntries = Object.entries(pkg.packageJson).filter(
([name]) => name !== 'typesVersions',
);
newPkgEntries.splice(
newPkgEntries.findIndex(([name]) => name === 'exports') + 1,
0,
['typesVersions', typesVersions],
);
pkg.packageJson = Object.fromEntries(newPkgEntries) as BackstagePackageJson;
pkg.changed = true;
}
// Remove the legacy fields from publishConfig, which are no longer needed
const publishConfig = pkg.packageJson.publishConfig as
| Record<string, string>
| undefined;
if (publishConfig) {
for (const field of ['main', 'module', 'browser', 'types']) {
if (publishConfig[field]) {
delete publishConfig[field];
pkg.changed = true;
}
}
}
}
export function fixSideEffects(pkg: FixablePackage) {
const role = PackageRoles.getRoleFromPackage(pkg.packageJson);
if (!role) {
return;
}
const roleInfo = PackageRoles.getRoleInfo(role);
// Only web and common packages benefit from being marked as side effect free
if (roleInfo.platform === 'node') {
return;
}
// Bundled packages don't need to mark themselves as having no side effects
if (roleInfo.output.length === 1 && roleInfo.output[0] === 'bundle') {
return;
}
// Already declared
if ('sideEffects' in pkg.packageJson) {
return;
}
const pkgEntries = Object.entries(pkg.packageJson);
pkgEntries.splice(
// Place it just above the scripts field
pkgEntries.findIndex(([name]) => name === 'scripts'),
0,
['sideEffects', false],
);
pkg.packageJson = Object.fromEntries(pkgEntries) as BackstagePackageJson;
pkg.changed = true;
}
export async function command(opts: OptionValues): Promise<void> {
const packages = await readFixablePackages();
for (const pkg of packages) {
fixPackageExports(pkg);
fixSideEffects(pkg);
}
if (opts.check) {
if (printPackageFixHint(packages)) {
process.exit(1);
}
} else {
await writeFixedPackages(packages);
}
}
@@ -20,6 +20,7 @@
"backstage": {
"role": "common-library"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
@@ -18,6 +18,7 @@
"backstage": {
"role": "frontend-plugin"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -19,6 +19,7 @@
"backstage": {
"role": "web-library"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -18,6 +18,7 @@
"backstage": {
"role": "web-library"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -23,6 +23,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -35,6 +35,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -35,6 +35,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
@@ -17,6 +17,7 @@
"clean": "backstage-cli repo clean",
"test": "backstage-cli repo test",
"test:all": "backstage-cli repo test --coverage",
"fix": "backstage-cli repo fix",
"lint": "backstage-cli repo lint --since origin/{{defaultBranch}}",
"lint:all": "backstage-cli repo lint",
"prettier:check": "prettier --check .",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -13,6 +13,7 @@
"backstage": {
"role": "web-library"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -13,6 +13,7 @@
"backstage": {
"role": "web-library"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "packages/integration-react"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"backstage"
],
"license": "Apache-2.0",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -35,6 +35,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -20,6 +20,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/adr-common"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/adr"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/airbrake"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/allure"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/analytics-module-ga"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/plugins/analytics-module-ga4"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -12,6 +12,7 @@
"backstage": {
"role": "frontend-plugin-module"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/apache-airflow"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/apollo-explorer"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/azure-devops"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"backstage",
"azure"
],
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/badges"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/bazaar"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -20,6 +20,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/bitbucket-cloud-common"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/bitrise"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -35,6 +35,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/catalog-graph"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -35,6 +35,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/catalog-unprocessed-entities"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -24,6 +24,7 @@
"cicd statistics",
"gitlab"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"circleci"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"google cloud"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/code-climate"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/code-coverage"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/codescene"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/config-schema"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
@@ -23,6 +23,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -20,6 +20,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/devtools-common"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/devtools"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/dynatrace"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -20,6 +20,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/entity-feedback-common"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/entity-feedback"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/entity-validation"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/plugins/example-todo-list-common"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -19,6 +19,7 @@
"main": "dist/index.esm.js",
"types": "dist/index.d.ts"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -22,6 +22,7 @@
"keywords": [
"backstage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/firehydrant"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"fossa"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/gcalendar"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"google cloud"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/git-release-manager"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -24,6 +24,7 @@
"github",
"github actions"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/github-deployments"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -18,6 +18,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/github-issues"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
@@ -24,6 +24,7 @@
"github",
"pull requests"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"gitops"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/gocd"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -22,6 +22,7 @@
"license": "Apache-2.0",
"main": "src/index.ts",
"types": "src/index.ts",
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/graphql-voyager"
},
"sideEffects": false,
"scripts": {
"start": "backstage-cli package start",
"build": "backstage-cli package build",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"homepage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"homepage"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/ilert"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",
+1
View File
@@ -19,6 +19,7 @@
"url": "https://github.com/backstage/backstage",
"directory": "plugins/jenkins-common"
},
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"lint": "backstage-cli package lint",
+1
View File
@@ -23,6 +23,7 @@
"backstage",
"jenkins"
],
"sideEffects": false,
"scripts": {
"build": "backstage-cli package build",
"start": "backstage-cli package start",

Some files were not shown because too many files have changed in this diff Show More