@backstage/create-app 0.8.2-next.1 → 0.8.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 +22 -1
- package/dist/createApp.cjs.js +1 -1
- package/dist/createApp.cjs.js.map +1 -1
- package/dist/lib/versions.cjs.js +78 -74
- package/dist/lib/versions.cjs.js.map +1 -1
- package/dist/package.json.cjs.js +1 -1
- package/dist/packages/app-defaults/package.json.cjs.js +1 -1
- package/dist/packages/backend-defaults/package.json.cjs.js +1 -1
- package/dist/packages/catalog-client/package.json.cjs.js +1 -1
- package/dist/packages/catalog-model/package.json.cjs.js +1 -1
- package/dist/packages/cli/package.json.cjs.js +1 -1
- package/dist/packages/cli-defaults/package.json.cjs.js +1 -1
- package/dist/packages/config/package.json.cjs.js +1 -1
- package/dist/packages/core-app-api/package.json.cjs.js +1 -1
- package/dist/packages/core-compat-api/package.json.cjs.js +1 -1
- package/dist/packages/core-components/package.json.cjs.js +1 -1
- package/dist/packages/core-plugin-api/package.json.cjs.js +1 -1
- package/dist/packages/errors/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/packages/integration-react/package.json.cjs.js +1 -1
- package/dist/packages/repo-tools/package.json.cjs.js +1 -1
- package/dist/packages/test-utils/package.json.cjs.js +1 -1
- package/dist/packages/theme/package.json.cjs.js +1 -1
- package/dist/packages/ui/package.json.cjs.js +1 -1
- package/dist/plugins/api-docs/package.json.cjs.js +1 -1
- package/dist/plugins/app-backend/package.json.cjs.js +1 -1
- package/dist/plugins/app-react/package.json.cjs.js +1 -1
- package/dist/plugins/app-visualizer/package.json.cjs.js +1 -1
- package/dist/plugins/auth/package.json.cjs.js +6 -0
- package/dist/plugins/auth/package.json.cjs.js.map +1 -0
- package/dist/plugins/auth-backend/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend-module-github-provider/package.json.cjs.js +1 -1
- package/dist/plugins/auth-backend-module-guest-provider/package.json.cjs.js +1 -1
- package/dist/plugins/auth-node/package.json.cjs.js +1 -1
- package/dist/plugins/catalog/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-backend/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-backend-module-logs/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-backend-module-scaffolder-entity-model/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-common/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-graph/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-import/package.json.cjs.js +1 -1
- package/dist/plugins/catalog-react/package.json.cjs.js +1 -1
- package/dist/plugins/kubernetes/package.json.cjs.js +1 -1
- package/dist/plugins/kubernetes-backend/package.json.cjs.js +1 -1
- package/dist/plugins/mcp-actions-backend/package.json.cjs.js +6 -0
- package/dist/plugins/mcp-actions-backend/package.json.cjs.js.map +1 -0
- package/dist/plugins/notifications/package.json.cjs.js +1 -1
- package/dist/plugins/notifications-backend/package.json.cjs.js +1 -1
- package/dist/plugins/org/package.json.cjs.js +1 -1
- package/dist/plugins/permission-backend/package.json.cjs.js +1 -1
- package/dist/plugins/permission-backend-module-policy-allow-all/package.json.cjs.js +1 -1
- package/dist/plugins/permission-common/package.json.cjs.js +1 -1
- package/dist/plugins/permission-node/package.json.cjs.js +1 -1
- package/dist/plugins/permission-react/package.json.cjs.js +1 -1
- package/dist/plugins/proxy-backend/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-backend/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-backend-module-github/package.json.cjs.js +1 -1
- package/dist/plugins/scaffolder-backend-module-notifications/package.json.cjs.js +1 -1
- package/dist/plugins/search/package.json.cjs.js +1 -1
- package/dist/plugins/search-backend/package.json.cjs.js +1 -1
- package/dist/plugins/search-backend-module-catalog/package.json.cjs.js +1 -1
- package/dist/plugins/search-backend-module-pg/package.json.cjs.js +1 -1
- package/dist/plugins/search-backend-module-techdocs/package.json.cjs.js +1 -1
- package/dist/plugins/search-backend-node/package.json.cjs.js +1 -1
- package/dist/plugins/search-react/package.json.cjs.js +1 -1
- package/dist/plugins/signals/package.json.cjs.js +1 -1
- package/dist/plugins/signals-backend/package.json.cjs.js +1 -1
- package/dist/plugins/techdocs/package.json.cjs.js +1 -1
- package/dist/plugins/techdocs-backend/package.json.cjs.js +1 -1
- package/dist/plugins/techdocs-module-addons-contrib/package.json.cjs.js +1 -1
- package/dist/plugins/techdocs-react/package.json.cjs.js +1 -1
- package/dist/plugins/user-settings/package.json.cjs.js +1 -1
- package/package.json +4 -4
- package/templates/default-app/app-config.yaml.hbs +38 -0
- package/templates/default-app/package.json.hbs +1 -14
- package/templates/default-app/packages/app/e2e-tests/app.test.ts +7 -1
- package/templates/default-app/packages/app/package.json.hbs +22 -26
- package/templates/default-app/packages/app/src/App.test.tsx +1 -1
- package/templates/default-app/packages/app/src/App.tsx +5 -110
- package/templates/default-app/packages/app/src/index.tsx +1 -1
- package/templates/default-app/packages/backend/package.json.hbs +1 -0
- package/templates/default-app/packages/backend/src/index.ts +3 -0
- package/templates/default-app/playwright.config.ts +3 -3
- package/templates/default-app/yarn.lock +12 -1
- package/templates/{next-app → legacy-app}/app-config.yaml.hbs +30 -9
- package/templates/{next-app → legacy-app}/package.json.hbs +14 -1
- package/templates/{next-app → legacy-app}/packages/app/e2e-tests/app.test.ts +1 -7
- package/templates/legacy-app/packages/app/package.json.hbs +76 -0
- package/templates/{next-app → legacy-app}/packages/app/src/App.test.tsx +1 -1
- package/templates/legacy-app/packages/app/src/App.tsx +112 -0
- package/templates/{next-app → legacy-app}/packages/app/src/index.tsx +1 -1
- package/templates/{next-app → legacy-app}/packages/backend/package.json.hbs +1 -0
- package/templates/{next-app → legacy-app}/packages/backend/src/index.ts +3 -0
- package/templates/next-app/packages/app/package.json.hbs +0 -71
- package/templates/next-app/packages/app/src/App.tsx +0 -7
- /package/templates/{next-app → default-app}/packages/app/src/modules/nav/LogoFull.tsx +0 -0
- /package/templates/{next-app → default-app}/packages/app/src/modules/nav/LogoIcon.tsx +0 -0
- /package/templates/{next-app → default-app}/packages/app/src/modules/nav/Sidebar.tsx +0 -0
- /package/templates/{next-app → default-app}/packages/app/src/modules/nav/SidebarLogo.tsx +0 -0
- /package/templates/{next-app → default-app}/packages/app/src/modules/nav/index.ts +0 -0
- /package/templates/{next-app → legacy-app}/.dockerignore +0 -0
- /package/templates/{next-app → legacy-app}/.eslintignore +0 -0
- /package/templates/{next-app → legacy-app}/.eslintrc.js.hbs +0 -0
- /package/templates/{next-app → legacy-app}/.gitignore.hbs +0 -0
- /package/templates/{next-app → legacy-app}/.prettierignore +0 -0
- /package/templates/{next-app → legacy-app}/.yarn/releases/yarn-4.4.1.cjs +0 -0
- /package/templates/{next-app → legacy-app}/.yarnrc.yml.hbs +0 -0
- /package/templates/{next-app → legacy-app}/README.md +0 -0
- /package/templates/{default-app → legacy-app}/app-config.local.yaml +0 -0
- /package/templates/{next-app → legacy-app}/app-config.production.yaml +0 -0
- /package/templates/{next-app → legacy-app}/backstage.json.hbs +0 -0
- /package/templates/{next-app → legacy-app}/catalog-info.yaml.hbs +0 -0
- /package/templates/{next-app → legacy-app}/examples/entities.yaml +0 -0
- /package/templates/{next-app → legacy-app}/examples/org.yaml +0 -0
- /package/templates/{next-app → legacy-app}/examples/template/content/catalog-info.yaml +0 -0
- /package/templates/{next-app → legacy-app}/examples/template/content/index.js +0 -0
- /package/templates/{next-app → legacy-app}/examples/template/content/package.json +0 -0
- /package/templates/{next-app → legacy-app}/examples/template/template.yaml +0 -0
- /package/templates/{next-app → legacy-app}/packages/README.md +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/.eslintignore +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/.eslintrc.js.hbs +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/android-chrome-192x192.png +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/apple-touch-icon.png +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/favicon-16x16.png +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/favicon-32x32.png +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/favicon.ico +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/index.html +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/manifest.json +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/robots.txt +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/public/safari-pinned-tab.svg +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/apis.ts +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/Root/LogoFull.tsx +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/Root/LogoIcon.tsx +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/Root/Root.tsx +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/Root/index.ts +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/catalog/EntityPage.tsx +0 -0
- /package/templates/{default-app → legacy-app}/packages/app/src/components/search/SearchPage.tsx +0 -0
- /package/templates/{next-app → legacy-app}/packages/app/src/setupTests.ts +0 -0
- /package/templates/{next-app → legacy-app}/packages/backend/.eslintrc.js.hbs +0 -0
- /package/templates/{next-app → legacy-app}/packages/backend/Dockerfile +0 -0
- /package/templates/{next-app → legacy-app}/packages/backend/README.md +0 -0
- /package/templates/{next-app → legacy-app}/playwright.config.ts +0 -0
- /package/templates/{next-app → legacy-app}/plugins/README.md +0 -0
- /package/templates/{next-app → legacy-app}/tsconfig.json +0 -0
- /package/templates/{next-app → legacy-app}/yarn.lock +0 -0
|
@@ -1,112 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
CatalogEntityPage,
|
|
5
|
-
CatalogIndexPage,
|
|
6
|
-
catalogPlugin,
|
|
7
|
-
} from '@backstage/plugin-catalog';
|
|
8
|
-
import {
|
|
9
|
-
CatalogImportPage,
|
|
10
|
-
catalogImportPlugin,
|
|
11
|
-
} from '@backstage/plugin-catalog-import';
|
|
12
|
-
import { ScaffolderPage, scaffolderPlugin } from '@backstage/plugin-scaffolder';
|
|
13
|
-
import { orgPlugin } from '@backstage/plugin-org';
|
|
14
|
-
import { SearchPage } from '@backstage/plugin-search';
|
|
15
|
-
import {
|
|
16
|
-
TechDocsIndexPage,
|
|
17
|
-
techdocsPlugin,
|
|
18
|
-
TechDocsReaderPage,
|
|
19
|
-
} from '@backstage/plugin-techdocs';
|
|
20
|
-
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
|
|
21
|
-
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
|
|
22
|
-
import { UserSettingsPage } from '@backstage/plugin-user-settings';
|
|
23
|
-
import { apis } from './apis';
|
|
24
|
-
import { entityPage } from './components/catalog/EntityPage';
|
|
25
|
-
import { searchPage } from './components/search/SearchPage';
|
|
26
|
-
import { Root } from './components/Root';
|
|
1
|
+
import { createApp } from '@backstage/frontend-defaults';
|
|
2
|
+
import catalogPlugin from '@backstage/plugin-catalog/alpha';
|
|
3
|
+
import { navModule } from './modules/nav';
|
|
27
4
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
OAuthRequestDialog,
|
|
31
|
-
SignInPage,
|
|
32
|
-
} from '@backstage/core-components';
|
|
33
|
-
import { createApp } from '@backstage/app-defaults';
|
|
34
|
-
import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
|
|
35
|
-
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
|
|
36
|
-
import { RequirePermission } from '@backstage/plugin-permission-react';
|
|
37
|
-
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
|
|
38
|
-
import { NotificationsPage } from '@backstage/plugin-notifications';
|
|
39
|
-
import { SignalsDisplay } from '@backstage/plugin-signals';
|
|
40
|
-
|
|
41
|
-
const app = createApp({
|
|
42
|
-
apis,
|
|
43
|
-
bindRoutes({ bind }) {
|
|
44
|
-
bind(catalogPlugin.externalRoutes, {
|
|
45
|
-
createComponent: scaffolderPlugin.routes.root,
|
|
46
|
-
viewTechDoc: techdocsPlugin.routes.docRoot,
|
|
47
|
-
createFromTemplate: scaffolderPlugin.routes.selectedTemplate,
|
|
48
|
-
});
|
|
49
|
-
bind(apiDocsPlugin.externalRoutes, {
|
|
50
|
-
registerApi: catalogImportPlugin.routes.importPage,
|
|
51
|
-
});
|
|
52
|
-
bind(scaffolderPlugin.externalRoutes, {
|
|
53
|
-
registerComponent: catalogImportPlugin.routes.importPage,
|
|
54
|
-
viewTechDoc: techdocsPlugin.routes.docRoot,
|
|
55
|
-
});
|
|
56
|
-
bind(orgPlugin.externalRoutes, {
|
|
57
|
-
catalogIndex: catalogPlugin.routes.catalogIndex,
|
|
58
|
-
});
|
|
59
|
-
},
|
|
60
|
-
components: {
|
|
61
|
-
SignInPage: props => <SignInPage {...props} auto providers={['guest']} />,
|
|
62
|
-
},
|
|
5
|
+
export default createApp({
|
|
6
|
+
features: [catalogPlugin, navModule],
|
|
63
7
|
});
|
|
64
|
-
|
|
65
|
-
const routes = (
|
|
66
|
-
<FlatRoutes>
|
|
67
|
-
<Route path="/" element={<Navigate to="catalog" />} />
|
|
68
|
-
<Route path="/catalog" element={<CatalogIndexPage />} />
|
|
69
|
-
<Route
|
|
70
|
-
path="/catalog/:namespace/:kind/:name"
|
|
71
|
-
element={<CatalogEntityPage />}
|
|
72
|
-
>
|
|
73
|
-
{entityPage}
|
|
74
|
-
</Route>
|
|
75
|
-
<Route path="/docs" element={<TechDocsIndexPage />} />
|
|
76
|
-
<Route
|
|
77
|
-
path="/docs/:namespace/:kind/:name/*"
|
|
78
|
-
element={<TechDocsReaderPage />}
|
|
79
|
-
>
|
|
80
|
-
<TechDocsAddons>
|
|
81
|
-
<ReportIssue />
|
|
82
|
-
</TechDocsAddons>
|
|
83
|
-
</Route>
|
|
84
|
-
<Route path="/create" element={<ScaffolderPage />} />
|
|
85
|
-
<Route path="/api-docs" element={<ApiExplorerPage />} />
|
|
86
|
-
<Route
|
|
87
|
-
path="/catalog-import"
|
|
88
|
-
element={
|
|
89
|
-
<RequirePermission permission={catalogEntityCreatePermission}>
|
|
90
|
-
<CatalogImportPage />
|
|
91
|
-
</RequirePermission>
|
|
92
|
-
}
|
|
93
|
-
/>
|
|
94
|
-
<Route path="/search" element={<SearchPage />}>
|
|
95
|
-
{searchPage}
|
|
96
|
-
</Route>
|
|
97
|
-
<Route path="/settings" element={<UserSettingsPage />} />
|
|
98
|
-
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
|
|
99
|
-
<Route path="/notifications" element={<NotificationsPage />} />
|
|
100
|
-
</FlatRoutes>
|
|
101
|
-
);
|
|
102
|
-
|
|
103
|
-
export default app.createRoot(
|
|
104
|
-
<>
|
|
105
|
-
<AlertDisplay />
|
|
106
|
-
<OAuthRequestDialog />
|
|
107
|
-
<SignalsDisplay />
|
|
108
|
-
<AppRouter>
|
|
109
|
-
<Root>{routes}</Root>
|
|
110
|
-
</AppRouter>
|
|
111
|
-
</>,
|
|
112
|
-
);
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"@backstage/plugin-catalog-backend-module-logs": "^{{version '@backstage/plugin-catalog-backend-module-logs'}}",
|
|
28
28
|
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^{{version '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'}}",
|
|
29
29
|
"@backstage/plugin-kubernetes-backend": "^{{version '@backstage/plugin-kubernetes-backend'}}",
|
|
30
|
+
"@backstage/plugin-mcp-actions-backend": "^{{version '@backstage/plugin-mcp-actions-backend'}}",
|
|
30
31
|
"@backstage/plugin-notifications-backend": "^{{version '@backstage/plugin-notifications-backend'}}",
|
|
31
32
|
"@backstage/plugin-permission-backend": "^{{version '@backstage/plugin-permission-backend'}}",
|
|
32
33
|
"@backstage/plugin-permission-backend-module-allow-all-policy": "^{{version '@backstage/plugin-permission-backend-module-allow-all-policy'}}",
|
|
@@ -63,4 +63,7 @@ backend.add(import('@backstage/plugin-kubernetes-backend'));
|
|
|
63
63
|
backend.add(import('@backstage/plugin-notifications-backend'));
|
|
64
64
|
backend.add(import('@backstage/plugin-signals-backend'));
|
|
65
65
|
|
|
66
|
+
// mcp actions plugin
|
|
67
|
+
backend.add(import('@backstage/plugin-mcp-actions-backend'));
|
|
68
|
+
|
|
66
69
|
backend.start();
|
|
@@ -24,7 +24,7 @@ export default defineConfig({
|
|
|
24
24
|
timeout: 60_000,
|
|
25
25
|
|
|
26
26
|
expect: {
|
|
27
|
-
timeout:
|
|
27
|
+
timeout: 30_000,
|
|
28
28
|
},
|
|
29
29
|
|
|
30
30
|
// Run your local dev server before starting the tests
|
|
@@ -33,9 +33,9 @@ export default defineConfig({
|
|
|
33
33
|
: [
|
|
34
34
|
{
|
|
35
35
|
command: 'yarn start app',
|
|
36
|
-
|
|
36
|
+
url: 'http://localhost:3000',
|
|
37
37
|
reuseExistingServer: true,
|
|
38
|
-
timeout:
|
|
38
|
+
timeout: 120_000,
|
|
39
39
|
},
|
|
40
40
|
{
|
|
41
41
|
command: 'yarn start backend',
|
|
@@ -1 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# This file is generated by running "yarn install" inside your project.
|
|
2
|
+
# Manual changes might be lost - proceed with caution!
|
|
3
|
+
|
|
4
|
+
__metadata:
|
|
5
|
+
version: 8
|
|
6
|
+
cacheKey: 10
|
|
7
|
+
|
|
8
|
+
"root-workspace-0b6124@workspace:.":
|
|
9
|
+
version: 0.0.0-use.local
|
|
10
|
+
resolution: "root-workspace-0b6124@workspace:."
|
|
11
|
+
languageName: unknown
|
|
12
|
+
linkType: soft
|
|
@@ -2,15 +2,6 @@ app:
|
|
|
2
2
|
title: Scaffolded Backstage App
|
|
3
3
|
baseUrl: http://localhost:3000
|
|
4
4
|
|
|
5
|
-
# Enable all packages by default, this will discover packages from packages/app/package.json
|
|
6
|
-
packages: all
|
|
7
|
-
|
|
8
|
-
extensions:
|
|
9
|
-
# Configure the catalog index page to be the root page, this is normally mounted on /catalog
|
|
10
|
-
- page:catalog:
|
|
11
|
-
config:
|
|
12
|
-
path: /
|
|
13
|
-
|
|
14
5
|
organization:
|
|
15
6
|
name: My Company
|
|
16
7
|
|
|
@@ -39,6 +30,12 @@ backend:
|
|
|
39
30
|
database:
|
|
40
31
|
client: better-sqlite3
|
|
41
32
|
connection: ':memory:'
|
|
33
|
+
# see https://backstage.io/docs/ai/mcp-actions#actions-configuration for more details
|
|
34
|
+
actions:
|
|
35
|
+
pluginSources:
|
|
36
|
+
- auth
|
|
37
|
+
- catalog
|
|
38
|
+
- scaffolder
|
|
42
39
|
# workingDirectory: /tmp # Use this to configure a working directory for the scaffolder, defaults to the OS temp-dir
|
|
43
40
|
|
|
44
41
|
integrations:
|
|
@@ -76,6 +73,25 @@ auth:
|
|
|
76
73
|
providers:
|
|
77
74
|
# See https://backstage.io/docs/auth/guest/provider
|
|
78
75
|
guest: {}
|
|
76
|
+
# see https://backstage.io/docs/ai/mcp-actions#dynamic-client-registration
|
|
77
|
+
# to learn more about dynamic client registration
|
|
78
|
+
experimentalDynamicClientRegistration:
|
|
79
|
+
enabled: false
|
|
80
|
+
# Optional: limit valid callback URLs for added security
|
|
81
|
+
# allowedRedirectUriPatterns:
|
|
82
|
+
# - cursor://*
|
|
83
|
+
# see https://backstage.io/docs/ai/mcp-actions#client-id-metadata-documents
|
|
84
|
+
# to learn more about client id metadata documents
|
|
85
|
+
experimentalClientIdMetadataDocuments:
|
|
86
|
+
enabled: true
|
|
87
|
+
# Optional: restrict which `client_id` URLs are allowed (defaults to ['*'])
|
|
88
|
+
# allowedClientIdPatterns:
|
|
89
|
+
# - 'https://example.com/*'
|
|
90
|
+
# - 'https://*.trusted-domain.com/*'
|
|
91
|
+
# Optional: restrict which redirect URIs are allowed (defaults to ['*'])
|
|
92
|
+
# allowedRedirectUriPatterns:
|
|
93
|
+
# - 'http://localhost:*'
|
|
94
|
+
# - 'https://*.example.com/*'
|
|
79
95
|
|
|
80
96
|
scaffolder:
|
|
81
97
|
# see https://backstage.io/docs/features/software-templates/configuration for software template options
|
|
@@ -120,3 +136,8 @@ kubernetes:
|
|
|
120
136
|
permission:
|
|
121
137
|
# setting this to `false` will disable permissions
|
|
122
138
|
enabled: true
|
|
139
|
+
|
|
140
|
+
# see https://backstage.io/docs/ai/mcp-actions for more details
|
|
141
|
+
mcpActions:
|
|
142
|
+
name: 'My Company Backstage' # defaults to "backstage"
|
|
143
|
+
description: 'Tools for managing your software catalog, creating new services from templates, and exploring your developer portal' # optional
|
|
@@ -27,7 +27,20 @@
|
|
|
27
27
|
"new": {
|
|
28
28
|
"globals": {
|
|
29
29
|
"license": "UNLICENSED"
|
|
30
|
-
}
|
|
30
|
+
},
|
|
31
|
+
"templates": [
|
|
32
|
+
"@backstage/cli-module-new/templates/legacy-frontend-plugin",
|
|
33
|
+
"@backstage/cli-module-new/templates/backend-plugin",
|
|
34
|
+
"@backstage/cli-module-new/templates/backend-plugin-module",
|
|
35
|
+
"@backstage/cli-module-new/templates/plugin-web-library",
|
|
36
|
+
"@backstage/cli-module-new/templates/plugin-node-library",
|
|
37
|
+
"@backstage/cli-module-new/templates/plugin-common-library",
|
|
38
|
+
"@backstage/cli-module-new/templates/web-library",
|
|
39
|
+
"@backstage/cli-module-new/templates/node-library",
|
|
40
|
+
"@backstage/cli-module-new/templates/cli-module",
|
|
41
|
+
"@backstage/cli-module-new/templates/catalog-provider-module",
|
|
42
|
+
"@backstage/cli-module-new/templates/scaffolder-backend-module"
|
|
43
|
+
]
|
|
31
44
|
}
|
|
32
45
|
}
|
|
33
46
|
},
|
|
@@ -23,11 +23,5 @@ test('App should render the welcome page', async ({ page }) => {
|
|
|
23
23
|
await expect(enterButton).toBeVisible();
|
|
24
24
|
await enterButton.click();
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
await expect(
|
|
28
|
-
nav.getByRole('link', { name: 'Catalog', exact: true }),
|
|
29
|
-
).toBeVisible();
|
|
30
|
-
await expect(
|
|
31
|
-
page.getByRole('link', { name: 'APIs', exact: true }),
|
|
32
|
-
).toBeVisible();
|
|
26
|
+
await expect(page.getByText('My Company Catalog')).toBeVisible();
|
|
33
27
|
});
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "app",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"bundled": true,
|
|
6
|
+
"backstage": {
|
|
7
|
+
"role": "frontend"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"start": "backstage-cli package start",
|
|
11
|
+
"build": "backstage-cli package build",
|
|
12
|
+
"clean": "backstage-cli package clean",
|
|
13
|
+
"test": "backstage-cli package test",
|
|
14
|
+
"lint": "backstage-cli package lint"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@backstage/app-defaults": "^{{version '@backstage/app-defaults'}}",
|
|
18
|
+
"@backstage/catalog-model": "^{{version '@backstage/catalog-model'}}",
|
|
19
|
+
"@backstage/cli": "^{{version '@backstage/cli'}}",
|
|
20
|
+
"@backstage/core-app-api": "^{{version '@backstage/core-app-api'}}",
|
|
21
|
+
"@backstage/core-components": "^{{version '@backstage/core-components'}}",
|
|
22
|
+
"@backstage/core-plugin-api": "^{{version '@backstage/core-plugin-api'}}",
|
|
23
|
+
"@backstage/integration-react": "^{{version '@backstage/integration-react'}}",
|
|
24
|
+
"@backstage/plugin-api-docs": "^{{version '@backstage/plugin-api-docs'}}",
|
|
25
|
+
"@backstage/plugin-catalog": "^{{version '@backstage/plugin-catalog'}}",
|
|
26
|
+
"@backstage/plugin-catalog-common": "^{{version '@backstage/plugin-catalog-common'}}",
|
|
27
|
+
"@backstage/plugin-catalog-graph": "^{{version '@backstage/plugin-catalog-graph'}}",
|
|
28
|
+
"@backstage/plugin-catalog-import": "^{{version '@backstage/plugin-catalog-import'}}",
|
|
29
|
+
"@backstage/plugin-catalog-react": "^{{version '@backstage/plugin-catalog-react'}}",
|
|
30
|
+
"@backstage/plugin-kubernetes": "^{{version '@backstage/plugin-kubernetes'}}",
|
|
31
|
+
"@backstage/plugin-notifications": "^{{ version '@backstage/plugin-notifications'}}",
|
|
32
|
+
"@backstage/plugin-org": "^{{version '@backstage/plugin-org'}}",
|
|
33
|
+
"@backstage/plugin-permission-react": "^{{version '@backstage/plugin-permission-react'}}",
|
|
34
|
+
"@backstage/plugin-scaffolder": "^{{version '@backstage/plugin-scaffolder'}}",
|
|
35
|
+
"@backstage/plugin-search": "^{{version '@backstage/plugin-search'}}",
|
|
36
|
+
"@backstage/plugin-search-react": "^{{version '@backstage/plugin-search-react'}}",
|
|
37
|
+
"@backstage/plugin-signals": "^{{ version '@backstage/plugin-signals'}}",
|
|
38
|
+
"@backstage/plugin-techdocs": "^{{version '@backstage/plugin-techdocs'}}",
|
|
39
|
+
"@backstage/plugin-techdocs-module-addons-contrib": "^{{version '@backstage/plugin-techdocs-module-addons-contrib'}}",
|
|
40
|
+
"@backstage/plugin-techdocs-react": "^{{version '@backstage/plugin-techdocs-react'}}",
|
|
41
|
+
"@backstage/plugin-user-settings": "^{{version '@backstage/plugin-user-settings'}}",
|
|
42
|
+
"@backstage/theme": "^{{version '@backstage/theme'}}",
|
|
43
|
+
"@backstage/ui": "^{{version '@backstage/ui'}}",
|
|
44
|
+
"@material-ui/core": "^4.12.2",
|
|
45
|
+
"@material-ui/icons": "^4.9.1",
|
|
46
|
+
"react": "^18.0.2",
|
|
47
|
+
"react-dom": "^18.0.2",
|
|
48
|
+
"react-router": "^6.30.2",
|
|
49
|
+
"react-router-dom": "^6.30.2"
|
|
50
|
+
},
|
|
51
|
+
"devDependencies": {
|
|
52
|
+
"@backstage/test-utils": "^{{version '@backstage/test-utils'}}",
|
|
53
|
+
"@playwright/test": "^1.32.3",
|
|
54
|
+
"@testing-library/dom": "^9.0.0",
|
|
55
|
+
"@testing-library/jest-dom": "^6.0.0",
|
|
56
|
+
"@testing-library/react": "^14.0.0",
|
|
57
|
+
"@testing-library/user-event": "^14.0.0",
|
|
58
|
+
"@types/react-dom": "*",
|
|
59
|
+
"cross-env": "^7.0.0"
|
|
60
|
+
},
|
|
61
|
+
"browserslist": {
|
|
62
|
+
"production": [
|
|
63
|
+
">0.2%",
|
|
64
|
+
"not dead",
|
|
65
|
+
"not op_mini all"
|
|
66
|
+
],
|
|
67
|
+
"development": [
|
|
68
|
+
"last 1 chrome version",
|
|
69
|
+
"last 1 firefox version",
|
|
70
|
+
"last 1 safari version"
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
"files": [
|
|
74
|
+
"dist"
|
|
75
|
+
]
|
|
76
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Navigate, Route } from 'react-router-dom';
|
|
2
|
+
import { apiDocsPlugin, ApiExplorerPage } from '@backstage/plugin-api-docs';
|
|
3
|
+
import {
|
|
4
|
+
CatalogEntityPage,
|
|
5
|
+
CatalogIndexPage,
|
|
6
|
+
catalogPlugin,
|
|
7
|
+
} from '@backstage/plugin-catalog';
|
|
8
|
+
import {
|
|
9
|
+
CatalogImportPage,
|
|
10
|
+
catalogImportPlugin,
|
|
11
|
+
} from '@backstage/plugin-catalog-import';
|
|
12
|
+
import { ScaffolderPage, scaffolderPlugin } from '@backstage/plugin-scaffolder';
|
|
13
|
+
import { orgPlugin } from '@backstage/plugin-org';
|
|
14
|
+
import { SearchPage } from '@backstage/plugin-search';
|
|
15
|
+
import {
|
|
16
|
+
TechDocsIndexPage,
|
|
17
|
+
techdocsPlugin,
|
|
18
|
+
TechDocsReaderPage,
|
|
19
|
+
} from '@backstage/plugin-techdocs';
|
|
20
|
+
import { TechDocsAddons } from '@backstage/plugin-techdocs-react';
|
|
21
|
+
import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib';
|
|
22
|
+
import { UserSettingsPage } from '@backstage/plugin-user-settings';
|
|
23
|
+
import { apis } from './apis';
|
|
24
|
+
import { entityPage } from './components/catalog/EntityPage';
|
|
25
|
+
import { searchPage } from './components/search/SearchPage';
|
|
26
|
+
import { Root } from './components/Root';
|
|
27
|
+
|
|
28
|
+
import {
|
|
29
|
+
AlertDisplay,
|
|
30
|
+
OAuthRequestDialog,
|
|
31
|
+
SignInPage,
|
|
32
|
+
} from '@backstage/core-components';
|
|
33
|
+
import { createApp } from '@backstage/app-defaults';
|
|
34
|
+
import { AppRouter, FlatRoutes } from '@backstage/core-app-api';
|
|
35
|
+
import { CatalogGraphPage } from '@backstage/plugin-catalog-graph';
|
|
36
|
+
import { RequirePermission } from '@backstage/plugin-permission-react';
|
|
37
|
+
import { catalogEntityCreatePermission } from '@backstage/plugin-catalog-common/alpha';
|
|
38
|
+
import { NotificationsPage } from '@backstage/plugin-notifications';
|
|
39
|
+
import { SignalsDisplay } from '@backstage/plugin-signals';
|
|
40
|
+
|
|
41
|
+
const app = createApp({
|
|
42
|
+
apis,
|
|
43
|
+
bindRoutes({ bind }) {
|
|
44
|
+
bind(catalogPlugin.externalRoutes, {
|
|
45
|
+
createComponent: scaffolderPlugin.routes.root,
|
|
46
|
+
viewTechDoc: techdocsPlugin.routes.docRoot,
|
|
47
|
+
createFromTemplate: scaffolderPlugin.routes.selectedTemplate,
|
|
48
|
+
});
|
|
49
|
+
bind(apiDocsPlugin.externalRoutes, {
|
|
50
|
+
registerApi: catalogImportPlugin.routes.importPage,
|
|
51
|
+
});
|
|
52
|
+
bind(scaffolderPlugin.externalRoutes, {
|
|
53
|
+
registerComponent: catalogImportPlugin.routes.importPage,
|
|
54
|
+
viewTechDoc: techdocsPlugin.routes.docRoot,
|
|
55
|
+
});
|
|
56
|
+
bind(orgPlugin.externalRoutes, {
|
|
57
|
+
catalogIndex: catalogPlugin.routes.catalogIndex,
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
components: {
|
|
61
|
+
SignInPage: props => <SignInPage {...props} auto providers={['guest']} />,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
const routes = (
|
|
66
|
+
<FlatRoutes>
|
|
67
|
+
<Route path="/" element={<Navigate to="catalog" />} />
|
|
68
|
+
<Route path="/catalog" element={<CatalogIndexPage />} />
|
|
69
|
+
<Route
|
|
70
|
+
path="/catalog/:namespace/:kind/:name"
|
|
71
|
+
element={<CatalogEntityPage />}
|
|
72
|
+
>
|
|
73
|
+
{entityPage}
|
|
74
|
+
</Route>
|
|
75
|
+
<Route path="/docs" element={<TechDocsIndexPage />} />
|
|
76
|
+
<Route
|
|
77
|
+
path="/docs/:namespace/:kind/:name/*"
|
|
78
|
+
element={<TechDocsReaderPage />}
|
|
79
|
+
>
|
|
80
|
+
<TechDocsAddons>
|
|
81
|
+
<ReportIssue />
|
|
82
|
+
</TechDocsAddons>
|
|
83
|
+
</Route>
|
|
84
|
+
<Route path="/create" element={<ScaffolderPage />} />
|
|
85
|
+
<Route path="/api-docs" element={<ApiExplorerPage />} />
|
|
86
|
+
<Route
|
|
87
|
+
path="/catalog-import"
|
|
88
|
+
element={
|
|
89
|
+
<RequirePermission permission={catalogEntityCreatePermission}>
|
|
90
|
+
<CatalogImportPage />
|
|
91
|
+
</RequirePermission>
|
|
92
|
+
}
|
|
93
|
+
/>
|
|
94
|
+
<Route path="/search" element={<SearchPage />}>
|
|
95
|
+
{searchPage}
|
|
96
|
+
</Route>
|
|
97
|
+
<Route path="/settings" element={<UserSettingsPage />} />
|
|
98
|
+
<Route path="/catalog-graph" element={<CatalogGraphPage />} />
|
|
99
|
+
<Route path="/notifications" element={<NotificationsPage />} />
|
|
100
|
+
</FlatRoutes>
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
export default app.createRoot(
|
|
104
|
+
<>
|
|
105
|
+
<AlertDisplay />
|
|
106
|
+
<OAuthRequestDialog />
|
|
107
|
+
<SignalsDisplay />
|
|
108
|
+
<AppRouter>
|
|
109
|
+
<Root>{routes}</Root>
|
|
110
|
+
</AppRouter>
|
|
111
|
+
</>,
|
|
112
|
+
);
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"@backstage/plugin-catalog-backend-module-logs": "^{{version '@backstage/plugin-catalog-backend-module-logs'}}",
|
|
28
28
|
"@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "^{{version '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'}}",
|
|
29
29
|
"@backstage/plugin-kubernetes-backend": "^{{version '@backstage/plugin-kubernetes-backend'}}",
|
|
30
|
+
"@backstage/plugin-mcp-actions-backend": "^{{version '@backstage/plugin-mcp-actions-backend'}}",
|
|
30
31
|
"@backstage/plugin-notifications-backend": "^{{version '@backstage/plugin-notifications-backend'}}",
|
|
31
32
|
"@backstage/plugin-permission-backend": "^{{version '@backstage/plugin-permission-backend'}}",
|
|
32
33
|
"@backstage/plugin-permission-backend-module-allow-all-policy": "^{{version '@backstage/plugin-permission-backend-module-allow-all-policy'}}",
|
|
@@ -63,4 +63,7 @@ backend.add(import('@backstage/plugin-kubernetes-backend'));
|
|
|
63
63
|
backend.add(import('@backstage/plugin-notifications-backend'));
|
|
64
64
|
backend.add(import('@backstage/plugin-signals-backend'));
|
|
65
65
|
|
|
66
|
+
// mcp actions plugin
|
|
67
|
+
backend.add(import('@backstage/plugin-mcp-actions-backend'));
|
|
68
|
+
|
|
66
69
|
backend.start();
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "app",
|
|
3
|
-
"version": "0.0.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"bundled": true,
|
|
6
|
-
"backstage": {
|
|
7
|
-
"role": "frontend"
|
|
8
|
-
},
|
|
9
|
-
"scripts": {
|
|
10
|
-
"start": "backstage-cli package start",
|
|
11
|
-
"build": "backstage-cli package build",
|
|
12
|
-
"clean": "backstage-cli package clean",
|
|
13
|
-
"test": "backstage-cli package test",
|
|
14
|
-
"lint": "backstage-cli package lint"
|
|
15
|
-
},
|
|
16
|
-
"dependencies": {
|
|
17
|
-
"@backstage/cli": "^{{ version '@backstage/cli'}}",
|
|
18
|
-
"@backstage/core-components": "^{{ version '@backstage/core-components'}}",
|
|
19
|
-
"@backstage/core-plugin-api": "^{{ version '@backstage/core-plugin-api'}}",
|
|
20
|
-
"@backstage/frontend-defaults": "^{{ version '@backstage/frontend-defaults'}}",
|
|
21
|
-
"@backstage/frontend-plugin-api": "^{{ version '@backstage/frontend-plugin-api'}}",
|
|
22
|
-
"@backstage/integration-react": "^{{ version '@backstage/integration-react'}}",
|
|
23
|
-
"@backstage/plugin-api-docs": "^{{ version '@backstage/plugin-api-docs'}}",
|
|
24
|
-
"@backstage/plugin-app-react": "^{{ version '@backstage/plugin-app-react'}}",
|
|
25
|
-
"@backstage/plugin-app-visualizer": "^{{ version '@backstage/plugin-app-visualizer'}}",
|
|
26
|
-
"@backstage/plugin-catalog": "^{{ version '@backstage/plugin-catalog'}}",
|
|
27
|
-
"@backstage/plugin-catalog-graph": "^{{ version '@backstage/plugin-catalog-graph'}}",
|
|
28
|
-
"@backstage/plugin-catalog-import": "^{{ version '@backstage/plugin-catalog-import'}}",
|
|
29
|
-
"@backstage/plugin-kubernetes": "^{{ version '@backstage/plugin-kubernetes'}}",
|
|
30
|
-
"@backstage/plugin-notifications": "^{{ version '@backstage/plugin-notifications'}}",
|
|
31
|
-
"@backstage/plugin-org": "^{{ version '@backstage/plugin-org'}}",
|
|
32
|
-
"@backstage/plugin-scaffolder": "^{{ version '@backstage/plugin-scaffolder'}}",
|
|
33
|
-
"@backstage/plugin-search": "^{{ version '@backstage/plugin-search'}}",
|
|
34
|
-
"@backstage/plugin-signals": "^{{ version '@backstage/plugin-signals'}}",
|
|
35
|
-
"@backstage/plugin-techdocs": "^{{ version '@backstage/plugin-techdocs'}}",
|
|
36
|
-
"@backstage/plugin-techdocs-module-addons-contrib": "^{{ version '@backstage/plugin-techdocs-module-addons-contrib'}}",
|
|
37
|
-
"@backstage/plugin-user-settings": "^{{ version '@backstage/plugin-user-settings'}}",
|
|
38
|
-
"@backstage/ui": "^{{ version '@backstage/ui'}}",
|
|
39
|
-
"@material-ui/core": "^4.12.2",
|
|
40
|
-
"@material-ui/icons": "^4.9.1",
|
|
41
|
-
"react": "^18.0.2",
|
|
42
|
-
"react-dom": "^18.0.2",
|
|
43
|
-
"react-router": "^6.30.2",
|
|
44
|
-
"react-router-dom": "^6.30.2"
|
|
45
|
-
},
|
|
46
|
-
"devDependencies": {
|
|
47
|
-
"@backstage/frontend-test-utils": "^{{ version '@backstage/frontend-test-utils'}}",
|
|
48
|
-
"@playwright/test": "^1.32.3",
|
|
49
|
-
"@testing-library/dom": "^9.0.0",
|
|
50
|
-
"@testing-library/jest-dom": "^6.0.0",
|
|
51
|
-
"@testing-library/react": "^14.0.0",
|
|
52
|
-
"@testing-library/user-event": "^14.0.0",
|
|
53
|
-
"@types/react-dom": "*",
|
|
54
|
-
"cross-env": "^7.0.0"
|
|
55
|
-
},
|
|
56
|
-
"browserslist": {
|
|
57
|
-
"production": [
|
|
58
|
-
">0.2%",
|
|
59
|
-
"not dead",
|
|
60
|
-
"not op_mini all"
|
|
61
|
-
],
|
|
62
|
-
"development": [
|
|
63
|
-
"last 1 chrome version",
|
|
64
|
-
"last 1 firefox version",
|
|
65
|
-
"last 1 safari version"
|
|
66
|
-
]
|
|
67
|
-
},
|
|
68
|
-
"files": [
|
|
69
|
-
"dist"
|
|
70
|
-
]
|
|
71
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|