@backstage/cli 0.35.2-next.1 → 0.35.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/modules/build/lib/builder/config.cjs.js +10 -1
- package/dist/modules/info/commands/info.cjs.js +123 -14
- package/dist/modules/info/index.cjs.js +15 -2
- package/dist/modules/new/lib/preparation/loadPortableTemplate.cjs.js +2 -2
- package/dist/modules/new/lib/preparation/loadPortableTemplateConfig.cjs.js +3 -3
- package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
- package/dist/packages/backend-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/backend-test-utils/package.json.cjs.js +1 -1
- package/dist/packages/cli/package.json.cjs.js +2 -2
- package/dist/packages/core-components/package.json.cjs.js +1 -1
- package/dist/packages/dev-utils/package.json.cjs.js +1 -1
- package/dist/packages/frontend-defaults/package.json.cjs.js +1 -1
- package/dist/packages/frontend-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/frontend-test-utils/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-node/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-node-test-utils/package.json.cjs.js +1 -1
- package/package.json +28 -28
- package/templates/node-library/package.json.hbs +1 -0
- package/templates/plugin-node-library/package.json.hbs +1 -0
- package/templates/scaffolder-backend-module/package.json.hbs +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @backstage/cli
|
|
2
2
|
|
|
3
|
+
## 0.35.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 320c6a9: Bump `@swc/core` to support `ES2023` and `ES2024`
|
|
8
|
+
- c0d7bf6: Added `--include` and `--format` options to `backstage-cli info` command for including additional packages via glob patterns and outputting as JSON or Text.
|
|
9
|
+
- f6a5d2f: Fixed CSS module class name collisions when running multiple versions of packages simultaneously by using content-based hashing for class name generation.
|
|
10
|
+
- 140cbc2: Added `@backstage/backend-test-utils` to backend package templates.
|
|
11
|
+
- 4eeba9e: Upgrade `zod-validation-error` to version 4
|
|
12
|
+
- 9ee5996: Bump minimum required `@swc/core` to avoid transpilation bug
|
|
13
|
+
- Updated dependencies
|
|
14
|
+
- @backstage/cli-common@0.1.17
|
|
15
|
+
- @backstage/integration@1.19.2
|
|
16
|
+
|
|
3
17
|
## 0.35.2-next.1
|
|
4
18
|
|
|
5
19
|
### Patch Changes
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var chalk = require('chalk');
|
|
4
4
|
var fs = require('fs-extra');
|
|
5
|
+
var crypto = require('crypto');
|
|
5
6
|
var path = require('path');
|
|
6
7
|
var commonjs = require('@rollup/plugin-commonjs');
|
|
7
8
|
var resolve = require('@rollup/plugin-node-resolve');
|
|
@@ -179,7 +180,15 @@ async function makeRollupConfigs(options) {
|
|
|
179
180
|
include: /node_modules/,
|
|
180
181
|
exclude: [/\/[^/]+\.(?:stories|test)\.[^/]+$/]
|
|
181
182
|
}),
|
|
182
|
-
postcss__default.default(
|
|
183
|
+
postcss__default.default({
|
|
184
|
+
modules: {
|
|
185
|
+
generateScopedName(name, filename, css) {
|
|
186
|
+
const hash = crypto.createHash("md5").update(css).digest("hex").slice(0, 10);
|
|
187
|
+
const file = path.basename(filename, ".module.css");
|
|
188
|
+
return `${file}_${name}__${hash}`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}),
|
|
183
192
|
plugins.forwardFileImports({
|
|
184
193
|
exclude: /\.icon\.svg$/,
|
|
185
194
|
include: [
|
|
@@ -7,9 +7,10 @@ var os = require('os');
|
|
|
7
7
|
var cliCommon = require('@backstage/cli-common');
|
|
8
8
|
var paths = require('../../../lib/paths.cjs.js');
|
|
9
9
|
var Lockfile = require('../../../lib/versioning/Lockfile.cjs.js');
|
|
10
|
-
require('minimatch');
|
|
10
|
+
var minimatch = require('minimatch');
|
|
11
11
|
require('@manypkg/get-packages');
|
|
12
12
|
require('@backstage/errors');
|
|
13
|
+
var cliNode = require('@backstage/cli-node');
|
|
13
14
|
var fs = require('fs-extra');
|
|
14
15
|
|
|
15
16
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -17,7 +18,20 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
|
17
18
|
var os__default = /*#__PURE__*/_interopDefaultCompat(os);
|
|
18
19
|
var fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
function tryReadPackageJson(packageName, targetPath) {
|
|
22
|
+
try {
|
|
23
|
+
return require(require.resolve(`${packageName}/package.json`, {
|
|
24
|
+
paths: [targetPath]
|
|
25
|
+
}));
|
|
26
|
+
} catch {
|
|
27
|
+
return void 0;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function hasBackstageField(packageName, targetPath) {
|
|
31
|
+
const pkg = tryReadPackageJson(packageName, targetPath);
|
|
32
|
+
return pkg?.backstage !== void 0;
|
|
33
|
+
}
|
|
34
|
+
var info = async (options) => {
|
|
21
35
|
await new Promise(async () => {
|
|
22
36
|
const yarnVersion = await cliCommon.runOutput(["yarn", "--version"]);
|
|
23
37
|
const isLocal = fs__default.default.existsSync(paths.paths.resolveOwn("./src"));
|
|
@@ -28,24 +42,119 @@ var info = async () => {
|
|
|
28
42
|
const backstageJson = await fs__default.default.readJSON(backstageFile);
|
|
29
43
|
backstageVersion = backstageJson.version ?? "N/A";
|
|
30
44
|
} catch (error) {
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
if (options.format !== "json") {
|
|
46
|
+
console.warn(
|
|
47
|
+
'The "backstage.json" file is not in the expected format'
|
|
48
|
+
);
|
|
49
|
+
console.log();
|
|
50
|
+
}
|
|
33
51
|
}
|
|
34
52
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
53
|
+
const systemInfo = {
|
|
54
|
+
os: `${os__default.default.type} ${os__default.default.release} - ${os__default.default.platform}/${os__default.default.arch}`,
|
|
55
|
+
node: process.version,
|
|
56
|
+
yarn: yarnVersion,
|
|
57
|
+
cli: { version: _package.version, local: isLocal },
|
|
58
|
+
backstage: backstageVersion
|
|
59
|
+
};
|
|
60
|
+
const lockfilePath = paths.paths.resolveTargetRoot("yarn.lock");
|
|
61
|
+
const lockfile = await Lockfile.Lockfile.load(lockfilePath);
|
|
62
|
+
const targetPath = paths.paths.targetRoot;
|
|
63
|
+
const workspacePackages = /* @__PURE__ */ new Map();
|
|
64
|
+
try {
|
|
65
|
+
const packages = await cliNode.PackageGraph.listTargetPackages();
|
|
66
|
+
for (const pkg of packages) {
|
|
67
|
+
workspacePackages.set(pkg.packageJson.name, pkg.packageJson.version);
|
|
68
|
+
}
|
|
69
|
+
} catch {
|
|
70
|
+
}
|
|
71
|
+
const allPackages = [...lockfile.keys()];
|
|
72
|
+
const includePatterns = options.include || [];
|
|
73
|
+
const installedDeps = /* @__PURE__ */ new Set();
|
|
74
|
+
const localDeps = /* @__PURE__ */ new Set();
|
|
75
|
+
for (const pkg of allPackages) {
|
|
76
|
+
if (pkg.startsWith("@backstage/")) {
|
|
77
|
+
if (workspacePackages.has(pkg)) {
|
|
78
|
+
localDeps.add(pkg);
|
|
79
|
+
} else {
|
|
80
|
+
installedDeps.add(pkg);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
for (const pattern of includePatterns) {
|
|
85
|
+
for (const pkg of allPackages) {
|
|
86
|
+
if (minimatch.minimatch(pkg, pattern)) {
|
|
87
|
+
if (workspacePackages.has(pkg)) {
|
|
88
|
+
localDeps.add(pkg);
|
|
89
|
+
} else {
|
|
90
|
+
installedDeps.add(pkg);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
for (const pkg of allPackages) {
|
|
96
|
+
if (pkg.startsWith("@backstage/")) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (workspacePackages.has(pkg)) {
|
|
100
|
+
if (hasBackstageField(pkg, targetPath)) {
|
|
101
|
+
localDeps.add(pkg);
|
|
102
|
+
}
|
|
103
|
+
} else if (hasBackstageField(pkg, targetPath)) {
|
|
104
|
+
installedDeps.add(pkg);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const getVersions = (dep) => {
|
|
108
|
+
const entries = lockfile.get(dep);
|
|
109
|
+
if (!entries) {
|
|
110
|
+
return [{ version: "unknown" }];
|
|
111
|
+
}
|
|
112
|
+
const versions = [...new Set(entries.map((i) => i.version))];
|
|
113
|
+
return versions.map((v) => ({ version: v }));
|
|
114
|
+
};
|
|
115
|
+
const sortedInstalled = [...installedDeps].sort();
|
|
116
|
+
const sortedLocal = [...localDeps].sort();
|
|
117
|
+
if (options.format === "json") {
|
|
118
|
+
const output = {
|
|
119
|
+
system: systemInfo,
|
|
120
|
+
dependencies: Object.fromEntries(
|
|
121
|
+
sortedInstalled.map((dep) => [dep, getVersions(dep)])
|
|
122
|
+
),
|
|
123
|
+
local: Object.fromEntries(
|
|
124
|
+
sortedLocal.map((dep) => [
|
|
125
|
+
dep,
|
|
126
|
+
[{ version: workspacePackages.get(dep) ?? "unknown" }]
|
|
127
|
+
])
|
|
128
|
+
)
|
|
129
|
+
};
|
|
130
|
+
process.stdout.write(`${JSON.stringify(output, null, 2)}
|
|
131
|
+
`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
console.log(`OS: ${systemInfo.os}`);
|
|
135
|
+
console.log(`node: ${systemInfo.node}`);
|
|
136
|
+
console.log(`yarn: ${systemInfo.yarn}`);
|
|
38
137
|
console.log(`cli: ${_package.version} (${isLocal ? "local" : "installed"})`);
|
|
39
138
|
console.log(`backstage: ${backstageVersion}`);
|
|
40
139
|
console.log();
|
|
41
140
|
console.log("Dependencies:");
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
141
|
+
if (sortedInstalled.length > 0) {
|
|
142
|
+
const maxLength = Math.max(...sortedInstalled.map((d) => d.length));
|
|
143
|
+
for (const dep of sortedInstalled) {
|
|
144
|
+
const versions = getVersions(dep).map((v) => v.version).join(", ");
|
|
145
|
+
console.log(` ${dep.padEnd(maxLength)} ${versions}`);
|
|
146
|
+
}
|
|
147
|
+
} else {
|
|
148
|
+
console.log(" (no installed Backstage packages found)");
|
|
149
|
+
}
|
|
150
|
+
if (localDeps.size > 0) {
|
|
151
|
+
console.log();
|
|
152
|
+
console.log("Local:");
|
|
153
|
+
const maxLength = Math.max(...sortedLocal.map((d) => d.length));
|
|
154
|
+
for (const dep of sortedLocal) {
|
|
155
|
+
const version = workspacePackages.get(dep) ?? "unknown";
|
|
156
|
+
console.log(` ${dep.padEnd(maxLength)} ${version}`);
|
|
157
|
+
}
|
|
49
158
|
}
|
|
50
159
|
});
|
|
51
160
|
};
|
|
@@ -17,8 +17,21 @@ var index = factory.createCliPlugin({
|
|
|
17
17
|
path: ["info"],
|
|
18
18
|
description: "Show helpful information for debugging and reporting bugs",
|
|
19
19
|
execute: async ({ args }) => {
|
|
20
|
-
yargs__default.default().
|
|
21
|
-
|
|
20
|
+
const argv = await yargs__default.default().options({
|
|
21
|
+
include: {
|
|
22
|
+
type: "string",
|
|
23
|
+
array: true,
|
|
24
|
+
default: [],
|
|
25
|
+
description: "Glob patterns for additional packages to include (e.g., @spotify/backstage*)"
|
|
26
|
+
},
|
|
27
|
+
format: {
|
|
28
|
+
type: "string",
|
|
29
|
+
choices: ["text", "json"],
|
|
30
|
+
default: "text",
|
|
31
|
+
description: "Output format (text or json)"
|
|
32
|
+
}
|
|
33
|
+
}).help().parse(args);
|
|
34
|
+
await lazy.lazy(() => import('./commands/info.cjs.js'), "default")(argv);
|
|
22
35
|
}
|
|
23
36
|
});
|
|
24
37
|
}
|
|
@@ -9,7 +9,7 @@ var yaml = require('yaml');
|
|
|
9
9
|
var paths = require('../../../../lib/paths.cjs.js');
|
|
10
10
|
var types = require('../types.cjs.js');
|
|
11
11
|
var errors = require('@backstage/errors');
|
|
12
|
-
var
|
|
12
|
+
var v3 = require('zod-validation-error/v3');
|
|
13
13
|
|
|
14
14
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
15
15
|
|
|
@@ -37,7 +37,7 @@ async function loadPortableTemplate(pointer) {
|
|
|
37
37
|
if (!parsed.success) {
|
|
38
38
|
throw new errors.ForwardedError(
|
|
39
39
|
`Invalid template definition at '${pointer.target}'`,
|
|
40
|
-
|
|
40
|
+
v3.fromZodError(parsed.error)
|
|
41
41
|
);
|
|
42
42
|
}
|
|
43
43
|
const { role, values = {} } = parsed.data;
|
|
@@ -7,7 +7,7 @@ var defaultTemplates = require('../defaultTemplates.cjs.js');
|
|
|
7
7
|
var types = require('../types.cjs.js');
|
|
8
8
|
var yaml = require('yaml');
|
|
9
9
|
var z = require('zod');
|
|
10
|
-
var
|
|
10
|
+
var v3 = require('zod-validation-error/v3');
|
|
11
11
|
var errors = require('@backstage/errors');
|
|
12
12
|
|
|
13
13
|
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
@@ -54,7 +54,7 @@ async function loadPortableTemplateConfig(options = {}) {
|
|
|
54
54
|
if (!parsed.success) {
|
|
55
55
|
throw new errors.ForwardedError(
|
|
56
56
|
`Failed to load templating configuration from '${pkgPath}'`,
|
|
57
|
-
|
|
57
|
+
v3.fromZodError(parsed.error)
|
|
58
58
|
);
|
|
59
59
|
}
|
|
60
60
|
const config = parsed.data.backstage?.cli?.new;
|
|
@@ -119,7 +119,7 @@ async function peekLocalTemplateDefinition(target) {
|
|
|
119
119
|
const rawTemplate = yaml.parse(content);
|
|
120
120
|
const parsed = partialTemplateDefinitionSchema.safeParse(rawTemplate);
|
|
121
121
|
if (!parsed.success) {
|
|
122
|
-
throw
|
|
122
|
+
throw v3.fromZodError(parsed.error);
|
|
123
123
|
}
|
|
124
124
|
return {
|
|
125
125
|
name: parsed.data.name,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var version = "0.35.2
|
|
3
|
+
var version = "0.35.2";
|
|
4
4
|
var dependencies = {
|
|
5
5
|
"@backstage/catalog-model": "workspace:^",
|
|
6
6
|
"@backstage/cli-common": "workspace:^",
|
|
@@ -98,7 +98,7 @@ var dependencies = {
|
|
|
98
98
|
"yml-loader": "^2.1.0",
|
|
99
99
|
yn: "^4.0.0",
|
|
100
100
|
zod: "^3.22.4",
|
|
101
|
-
"zod-validation-error": "^
|
|
101
|
+
"zod-validation-error": "^4.0.2"
|
|
102
102
|
};
|
|
103
103
|
var devDependencies = {
|
|
104
104
|
"@backstage/backend-plugin-api": "workspace:^",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@backstage/cli",
|
|
3
|
-
"version": "0.35.2
|
|
3
|
+
"version": "0.35.2",
|
|
4
4
|
"description": "CLI for developing Backstage plugins and apps",
|
|
5
5
|
"backstage": {
|
|
6
6
|
"role": "cli"
|
|
@@ -47,16 +47,16 @@
|
|
|
47
47
|
]
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@backstage/catalog-model": "1.7.6",
|
|
51
|
-
"@backstage/cli-common": "0.1.
|
|
52
|
-
"@backstage/cli-node": "0.2.16",
|
|
53
|
-
"@backstage/config": "1.3.6",
|
|
54
|
-
"@backstage/config-loader": "1.10.7",
|
|
55
|
-
"@backstage/errors": "1.2.7",
|
|
56
|
-
"@backstage/eslint-plugin": "0.2.0",
|
|
57
|
-
"@backstage/integration": "1.19.2
|
|
58
|
-
"@backstage/release-manifests": "0.0.13",
|
|
59
|
-
"@backstage/types": "1.2.2",
|
|
50
|
+
"@backstage/catalog-model": "^1.7.6",
|
|
51
|
+
"@backstage/cli-common": "^0.1.17",
|
|
52
|
+
"@backstage/cli-node": "^0.2.16",
|
|
53
|
+
"@backstage/config": "^1.3.6",
|
|
54
|
+
"@backstage/config-loader": "^1.10.7",
|
|
55
|
+
"@backstage/errors": "^1.2.7",
|
|
56
|
+
"@backstage/eslint-plugin": "^0.2.0",
|
|
57
|
+
"@backstage/integration": "^1.19.2",
|
|
58
|
+
"@backstage/release-manifests": "^0.0.13",
|
|
59
|
+
"@backstage/types": "^1.2.2",
|
|
60
60
|
"@manypkg/get-packages": "^1.1.3",
|
|
61
61
|
"@module-federation/enhanced": "^0.9.0",
|
|
62
62
|
"@octokit/request": "^8.0.0",
|
|
@@ -143,25 +143,25 @@
|
|
|
143
143
|
"yml-loader": "^2.1.0",
|
|
144
144
|
"yn": "^4.0.0",
|
|
145
145
|
"zod": "^3.22.4",
|
|
146
|
-
"zod-validation-error": "^
|
|
146
|
+
"zod-validation-error": "^4.0.2"
|
|
147
147
|
},
|
|
148
148
|
"devDependencies": {
|
|
149
|
-
"@backstage/backend-plugin-api": "1.6.
|
|
150
|
-
"@backstage/backend-test-utils": "1.10.3
|
|
151
|
-
"@backstage/catalog-client": "1.12.1",
|
|
152
|
-
"@backstage/config": "1.3.6",
|
|
153
|
-
"@backstage/core-app-api": "1.19.3",
|
|
154
|
-
"@backstage/core-components": "0.18.
|
|
155
|
-
"@backstage/core-plugin-api": "1.12.1",
|
|
156
|
-
"@backstage/dev-utils": "1.1.19
|
|
157
|
-
"@backstage/errors": "1.2.7",
|
|
158
|
-
"@backstage/plugin-auth-backend": "0.
|
|
159
|
-
"@backstage/plugin-auth-backend-module-guest-provider": "0.2.15",
|
|
160
|
-
"@backstage/plugin-catalog-node": "1.20.1",
|
|
161
|
-
"@backstage/plugin-scaffolder-node": "0.12.3
|
|
162
|
-
"@backstage/plugin-scaffolder-node-test-utils": "0.3.7
|
|
163
|
-
"@backstage/test-utils": "1.7.14",
|
|
164
|
-
"@backstage/theme": "0.7.1",
|
|
149
|
+
"@backstage/backend-plugin-api": "^1.6.1",
|
|
150
|
+
"@backstage/backend-test-utils": "^1.10.3",
|
|
151
|
+
"@backstage/catalog-client": "^1.12.1",
|
|
152
|
+
"@backstage/config": "^1.3.6",
|
|
153
|
+
"@backstage/core-app-api": "^1.19.3",
|
|
154
|
+
"@backstage/core-components": "^0.18.5",
|
|
155
|
+
"@backstage/core-plugin-api": "^1.12.1",
|
|
156
|
+
"@backstage/dev-utils": "^1.1.19",
|
|
157
|
+
"@backstage/errors": "^1.2.7",
|
|
158
|
+
"@backstage/plugin-auth-backend": "^0.26.0",
|
|
159
|
+
"@backstage/plugin-auth-backend-module-guest-provider": "^0.2.15",
|
|
160
|
+
"@backstage/plugin-catalog-node": "^1.20.1",
|
|
161
|
+
"@backstage/plugin-scaffolder-node": "^0.12.3",
|
|
162
|
+
"@backstage/plugin-scaffolder-node-test-utils": "^0.3.7",
|
|
163
|
+
"@backstage/test-utils": "^1.7.14",
|
|
164
|
+
"@backstage/theme": "^0.7.1",
|
|
165
165
|
"@jest/environment-jsdom-abstract": "^30.0.0",
|
|
166
166
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.6.0",
|
|
167
167
|
"@types/cross-spawn": "^6.0.2",
|
|
@@ -26,6 +26,7 @@
|
|
|
26
26
|
"@backstage/plugin-scaffolder-node": "{{versionQuery '@backstage/plugin-scaffolder-node'}}"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
+
"@backstage/backend-test-utils": "{{versionQuery '@backstage/backend-test-utils'}}",
|
|
29
30
|
"@backstage/cli": "{{versionQuery '@backstage/cli'}}",
|
|
30
31
|
"@backstage/plugin-scaffolder-node-test-utils": "{{versionQuery '@backstage/plugin-scaffolder-node-test-utils'}}"
|
|
31
32
|
},
|