From 957397ceeb95b3c07d004667da7c41ef8e490103 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 21:54:22 -0700 Subject: [PATCH 01/42] feat: add a new system metadata service Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 4 + .../src/entrypoints/systemMetadata/index.ts | 17 + .../lib/DefaultSystemMetadataService.ts | 61 + .../systemMetadataServiceFactory.ts | 41 + .../backend-plugin-api/src/alpha/index.ts | 13 + .../definitions/SystemMetadataService.ts | 25 + packages/backend-split/.eslintrc.js | 1 + packages/backend-split/CHANGELOG.md | 3516 +++++++++++++++++ packages/backend-split/README.md | 8 + packages/backend-split/app-config.split.yaml | 14 + packages/backend-split/catalog-info.yaml | 9 + packages/backend-split/knip-report.md | 12 + packages/backend-split/package.json | 73 + .../src/experimental/features.http | 5 + .../src/experimental}/instanceMetadata.ts | 12 +- .../src/experimental/systemMetadata.ts | 93 + packages/backend-split/src/index.ts | 37 + packages/backend-split/src/instrumentation.js | 34 + packages/backend/app-config.split.yaml | 9 + packages/backend/package.json | 4 +- .../src/experimental/instanceMetadata.ts | 50 + .../src/experimental/systemMetadata.ts | 93 + packages/backend/src/index.ts | 5 +- yarn.lock | 52 + 24 files changed, 4184 insertions(+), 4 deletions(-) create mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/index.ts create mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts create mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts create mode 100644 packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts create mode 100644 packages/backend-split/.eslintrc.js create mode 100644 packages/backend-split/CHANGELOG.md create mode 100644 packages/backend-split/README.md create mode 100644 packages/backend-split/app-config.split.yaml create mode 100644 packages/backend-split/catalog-info.yaml create mode 100644 packages/backend-split/knip-report.md create mode 100644 packages/backend-split/package.json create mode 100644 packages/backend-split/src/experimental/features.http rename packages/{backend/src => backend-split/src/experimental}/instanceMetadata.ts (77%) create mode 100644 packages/backend-split/src/experimental/systemMetadata.ts create mode 100644 packages/backend-split/src/index.ts create mode 100644 packages/backend-split/src/instrumentation.js create mode 100644 packages/backend/app-config.split.yaml create mode 100644 packages/backend/src/experimental/instanceMetadata.ts create mode 100644 packages/backend/src/experimental/systemMetadata.ts diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 149aa275bd..27a3d0529a 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -21,6 +21,7 @@ "exports": { ".": "./src/index.ts", "./auditor": "./src/entrypoints/auditor/index.ts", + "./alpha/systemMetadata": "./src/entrypoints/systemMetadata/index.ts", "./auth": "./src/entrypoints/auth/index.ts", "./cache": "./src/entrypoints/cache/index.ts", "./database": "./src/entrypoints/database/index.ts", @@ -49,6 +50,9 @@ "auditor": [ "src/entrypoints/auditor/index.ts" ], + "alpha/systemMetadata": [ + "src/entrypoints/systemMetadata/index.ts" + ], "auth": [ "src/entrypoints/auth/index.ts" ], diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/index.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/index.ts new file mode 100644 index 0000000000..502a217e48 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/index.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2024 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. + */ +export { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; +export { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts new file mode 100644 index 0000000000..77030f2e43 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -0,0 +1,61 @@ +/* + * Copyright 2024 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 { + LoggerService, + RootConfigService, +} from '@backstage/backend-plugin-api'; +import { + BackstageInstance, + SystemMetadataService, +} from '@backstage/backend-plugin-api/alpha'; + +export class DefaultSystemMetadataService implements SystemMetadataService { + private readonly logger: LoggerService; + private readonly config: RootConfigService; + constructor(options: { logger: LoggerService; config: RootConfigService }) { + this.logger = options.logger; + this.config = options.config; + } + + public static create(pluginEnv: { + logger: LoggerService; + config: RootConfigService; + }) { + return new DefaultSystemMetadataService(pluginEnv); + } + + listInstances() { + const endpoints = + this.config.getOptionalConfigArray('discovery.instances') ?? []; + const instances: BackstageInstance[] = []; + for (const endpoint of endpoints) { + const baseUrl = endpoint.getOptionalString('baseUrl'); + if (baseUrl) { + this.logger.info(`Found instance at ${baseUrl}`); + instances.push({ url: baseUrl }); + } else { + this.logger.warn( + `Instance ${endpoint.get( + 'target', + )} is missing a 'baseUrl' property. This is required for the system metadata service.`, + ); + } + } + this.logger.info(`Found ${instances.length} instances.`); + return Promise.resolve(instances); + } +} diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts new file mode 100644 index 0000000000..59ff9f4253 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts @@ -0,0 +1,41 @@ +/* + * Copyright 2024 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 { + coreServices, + createServiceFactory, +} from '@backstage/backend-plugin-api'; +import { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; +import { systemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; + +/** + * Metadata about an entire Backstage system, a collection of Backstage instances. + * + * @alpha + */ +export const systemMetadataServiceFactory = createServiceFactory({ + service: systemMetadataServiceRef, + deps: { + logger: coreServices.logger, + config: coreServices.rootConfig, + }, + async factory({ logger, config }) { + return DefaultSystemMetadataService.create({ + logger, + config, + }); + }, +}); diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index b1edd68adc..3302b978b6 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -23,3 +23,16 @@ export type { export type { ActionsService, ActionsServiceAction } from './ActionsService'; export { actionsRegistryServiceRef, actionsServiceRef } from './refs'; + +import { createServiceRef } from '@backstage/backend-plugin-api'; + +export const systemMetadataServiceRef = createServiceRef< + import('./services/definitions/SystemMetadataService').SystemMetadataService +>({ + id: 'core.systemMetadata', +}); + +export type { + BackstageInstance, + SystemMetadataService, +} from './services/definitions/SystemMetadataService'; diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts new file mode 100644 index 0000000000..9d85412beb --- /dev/null +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2024 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. + */ + +type Target = string | { internal: string; external: string }; + +export interface BackstageInstance { + url: Target; +} + +export interface SystemMetadataService { + listInstances(): Promise; +} diff --git a/packages/backend-split/.eslintrc.js b/packages/backend-split/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/packages/backend-split/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-split/CHANGELOG.md b/packages/backend-split/CHANGELOG.md new file mode 100644 index 0000000000..27c2a067b7 --- /dev/null +++ b/packages/backend-split/CHANGELOG.md @@ -0,0 +1,3516 @@ +# example-backend + +## 0.0.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.28.0-next.2 + - @backstage/backend-defaults@0.6.0-next.2 + - @backstage/plugin-catalog-backend@1.29.0-next.2 + - @backstage/backend-plugin-api@1.1.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2 + - @backstage/plugin-notifications-backend@0.5.0-next.2 + - @backstage/plugin-permission-node@0.8.6-next.2 + - @backstage/plugin-app-backend@0.4.3-next.2 + - @backstage/plugin-auth-backend@0.24.1-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2 + - @backstage/plugin-devtools-backend@0.5.0-next.2 + - @backstage/plugin-events-backend@0.4.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.1-next.2 + - @backstage/plugin-proxy-backend@0.5.9-next.2 + - @backstage/plugin-search-backend@1.8.0-next.2 + - @backstage/plugin-search-backend-node@1.3.6-next.2 + - @backstage/plugin-signals-backend@0.2.4-next.2 + - @backstage/plugin-techdocs-backend@1.11.4-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.2 + - @backstage/plugin-auth-node@0.5.5-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.52-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 + - @backstage/catalog-model@1.7.2-next.0 + - @backstage/plugin-permission-common@0.8.3-next.0 + +## 0.0.33-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-backend@0.24.1-next.1 + - @backstage/plugin-auth-node@0.5.5-next.1 + - @backstage/plugin-catalog-backend@1.29.0-next.1 + - @backstage/backend-defaults@0.6.0-next.1 + - @backstage/plugin-events-backend@0.4.0-next.1 + - @backstage/plugin-search-backend@1.8.0-next.1 + - @backstage/plugin-devtools-backend@0.5.0-next.1 + - @backstage/plugin-search-backend-node@1.3.6-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 + - @backstage/plugin-notifications-backend@0.4.4-next.1 + - @backstage/plugin-permission-backend@0.5.52-next.1 + - @backstage/plugin-techdocs-backend@1.11.4-next.1 + - @backstage/plugin-signals-backend@0.2.4-next.1 + - @backstage/plugin-proxy-backend@0.5.9-next.1 + - @backstage/plugin-app-backend@0.4.3-next.1 + - @backstage/backend-plugin-api@1.1.0-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 + - @backstage/plugin-kubernetes-backend@0.19.1-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.1 + - @backstage/plugin-permission-node@0.8.6-next.1 + - @backstage/plugin-scaffolder-backend@1.28.0-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.1 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.1 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-permission-common@0.8.2 + +## 0.0.33-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.6.0-next.0 + - @backstage/plugin-scaffolder-backend@1.28.0-next.0 + - @backstage/backend-plugin-api@1.0.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 + - @backstage/plugin-app-backend@0.4.3-next.0 + - @backstage/plugin-catalog-backend@1.28.1-next.0 + - @backstage/plugin-auth-node@0.5.5-next.0 + - @backstage/plugin-permission-backend@0.5.52-next.0 + - @backstage/plugin-devtools-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.4-next.0 + - @backstage/plugin-events-backend@0.3.17-next.0 + - @backstage/plugin-kubernetes-backend@0.19.1-next.0 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-auth-backend@0.24.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 + - @backstage/plugin-notifications-backend@0.4.4-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.0 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-permission-node@0.8.6-next.0 + - @backstage/plugin-proxy-backend@0.5.9-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.3-next.0 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.4-next.0 + - @backstage/plugin-search-backend@1.7.1-next.0 + - @backstage/plugin-search-backend-node@1.3.6-next.0 + - @backstage/plugin-techdocs-backend@1.11.4-next.0 + +## 0.0.32 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.3 + - @backstage/plugin-app-backend@0.4.0 + - @backstage/plugin-search-backend-module-catalog@0.2.5 + - @backstage/plugin-scaffolder-backend@1.27.0 + - @backstage/plugin-auth-backend@0.24.0 + - @backstage/plugin-catalog-backend@1.28.0 + - @backstage/plugin-search-backend@1.7.0 + - @backstage/plugin-events-backend@0.3.16 + - @backstage/plugin-kubernetes-backend@0.19.0 + - @backstage/plugin-auth-node@0.5.4 + - @backstage/plugin-search-backend-module-explore@0.2.5 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4 + - @backstage/backend-plugin-api@1.0.2 + - @backstage/plugin-notifications-backend@0.4.3 + - @backstage/plugin-signals-backend@0.2.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2 + - @backstage/plugin-search-backend-node@1.3.5 + - @backstage/plugin-permission-common@0.8.2 + - @backstage/plugin-proxy-backend@0.5.8 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2 + - @backstage/catalog-model@1.7.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 + - @backstage/plugin-devtools-backend@0.4.2 + - @backstage/plugin-permission-backend@0.5.51 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2 + - @backstage/plugin-permission-node@0.8.5 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2 + - @backstage/plugin-techdocs-backend@1.11.2 + +## 0.0.32-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-backend@0.3.16-next.3 + - @backstage/plugin-catalog-backend@1.28.0-next.3 + - @backstage/backend-defaults@0.5.3-next.3 + - @backstage/plugin-scaffolder-backend@1.27.0-next.3 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.3 + - @backstage/plugin-notifications-backend@0.4.3-next.3 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.3 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.3 + - @backstage/plugin-search-backend@1.7.0-next.3 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 + - @backstage/plugin-search-backend-node@1.3.5-next.3 + - @backstage/plugin-signals-backend@0.2.3-next.3 + - @backstage/plugin-techdocs-backend@1.11.2-next.3 + +## 0.0.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.28.0-next.2 + - @backstage/plugin-search-backend@1.7.0-next.2 + - @backstage/plugin-kubernetes-backend@0.19.0-next.2 + - @backstage/backend-defaults@0.5.3-next.2 + - @backstage/plugin-events-backend@0.3.16-next.2 + - @backstage/plugin-auth-backend@0.24.0-next.2 + - @backstage/plugin-auth-node@0.5.4-next.2 + - @backstage/plugin-notifications-backend@0.4.3-next.2 + - @backstage/plugin-scaffolder-backend@1.27.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 + - @backstage/plugin-techdocs-backend@1.11.2-next.2 + - @backstage/backend-plugin-api@1.0.2-next.2 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 + - @backstage/plugin-devtools-backend@0.4.2-next.2 + - @backstage/plugin-permission-backend@0.5.51-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.2 + - @backstage/plugin-proxy-backend@0.5.8-next.2 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 + - @backstage/plugin-search-backend-node@1.3.5-next.2 + - @backstage/plugin-signals-backend@0.2.3-next.2 + +## 0.0.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.19.0-next.1 + - @backstage/plugin-scaffolder-backend@1.27.0-next.1 + - @backstage/backend-defaults@0.5.3-next.1 + - @backstage/backend-plugin-api@1.0.2-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.1 + - @backstage/plugin-auth-backend@0.24.0-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.1 + - @backstage/plugin-auth-node@0.5.4-next.1 + - @backstage/plugin-catalog-backend@1.27.2-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 + - @backstage/plugin-devtools-backend@0.4.2-next.1 + - @backstage/plugin-events-backend@0.3.16-next.1 + - @backstage/plugin-notifications-backend@0.4.3-next.1 + - @backstage/plugin-permission-backend@0.5.51-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.1 + - @backstage/plugin-proxy-backend@0.5.8-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.1 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.1 + - @backstage/plugin-search-backend@1.6.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 + - @backstage/plugin-search-backend-node@1.3.5-next.1 + - @backstage/plugin-signals-backend@0.2.3-next.1 + - @backstage/plugin-techdocs-backend@1.11.2-next.1 + +## 0.0.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 + - @backstage/plugin-scaffolder-backend@1.26.3-next.0 + - @backstage/plugin-auth-backend@0.24.0-next.0 + - @backstage/plugin-events-backend@0.3.15-next.0 + - @backstage/plugin-auth-node@0.5.4-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 + - @backstage/backend-defaults@0.5.3-next.0 + - @backstage/plugin-notifications-backend@0.4.3-next.0 + - @backstage/plugin-signals-backend@0.2.3-next.0 + - @backstage/backend-plugin-api@1.0.2-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.77-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.0 + - @backstage/plugin-catalog-backend@1.27.2-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 + - @backstage/plugin-devtools-backend@0.4.2-next.0 + - @backstage/plugin-kubernetes-backend@0.18.8-next.0 + - @backstage/plugin-permission-backend@0.5.51-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.5-next.0 + - @backstage/plugin-proxy-backend@0.5.8-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.0 + - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.0 + - @backstage/plugin-search-backend@1.6.2-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 + - @backstage/plugin-search-backend-node@1.3.5-next.0 + - @backstage/plugin-techdocs-backend@1.11.2-next.0 + +## 0.0.31 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-catalog@0.2.3 + - @backstage/plugin-search-backend-module-techdocs@0.3.0 + - @backstage/plugin-scaffolder-backend@1.26.0 + - @backstage/backend-defaults@0.5.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1 + - @backstage/plugin-search-backend@1.6.0 + - @backstage/plugin-auth-node@0.5.3 + - @backstage/plugin-app-backend@0.3.76 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.2 + - @backstage/plugin-search-backend-module-explore@0.2.3 + - @backstage/plugin-notifications-backend@0.4.1 + - @backstage/plugin-search-backend-node@1.3.3 + - @backstage/plugin-kubernetes-backend@0.18.7 + - @backstage/plugin-permission-backend@0.5.50 + - @backstage/plugin-devtools-backend@0.4.1 + - @backstage/plugin-techdocs-backend@1.11.0 + - @backstage/plugin-catalog-backend@1.27.0 + - @backstage/plugin-permission-node@0.8.4 + - @backstage/plugin-signals-backend@0.2.1 + - @backstage/plugin-events-backend@0.3.13 + - @backstage/plugin-proxy-backend@0.5.7 + - @backstage/plugin-auth-backend@0.23.1 + - @backstage/backend-plugin-api@1.0.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1 + - @backstage/plugin-permission-common@0.8.1 + +## 0.0.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.2 + - @backstage/backend-defaults@0.5.1-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.1 + - @backstage/plugin-scaffolder-backend@1.26.0-next.2 + - @backstage/plugin-search-backend@1.5.18-next.2 + - @backstage/plugin-auth-node@0.5.3-next.1 + - @backstage/plugin-app-backend@0.3.76-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.2 + - @backstage/plugin-techdocs-backend@1.10.14-next.2 + - @backstage/backend-plugin-api@1.0.1-next.1 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend@0.23.1-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.1 + - @backstage/plugin-devtools-backend@0.4.1-next.1 + - @backstage/plugin-events-backend@0.3.13-next.1 + - @backstage/plugin-kubernetes-backend@0.18.7-next.1 + - @backstage/plugin-notifications-backend@0.4.1-next.1 + - @backstage/plugin-permission-backend@0.5.50-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.4-next.1 + - @backstage/plugin-proxy-backend@0.5.7-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.2 + - @backstage/plugin-search-backend-node@1.3.3-next.2 + - @backstage/plugin-signals-backend@0.2.1-next.1 + +## 0.0.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.1 + - @backstage/plugin-catalog-backend@1.26.2-next.1 + - @backstage/backend-defaults@0.5.1-next.1 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.1 + - @backstage/plugin-search-backend@1.5.18-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1 + - @backstage/plugin-search-backend-node@1.3.3-next.1 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.1 + +## 0.0.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.26.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 + - @backstage/plugin-notifications-backend@0.4.1-next.0 + - @backstage/plugin-search-backend-node@1.3.3-next.0 + - @backstage/plugin-kubernetes-backend@0.18.7-next.0 + - @backstage/plugin-permission-backend@0.5.50-next.0 + - @backstage/backend-defaults@0.5.1-next.0 + - @backstage/plugin-devtools-backend@0.4.1-next.0 + - @backstage/plugin-techdocs-backend@1.10.14-next.0 + - @backstage/plugin-catalog-backend@1.26.1-next.0 + - @backstage/plugin-permission-node@0.8.4-next.0 + - @backstage/plugin-signals-backend@0.2.1-next.0 + - @backstage/plugin-events-backend@0.3.13-next.0 + - @backstage/plugin-search-backend@1.5.18-next.0 + - @backstage/plugin-proxy-backend@0.5.7-next.0 + - @backstage/plugin-auth-backend@0.23.1-next.0 + - @backstage/plugin-app-backend@0.3.75-next.0 + - @backstage/plugin-auth-node@0.5.3-next.0 + - @backstage/backend-plugin-api@1.0.1-next.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 + - @backstage/plugin-permission-common@0.8.1 + +## 0.0.30 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.0 + - @backstage/plugin-kubernetes-backend@0.18.6 + - @backstage/plugin-signals-backend@0.2.0 + - @backstage/plugin-techdocs-backend@1.10.13 + - @backstage/backend-plugin-api@1.0.0 + - @backstage/plugin-search-backend@1.5.17 + - @backstage/plugin-auth-node@0.5.2 + - @backstage/plugin-devtools-backend@0.4.0 + - @backstage/plugin-app-backend@0.3.74 + - @backstage/plugin-notifications-backend@0.4.0 + - @backstage/plugin-scaffolder-backend@1.25.0 + - @backstage/plugin-auth-backend@0.23.0 + - @backstage/catalog-model@1.7.0 + - @backstage/plugin-catalog-backend@1.26.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.2 + - @backstage/plugin-search-backend-module-catalog@0.2.2 + - @backstage/plugin-search-backend-module-explore@0.2.2 + - @backstage/plugin-permission-node@0.8.3 + - @backstage/plugin-permission-backend@0.5.49 + - @backstage/plugin-proxy-backend@0.5.6 + - @backstage/plugin-scaffolder-backend-module-github@0.5.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-node@1.3.2 + +## 0.0.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.0-next.2 + - @backstage/plugin-devtools-backend@0.4.0-next.2 + - @backstage/plugin-scaffolder-backend@1.25.0-next.2 + - @backstage/plugin-auth-node@0.5.2-next.2 + - @backstage/plugin-auth-backend@0.23.0-next.2 + - @backstage/backend-plugin-api@1.0.0-next.2 + - @backstage/plugin-catalog-backend@1.26.0-next.2 + - @backstage/plugin-app-backend@0.3.74-next.2 + - @backstage/plugin-notifications-backend@0.4.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.2 + - @backstage/plugin-kubernetes-backend@0.18.6-next.2 + - @backstage/plugin-permission-backend@0.5.49-next.2 + - @backstage/plugin-permission-node@0.8.3-next.2 + - @backstage/plugin-search-backend@1.5.17-next.2 + - @backstage/plugin-signals-backend@0.2.0-next.2 + - @backstage/plugin-techdocs-backend@1.10.13-next.2 + - @backstage/plugin-search-backend-module-explore@0.2.2-next.2 + - @backstage/catalog-model@1.6.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.2 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-proxy-backend@0.5.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2 + - @backstage/plugin-search-backend-node@1.3.2-next.2 + +## 0.0.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.5.0-next.1 + - @backstage/plugin-auth-node@0.5.2-next.1 + - @backstage/plugin-catalog-backend@1.25.3-next.1 + - @backstage/plugin-scaffolder-backend@1.25.0-next.1 + - @backstage/plugin-notifications-backend@0.4.0-next.1 + - @backstage/plugin-kubernetes-backend@0.18.6-next.1 + - @backstage/plugin-techdocs-backend@1.10.13-next.1 + - @backstage/backend-plugin-api@0.9.0-next.1 + - @backstage/catalog-model@1.6.0 + - @backstage/plugin-app-backend@0.3.74-next.1 + - @backstage/plugin-auth-backend@0.23.0-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1 + - @backstage/plugin-devtools-backend@0.4.0-next.1 + - @backstage/plugin-permission-backend@0.5.49-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.1 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-permission-node@0.8.3-next.1 + - @backstage/plugin-proxy-backend@0.5.6-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.1 + - @backstage/plugin-search-backend@1.5.17-next.1 + - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1 + - @backstage/plugin-search-backend-module-explore@0.2.2-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1 + - @backstage/plugin-search-backend-node@1.3.2-next.1 + - @backstage/plugin-signals-backend@0.2.0-next.1 + +## 0.0.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-backend@1.10.13-next.0 + - @backstage/backend-plugin-api@0.9.0-next.0 + - @backstage/plugin-search-backend@1.5.17-next.0 + - @backstage/plugin-kubernetes-backend@0.18.6-next.0 + - @backstage/plugin-scaffolder-backend@1.25.0-next.0 + - @backstage/plugin-app-backend@0.3.74-next.0 + - @backstage/plugin-signals-backend@0.2.0-next.0 + - @backstage/backend-defaults@0.5.0-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0 + - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0 + - @backstage/plugin-search-backend-module-explore@0.2.2-next.0 + - @backstage/plugin-permission-node@0.8.3-next.0 + - @backstage/plugin-auth-backend@0.23.0-next.0 + - @backstage/plugin-catalog-backend@1.25.3-next.0 + - @backstage/plugin-permission-backend@0.5.49-next.0 + - @backstage/plugin-proxy-backend@0.5.6-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0 + - @backstage/plugin-devtools-backend@0.4.0-next.0 + - @backstage/plugin-notifications-backend@0.4.0-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.0 + - @backstage/plugin-auth-node@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.3.2-next.0 + - @backstage/catalog-model@1.6.0 + - @backstage/plugin-permission-common@0.8.1 + +## 0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.4.2 + - @backstage/plugin-scaffolder-backend-module-github@0.4.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.20 + - @backstage/backend-plugin-api@0.8.0 + - @backstage/plugin-catalog-backend@1.25.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.41 + - @backstage/plugin-search-backend-node@1.3.0 + - @backstage/plugin-scaffolder-backend@1.24.0 + - @backstage/plugin-techdocs-backend@1.10.10 + - @backstage/plugin-permission-common@0.8.1 + - @backstage/plugin-search-backend-module-techdocs@0.2.0 + - @backstage/plugin-search-backend-module-explore@0.2.0 + - @backstage/plugin-notifications-backend@0.3.4 + - @backstage/plugin-kubernetes-backend@0.18.4 + - @backstage/plugin-permission-backend@0.5.47 + - @backstage/plugin-devtools-backend@0.3.9 + - @backstage/plugin-signals-backend@0.1.9 + - @backstage/plugin-proxy-backend@0.5.4 + - @backstage/plugin-auth-backend@0.22.10 + - @backstage/plugin-app-backend@0.3.72 + - @backstage/plugin-auth-node@0.5.0 + - @backstage/plugin-permission-node@0.8.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.3.0 + - @backstage/plugin-search-backend-module-catalog@0.2.0 + - @backstage/plugin-search-backend@1.5.15 + - @backstage/catalog-model@1.6.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.9 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20 + +## 0.0.29-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3 + - @backstage/plugin-notifications-backend@0.3.4-next.3 + - @backstage/backend-plugin-api@0.8.0-next.3 + - @backstage/plugin-techdocs-backend@1.10.10-next.3 + - @backstage/backend-defaults@0.4.2-next.3 + - @backstage/catalog-model@1.6.0-next.0 + - @backstage/plugin-scaffolder-backend@1.23.1-next.3 + - @backstage/backend-tasks@0.5.28-next.3 + - @backstage/plugin-app-backend@0.3.72-next.3 + - @backstage/plugin-auth-backend@0.22.10-next.3 + - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.3 + - @backstage/plugin-auth-node@0.5.0-next.3 + - @backstage/plugin-catalog-backend@1.24.1-next.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.3 + - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3 + - @backstage/plugin-devtools-backend@0.3.9-next.3 + - @backstage/plugin-kubernetes-backend@0.18.4-next.3 + - @backstage/plugin-permission-backend@0.5.47-next.3 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.3 + - @backstage/plugin-permission-common@0.8.1-next.1 + - @backstage/plugin-permission-node@0.8.1-next.3 + - @backstage/plugin-proxy-backend@0.5.4-next.3 + - @backstage/plugin-search-backend@1.5.15-next.3 + - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3 + - @backstage/plugin-search-backend-module-explore@0.1.29-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3 + - @backstage/plugin-search-backend-node@1.2.28-next.3 + - @backstage/plugin-signals-backend@0.1.9-next.3 + +## 0.0.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.4.2-next.2 + - @backstage/backend-plugin-api@0.8.0-next.2 + - @backstage/plugin-scaffolder-backend@1.23.1-next.2 + - @backstage/plugin-permission-common@0.8.1-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.29-next.2 + - @backstage/plugin-notifications-backend@0.3.4-next.2 + - @backstage/plugin-kubernetes-backend@0.18.4-next.2 + - @backstage/plugin-permission-backend@0.5.47-next.2 + - @backstage/plugin-devtools-backend@0.3.9-next.2 + - @backstage/plugin-techdocs-backend@1.10.10-next.2 + - @backstage/plugin-catalog-backend@1.24.1-next.2 + - @backstage/plugin-signals-backend@0.1.9-next.2 + - @backstage/plugin-proxy-backend@0.5.4-next.2 + - @backstage/plugin-auth-backend@0.22.10-next.2 + - @backstage/plugin-app-backend@0.3.72-next.2 + - @backstage/plugin-auth-node@0.5.0-next.2 + - @backstage/plugin-permission-node@0.8.1-next.2 + - @backstage/plugin-search-backend-node@1.2.28-next.2 + - @backstage/plugin-search-backend@1.5.15-next.2 + - @backstage/backend-tasks@0.5.28-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2 + - @backstage/catalog-model@1.5.0 + +## 0.0.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.1 + - @backstage/plugin-techdocs-backend@1.10.10-next.1 + - @backstage/plugin-permission-common@0.8.1-next.0 + - @backstage/plugin-catalog-backend@1.24.1-next.1 + - @backstage/plugin-permission-node@0.8.1-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.29-next.1 + - @backstage/backend-plugin-api@0.7.1-next.1 + - @backstage/plugin-scaffolder-backend@1.23.1-next.1 + - @backstage/plugin-auth-backend@0.22.10-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1 + - @backstage/backend-defaults@0.4.2-next.1 + - @backstage/plugin-app-backend@0.3.72-next.1 + - @backstage/plugin-devtools-backend@0.3.9-next.1 + - @backstage/plugin-proxy-backend@0.5.4-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1 + - @backstage/plugin-kubernetes-backend@0.18.4-next.1 + - @backstage/plugin-permission-backend@0.5.47-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.1 + - @backstage/plugin-search-backend@1.5.15-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1 + - @backstage/plugin-search-backend-node@1.2.28-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.1 + - @backstage/backend-tasks@0.5.28-next.1 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.1 + - @backstage/plugin-auth-node@0.4.18-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1 + - @backstage/plugin-notifications-backend@0.3.4-next.1 + - @backstage/plugin-signals-backend@0.1.9-next.1 + +## 0.0.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.4.2-next.0 + - @backstage/plugin-catalog-backend@1.24.1-next.0 + - @backstage/plugin-devtools-backend@0.3.9-next.0 + - @backstage/backend-plugin-api@0.7.1-next.0 + - @backstage/backend-tasks@0.5.28-next.0 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-app-backend@0.3.72-next.0 + - @backstage/plugin-auth-backend@0.22.10-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.0 + - @backstage/plugin-auth-node@0.4.18-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.0 + - @backstage/plugin-kubernetes-backend@0.18.4-next.0 + - @backstage/plugin-notifications-backend@0.3.4-next.0 + - @backstage/plugin-permission-backend@0.5.47-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.0 + - @backstage/plugin-permission-common@0.8.0 + - @backstage/plugin-permission-node@0.8.1-next.0 + - @backstage/plugin-proxy-backend@0.5.4-next.0 + - @backstage/plugin-scaffolder-backend@1.23.1-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.0 + - @backstage/plugin-search-backend@1.5.15-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.29-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.29-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.0 + - @backstage/plugin-search-backend-node@1.2.28-next.0 + - @backstage/plugin-signals-backend@0.1.9-next.0 + - @backstage/plugin-techdocs-backend@1.10.10-next.0 + +## 0.0.28 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.7.0 + - @backstage/backend-defaults@0.4.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.19 + - @backstage/backend-tasks@0.5.27 + - @backstage/plugin-scaffolder-backend@1.23.0 + - @backstage/plugin-scaffolder-backend-module-github@0.4.0 + - @backstage/plugin-permission-common@0.8.0 + - @backstage/plugin-permission-backend@0.5.46 + - @backstage/plugin-permission-node@0.8.0 + - @backstage/plugin-techdocs-backend@1.10.9 + - @backstage/plugin-notifications-backend@0.3.3 + - @backstage/plugin-auth-node@0.4.17 + - @backstage/plugin-search-backend@1.5.14 + - @backstage/plugin-catalog-backend@1.24.0 + - @backstage/plugin-app-backend@0.3.71 + - @backstage/plugin-auth-backend@0.22.9 + - @backstage/plugin-auth-backend-module-github-provider@0.1.19 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.8 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.5 + - @backstage/plugin-catalog-backend-module-openapi@0.1.40 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9 + - @backstage/plugin-devtools-backend@0.3.8 + - @backstage/plugin-kubernetes-backend@0.18.3 + - @backstage/plugin-proxy-backend@0.5.3 + - @backstage/plugin-search-backend-module-catalog@0.1.28 + - @backstage/plugin-search-backend-module-explore@0.1.28 + - @backstage/plugin-search-backend-module-techdocs@0.1.27 + - @backstage/plugin-search-backend-node@1.2.27 + - @backstage/plugin-signals-backend@0.1.8 + - @backstage/catalog-model@1.5.0 + +## 0.0.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.23.0-next.2 + +## 0.0.28-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-backend@1.10.9-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.4.0-next.1 + - @backstage/plugin-catalog-backend@1.24.0-next.1 + - @backstage/backend-defaults@0.3.4-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.27-next.1 + - @backstage/backend-plugin-api@0.6.22-next.1 + - @backstage/backend-tasks@0.5.27-next.1 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-app-backend@0.3.71-next.1 + - @backstage/plugin-auth-backend@0.22.9-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.19-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.8-next.1 + - @backstage/plugin-auth-node@0.4.17-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.5-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.40-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9-next.1 + - @backstage/plugin-devtools-backend@0.3.8-next.1 + - @backstage/plugin-kubernetes-backend@0.18.3-next.1 + - @backstage/plugin-notifications-backend@0.3.3-next.1 + - @backstage/plugin-permission-backend@0.5.46-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.19-next.1 + - @backstage/plugin-permission-common@0.7.14 + - @backstage/plugin-permission-node@0.7.33-next.1 + - @backstage/plugin-proxy-backend@0.5.3-next.1 + - @backstage/plugin-scaffolder-backend@1.23.0-next.1 + - @backstage/plugin-search-backend@1.5.14-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.28-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.28-next.1 + - @backstage/plugin-search-backend-node@1.2.27-next.1 + - @backstage/plugin-signals-backend@0.1.8-next.1 + +## 0.0.28-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.21-next.0 + - @backstage/backend-defaults@0.3.3-next.0 + - @backstage/backend-tasks@0.5.26-next.0 + - @backstage/plugin-scaffolder-backend@1.23.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.4.0-next.0 + - @backstage/plugin-notifications-backend@0.3.2-next.0 + - @backstage/plugin-app-backend@0.3.70-next.0 + - @backstage/plugin-auth-backend@0.22.8-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.18-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.7-next.0 + - @backstage/plugin-auth-node@0.4.16-next.0 + - @backstage/plugin-catalog-backend@1.23.2-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.4-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.39-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.19-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.8-next.0 + - @backstage/plugin-devtools-backend@0.3.7-next.0 + - @backstage/plugin-kubernetes-backend@0.18.2-next.0 + - @backstage/plugin-permission-backend@0.5.45-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.18-next.0 + - @backstage/plugin-permission-node@0.7.32-next.0 + - @backstage/plugin-proxy-backend@0.5.2-next.0 + - @backstage/plugin-search-backend@1.5.13-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.27-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.27-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.26-next.0 + - @backstage/plugin-search-backend-node@1.2.26-next.0 + - @backstage/plugin-signals-backend@0.1.7-next.0 + - @backstage/plugin-techdocs-backend@1.10.8-next.0 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-permission-common@0.7.14 + +## 0.0.27 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.19 + - @backstage/backend-tasks@0.5.24 + - @backstage/plugin-auth-node@0.4.14 + - @backstage/plugin-auth-backend@0.22.6 + - @backstage/plugin-techdocs-backend@1.10.6 + - @backstage/plugin-scaffolder-backend-module-github@0.3.0 + - @backstage/plugin-devtools-backend@0.3.5 + - @backstage/plugin-catalog-backend@1.23.0 + - @backstage/plugin-search-backend@1.5.10 + - @backstage/plugin-proxy-backend@0.5.0 + - @backstage/plugin-app-backend@0.3.68 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2 + - @backstage/plugin-auth-backend-module-github-provider@0.1.16 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.5 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6 + - @backstage/plugin-catalog-backend-module-openapi@0.1.37 + - @backstage/plugin-search-backend-module-techdocs@0.1.24 + - @backstage/plugin-search-backend-module-catalog@0.1.25 + - @backstage/plugin-search-backend-module-explore@0.1.25 + - @backstage/plugin-notifications-backend@0.3.0 + - @backstage/plugin-kubernetes-backend@0.18.0 + - @backstage/plugin-permission-backend@0.5.43 + - @backstage/plugin-scaffolder-backend@1.22.9 + - @backstage/plugin-signals-backend@0.1.5 + - @backstage/backend-defaults@0.3.0 + - @backstage/plugin-search-backend-node@1.2.24 + - @backstage/plugin-permission-node@0.7.30 + - @backstage/plugin-permission-common@0.7.14 + - @backstage/catalog-model@1.5.0 + +## 0.0.27-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.19-next.3 + - @backstage/plugin-auth-node@0.4.14-next.3 + - @backstage/backend-defaults@0.3.0-next.3 + - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.3 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.3 + - @backstage/plugin-scaffolder-backend-module-github@0.3.0-next.3 + - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.3 + - @backstage/plugin-search-backend-module-catalog@0.1.25-next.3 + - @backstage/plugin-search-backend-module-explore@0.1.25-next.3 + - @backstage/plugin-notifications-backend@0.3.0-next.3 + - @backstage/plugin-search-backend-node@1.2.24-next.3 + - @backstage/plugin-kubernetes-backend@0.18.0-next.3 + - @backstage/plugin-permission-backend@0.5.43-next.3 + - @backstage/plugin-scaffolder-backend@1.22.8-next.3 + - @backstage/plugin-permission-common@0.7.14-next.0 + - @backstage/plugin-devtools-backend@0.3.5-next.3 + - @backstage/plugin-techdocs-backend@1.10.6-next.3 + - @backstage/plugin-catalog-backend@1.23.0-next.3 + - @backstage/plugin-permission-node@0.7.30-next.3 + - @backstage/plugin-signals-backend@0.1.5-next.3 + - @backstage/plugin-search-backend@1.5.10-next.3 + - @backstage/plugin-proxy-backend@0.5.0-next.3 + - @backstage/plugin-auth-backend@0.22.6-next.3 + - @backstage/plugin-app-backend@0.3.68-next.3 + - @backstage/backend-tasks@0.5.24-next.3 + - @backstage/catalog-model@1.5.0 + +## 0.0.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-backend@1.10.6-next.2 + - @backstage/backend-plugin-api@0.6.19-next.2 + - @backstage/backend-defaults@0.3.0-next.2 + - @backstage/plugin-permission-node@0.7.30-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.3.0-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.2 + - @backstage/plugin-scaffolder-backend@1.22.8-next.2 + - @backstage/backend-tasks@0.5.24-next.2 + - @backstage/plugin-app-backend@0.3.68-next.2 + - @backstage/plugin-auth-backend@0.22.6-next.2 + - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.2 + - @backstage/plugin-auth-node@0.4.14-next.2 + - @backstage/plugin-catalog-backend@1.23.0-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.2 + - @backstage/plugin-devtools-backend@0.3.5-next.2 + - @backstage/plugin-kubernetes-backend@0.18.0-next.2 + - @backstage/plugin-notifications-backend@0.3.0-next.2 + - @backstage/plugin-permission-backend@0.5.43-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.1 + - @backstage/plugin-proxy-backend@0.5.0-next.2 + - @backstage/plugin-search-backend@1.5.10-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.25-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.25-next.2 + - @backstage/plugin-search-backend-node@1.2.24-next.2 + - @backstage/plugin-signals-backend@0.1.5-next.2 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.27-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.24-next.1 + - @backstage/backend-plugin-api@0.6.19-next.1 + - @backstage/plugin-permission-node@0.7.30-next.1 + - @backstage/plugin-search-backend@1.5.10-next.1 + - @backstage/backend-defaults@0.3.0-next.1 + - @backstage/plugin-kubernetes-backend@0.18.0-next.1 + - @backstage/plugin-catalog-backend@1.23.0-next.1 + - @backstage/plugin-scaffolder-backend@1.22.8-next.1 + - @backstage/plugin-notifications-backend@0.3.0-next.1 + - @backstage/plugin-app-backend@0.3.68-next.1 + - @backstage/plugin-auth-backend@0.22.6-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.1 + - @backstage/plugin-auth-node@0.4.14-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.1 + - @backstage/plugin-devtools-backend@0.3.5-next.1 + - @backstage/plugin-permission-backend@0.5.43-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.0 + - @backstage/plugin-proxy-backend@0.5.0-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.2.9-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.25-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.25-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.1 + - @backstage/plugin-search-backend-node@1.2.24-next.1 + - @backstage/plugin-signals-backend@0.1.5-next.1 + - @backstage/plugin-techdocs-backend@1.10.6-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.1 + +## 0.0.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.24-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.2.9-next.0 + - @backstage/plugin-devtools-backend@0.3.5-next.0 + - @backstage/plugin-techdocs-backend@1.10.6-next.0 + - @backstage/plugin-catalog-backend@1.23.0-next.0 + - @backstage/plugin-search-backend@1.5.10-next.0 + - @backstage/plugin-proxy-backend@0.5.0-next.0 + - @backstage/plugin-auth-backend@0.22.6-next.0 + - @backstage/plugin-app-backend@0.3.68-next.0 + - @backstage/plugin-search-backend-node@1.2.24-next.0 + - @backstage/plugin-signals-backend@0.1.5-next.0 + - @backstage/backend-defaults@0.2.19-next.0 + - @backstage/backend-plugin-api@0.6.19-next.0 + - @backstage/plugin-scaffolder-backend@1.22.8-next.0 + - @backstage/plugin-kubernetes-backend@0.17.2-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.25-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.25-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.0 + - @backstage/plugin-auth-node@0.4.14-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.0 + - @backstage/plugin-notifications-backend@0.2.2-next.0 + - @backstage/plugin-permission-backend@0.5.43-next.0 + - @backstage/plugin-permission-node@0.7.30-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.0 + - @backstage/catalog-model@1.5.0 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.26 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.22.6 + - @backstage/plugin-catalog-backend@1.22.0 + - @backstage/plugin-scaffolder-backend-module-github@0.2.8 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5 + - @backstage/plugin-search-backend-module-catalog@0.1.24 + - @backstage/plugin-notifications-backend@0.2.1 + - @backstage/catalog-model@1.5.0 + - @backstage/backend-plugin-api@0.6.18 + - @backstage/backend-tasks@0.5.23 + - @backstage/plugin-auth-backend@0.22.5 + - @backstage/plugin-app-backend@0.3.66 + - @backstage/plugin-devtools-backend@0.3.4 + - @backstage/plugin-signals-backend@0.1.4 + - @backstage/plugin-search-backend-node@1.2.22 + - @backstage/plugin-search-backend@1.5.8 + - @backstage/plugin-auth-backend-module-github-provider@0.1.15 + - @backstage/plugin-techdocs-backend@1.10.5 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.4 + - @backstage/backend-defaults@0.2.18 + - @backstage/plugin-search-backend-module-explore@0.1.24 + - @backstage/plugin-auth-node@0.4.13 + - @backstage/plugin-search-backend-module-techdocs@0.1.23 + - @backstage/plugin-catalog-backend-module-openapi@0.1.36 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16 + - @backstage/plugin-kubernetes-backend@0.17.1 + - @backstage/plugin-permission-backend@0.5.42 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15 + - @backstage/plugin-permission-node@0.7.29 + - @backstage/plugin-proxy-backend@0.4.16 + +## 0.0.26-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.1 + - @backstage/plugin-notifications-backend@0.2.1-next.1 + - @backstage/plugin-catalog-backend@1.22.0-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.1 + - @backstage/plugin-scaffolder-backend@1.22.5-next.1 + - @backstage/plugin-search-backend@1.5.8-next.1 + - @backstage/backend-defaults@0.2.18-next.1 + - @backstage/plugin-app-backend@0.3.66-next.1 + - @backstage/plugin-kubernetes-backend@0.17.1-next.1 + - @backstage/backend-tasks@0.5.23-next.1 + - @backstage/plugin-auth-backend@0.22.5-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.4-next.1 + - @backstage/plugin-auth-node@0.4.13-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.36-next.1 + - @backstage/plugin-devtools-backend@0.3.4-next.1 + - @backstage/plugin-permission-backend@0.5.42-next.1 + - @backstage/plugin-permission-node@0.7.29-next.1 + - @backstage/plugin-proxy-backend@0.4.16-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.2.8-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.24-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.24-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.1 + - @backstage/plugin-search-backend-node@1.2.22-next.1 + - @backstage/plugin-signals-backend@0.1.4-next.1 + - @backstage/plugin-techdocs-backend@1.10.5-next.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.15-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15-next.1 + - @backstage/backend-plugin-api@0.6.18-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1-next.1 + +## 0.0.26-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-github@0.2.8-next.0 + - @backstage/plugin-catalog-backend@1.22.0-next.0 + - @backstage/plugin-scaffolder-backend@1.22.5-next.0 + - @backstage/catalog-model@1.5.0-next.0 + - @backstage/plugin-search-backend-node@1.2.22-next.0 + - @backstage/plugin-search-backend@1.5.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.23-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.4-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.23-next.0 + - @backstage/plugin-auth-backend@0.22.5-next.0 + - @backstage/plugin-auth-node@0.4.13-next.0 + - @backstage/plugin-notifications-backend@0.2.1-next.0 + - @backstage/backend-plugin-api@0.6.18-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.36-next.0 + - @backstage/backend-defaults@0.2.18-next.0 + - @backstage/plugin-app-backend@0.3.66-next.0 + - @backstage/plugin-kubernetes-backend@0.17.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.0 + - @backstage/plugin-techdocs-backend@1.10.5-next.0 + - @backstage/backend-tasks@0.5.23-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.15-next.0 + - @backstage/plugin-devtools-backend@0.3.4-next.0 + - @backstage/plugin-permission-backend@0.5.42-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15-next.0 + - @backstage/plugin-permission-common@0.7.13 + - @backstage/plugin-permission-node@0.7.29-next.0 + - @backstage/plugin-proxy-backend@0.4.16-next.0 + - @backstage/plugin-signals-backend@0.1.4-next.0 + +## 0.0.25 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-badges-backend@0.4.0 + - @backstage/plugin-kubernetes-backend@0.17.0 + - @backstage/plugin-azure-devops-backend@0.6.4 + - @backstage/plugin-techdocs-backend@1.10.4 + - @backstage/plugin-notifications-backend@0.2.0 + - @backstage/plugin-permission-node@0.7.28 + - @backstage/plugin-auth-backend@0.22.4 + - @backstage/plugin-catalog-backend@1.21.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.0 + - @backstage/backend-plugin-api@0.6.17 + - @backstage/plugin-search-backend@1.5.7 + - @backstage/plugin-todo-backend@0.3.16 + - @backstage/plugin-scaffolder-backend-module-github@0.2.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.22 + - @backstage/plugin-search-backend-module-explore@0.1.21 + - @backstage/plugin-entity-feedback-backend@0.2.14 + - @backstage/plugin-search-backend-node@1.2.21 + - @backstage/plugin-lighthouse-backend@0.4.10 + - @backstage/plugin-permission-backend@0.5.41 + - @backstage/plugin-sonarqube-backend@0.2.19 + - @backstage/plugin-devtools-backend@0.3.3 + - @backstage/plugin-linguist-backend@0.5.15 + - @backstage/plugin-playlist-backend@0.3.21 + - @backstage/plugin-jenkins-backend@0.4.4 + - @backstage/backend-tasks@0.5.22 + - @backstage/plugin-nomad-backend@0.1.19 + - @backstage/plugin-adr-backend@0.4.14 + - @backstage/plugin-app-backend@0.3.65 + - @backstage/plugin-auth-node@0.4.12 + - @backstage/plugin-signals-backend@0.1.3 + - @backstage/plugin-proxy-backend@0.4.15 + - @backstage/plugin-scaffolder-backend@1.22.4 + - @backstage/backend-defaults@0.2.17 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.3 + - @backstage/plugin-catalog-backend-module-openapi@0.1.35 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4 + - @backstage/plugin-search-backend-module-catalog@0.1.22 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14 + - @backstage/catalog-model@1.4.5 + - @backstage/plugin-auth-backend-module-github-provider@0.1.14 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.17.0-next.1 + - @backstage/plugin-azure-devops-backend@0.6.4-next.1 + - @backstage/plugin-techdocs-backend@1.10.4-next.1 + - @backstage/plugin-auth-backend@0.22.4-next.1 + - @backstage/backend-plugin-api@0.6.17-next.1 + - @backstage/plugin-auth-node@0.4.12-next.1 + - @backstage/plugin-proxy-backend@0.4.15-next.1 + - @backstage/plugin-scaffolder-backend@1.22.4-next.1 + - @backstage/plugin-catalog-backend@1.21.1-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.2.7-next.1 + - @backstage/plugin-app-backend@0.3.65-next.1 + - @backstage/plugin-notifications-backend@0.2.0-next.1 + - @backstage/backend-defaults@0.2.17-next.1 + - @backstage/backend-tasks@0.5.22-next.1 + - @backstage/plugin-adr-backend@0.4.14-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.3-next.1 + - @backstage/plugin-badges-backend@0.3.14-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.35-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.1 + - @backstage/plugin-devtools-backend@0.3.3-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.14-next.1 + - @backstage/plugin-jenkins-backend@0.4.4-next.1 + - @backstage/plugin-lighthouse-backend@0.4.10-next.1 + - @backstage/plugin-linguist-backend@0.5.15-next.1 + - @backstage/plugin-nomad-backend@0.1.19-next.1 + - @backstage/plugin-permission-backend@0.5.41-next.1 + - @backstage/plugin-permission-node@0.7.28-next.1 + - @backstage/plugin-playlist-backend@0.3.21-next.1 + - @backstage/plugin-search-backend@1.5.7-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.22-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.21-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.1 + - @backstage/plugin-search-backend-node@1.2.21-next.1 + - @backstage/plugin-signals-backend@0.1.3-next.1 + - @backstage/plugin-sonarqube-backend@0.2.19-next.1 + - @backstage/plugin-todo-backend@0.3.16-next.1 + - @backstage/catalog-model@1.4.5 + - @backstage/plugin-auth-backend-module-github-provider@0.1.14-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.11-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14-next.1 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-backend@1.10.4-next.0 + - @backstage/plugin-catalog-backend@1.21.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.11-next.0 + - @backstage/plugin-kubernetes-backend@0.16.4-next.0 + - @backstage/plugin-signals-backend@0.1.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.0 + - @backstage/plugin-scaffolder-backend@1.22.4-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.35-next.0 + - @backstage/backend-defaults@0.2.17-next.0 + - @backstage/plugin-app-backend@0.3.65-next.0 + - @backstage/backend-plugin-api@0.6.17-next.0 + - @backstage/backend-tasks@0.5.22-next.0 + - @backstage/catalog-model@1.4.5 + - @backstage/plugin-adr-backend@0.4.14-next.0 + - @backstage/plugin-auth-backend@0.22.4-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.14-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.3-next.0 + - @backstage/plugin-auth-node@0.4.12-next.0 + - @backstage/plugin-azure-devops-backend@0.6.4-next.0 + - @backstage/plugin-badges-backend@0.3.14-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.0 + - @backstage/plugin-devtools-backend@0.3.3-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.14-next.0 + - @backstage/plugin-jenkins-backend@0.4.4-next.0 + - @backstage/plugin-lighthouse-backend@0.4.10-next.0 + - @backstage/plugin-linguist-backend@0.5.15-next.0 + - @backstage/plugin-nomad-backend@0.1.19-next.0 + - @backstage/plugin-notifications-backend@0.1.3-next.0 + - @backstage/plugin-permission-backend@0.5.41-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14-next.0 + - @backstage/plugin-permission-common@0.7.13 + - @backstage/plugin-permission-node@0.7.28-next.0 + - @backstage/plugin-playlist-backend@0.3.21-next.0 + - @backstage/plugin-proxy-backend@0.4.15-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.2.7-next.0 + - @backstage/plugin-search-backend@1.5.7-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.22-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.21-next.0 + - @backstage/plugin-search-backend-node@1.2.21-next.0 + - @backstage/plugin-sonarqube-backend@0.2.19-next.0 + - @backstage/plugin-todo-backend@0.3.16-next.0 + +## 0.0.24 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.21.0 + - @backstage/plugin-kubernetes-backend@0.16.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.3 + - @backstage/plugin-permission-backend@0.5.40 + - @backstage/plugin-proxy-backend@0.4.14 + - @backstage/plugin-scaffolder-backend@1.22.3 + - @backstage/plugin-jenkins-backend@0.4.3 + - @backstage/plugin-auth-backend@0.22.3 + - @backstage/plugin-auth-node@0.4.11 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.34 + - @backstage/plugin-azure-devops-backend@0.6.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.10 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.14 + - @backstage/plugin-lighthouse-backend@0.4.9 + - @backstage/plugin-linguist-backend@0.5.14 + - @backstage/plugin-search-backend-module-catalog@0.1.21 + - @backstage/plugin-search-backend-module-techdocs@0.1.21 + - @backstage/plugin-todo-backend@0.3.15 + - @backstage/backend-defaults@0.2.16 + - @backstage/plugin-app-backend@0.3.64 + - @backstage/plugin-adr-backend@0.4.13 + - @backstage/plugin-badges-backend@0.3.13 + - @backstage/plugin-entity-feedback-backend@0.2.13 + - @backstage/plugin-notifications-backend@0.1.2 + - @backstage/plugin-playlist-backend@0.3.20 + - @backstage/plugin-techdocs-backend@1.10.3 + - @backstage/plugin-auth-backend-module-github-provider@0.1.13 + - @backstage/backend-plugin-api@0.6.16 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.13 + - @backstage/plugin-permission-node@0.7.27 + - @backstage/plugin-signals-backend@0.1.2 + - @backstage/backend-tasks@0.5.21 + - @backstage/plugin-devtools-backend@0.3.2 + - @backstage/plugin-nomad-backend@0.1.18 + - @backstage/plugin-scaffolder-backend-module-github@0.2.6 + - @backstage/plugin-search-backend@1.5.6 + - @backstage/plugin-search-backend-module-explore@0.1.20 + - @backstage/plugin-search-backend-node@1.2.20 + - @backstage/plugin-sonarqube-backend@0.2.18 + - @backstage/catalog-model@1.4.5 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.23 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.20.0 + - @backstage/plugin-kubernetes-backend@0.16.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.2 + - @backstage/plugin-permission-backend@0.5.39 + - @backstage/plugin-catalog-backend-module-openapi@0.1.33 + - @backstage/plugin-auth-backend@0.22.2 + - @backstage/plugin-azure-devops-backend@0.6.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.9 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.13 + - @backstage/plugin-jenkins-backend@0.4.2 + - @backstage/plugin-lighthouse-backend@0.4.8 + - @backstage/plugin-linguist-backend@0.5.13 + - @backstage/plugin-scaffolder-backend@1.22.2 + - @backstage/plugin-search-backend-module-catalog@0.1.20 + - @backstage/plugin-search-backend-module-techdocs@0.1.20 + - @backstage/plugin-todo-backend@0.3.14 + - @backstage/backend-defaults@0.2.15 + - @backstage/plugin-app-backend@0.3.63 + - @backstage/plugin-adr-backend@0.4.12 + - @backstage/plugin-auth-node@0.4.10 + - @backstage/plugin-badges-backend@0.3.12 + - @backstage/plugin-entity-feedback-backend@0.2.12 + - @backstage/plugin-notifications-backend@0.1.1 + - @backstage/plugin-playlist-backend@0.3.19 + - @backstage/plugin-techdocs-backend@1.10.2 + - @backstage/backend-tasks@0.5.20 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.1 + - @backstage/plugin-devtools-backend@0.3.1 + - @backstage/plugin-nomad-backend@0.1.17 + - @backstage/plugin-permission-node@0.7.26 + - @backstage/plugin-proxy-backend@0.4.13 + - @backstage/plugin-scaffolder-backend-module-github@0.2.5 + - @backstage/plugin-search-backend@1.5.5 + - @backstage/plugin-search-backend-module-explore@0.1.19 + - @backstage/plugin-search-backend-node@1.2.19 + - @backstage/plugin-signals-backend@0.1.1 + - @backstage/plugin-sonarqube-backend@0.2.17 + - @backstage/backend-plugin-api@0.6.15 + - @backstage/catalog-model@1.4.5 + - @backstage/plugin-auth-backend-module-github-provider@0.1.12 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.12 + - @backstage/plugin-permission-common@0.7.13 + +## 0.0.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.19.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.1 + - @backstage/plugin-permission-backend@0.5.38 + - @backstage/plugin-catalog-backend-module-openapi@0.1.32 + - @backstage/plugin-auth-backend@0.22.1 + - @backstage/plugin-azure-devops-backend@0.6.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.8 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.12 + - @backstage/plugin-jenkins-backend@0.4.1 + - @backstage/plugin-kubernetes-backend@0.16.1 + - @backstage/plugin-lighthouse-backend@0.4.7 + - @backstage/plugin-linguist-backend@0.5.12 + - @backstage/plugin-scaffolder-backend@1.22.1 + - @backstage/plugin-search-backend-module-catalog@0.1.19 + - @backstage/plugin-search-backend-module-techdocs@0.1.19 + - @backstage/plugin-todo-backend@0.3.13 + - @backstage/plugin-auth-backend-module-github-provider@0.1.11 + - @backstage/plugin-techdocs-backend@1.10.1 + +## 0.0.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-notifications-backend@0.1.0 + - @backstage/plugin-scaffolder-backend@1.22.0 + - @backstage/plugin-linguist-backend@0.5.11 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.4.0 + - @backstage/plugin-catalog-backend@1.18.0 + - @backstage/plugin-devtools-backend@0.3.0 + - @backstage/plugin-jenkins-backend@0.4.0 + - @backstage/plugin-search-backend@1.5.4 + - @backstage/plugin-auth-node@0.4.9 + - @backstage/plugin-lighthouse-backend@0.4.6 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.0 + - @backstage/plugin-azure-devops-backend@0.6.0 + - @backstage/plugin-permission-backend@0.5.37 + - @backstage/plugin-signals-backend@0.1.0 + - @backstage/plugin-nomad-backend@0.1.16 + - @backstage/plugin-entity-feedback-backend@0.2.11 + - @backstage/plugin-playlist-backend@0.3.18 + - @backstage/backend-plugin-api@0.6.14 + - @backstage/plugin-auth-backend@0.22.0 + - @backstage/plugin-techdocs-backend@1.10.0 + - @backstage/plugin-scaffolder-backend-module-github@0.2.4 + - @backstage/plugin-permission-common@0.7.13 + - @backstage/plugin-search-backend-module-techdocs@0.1.18 + - @backstage/plugin-search-backend-module-catalog@0.1.18 + - @backstage/plugin-search-backend-module-explore@0.1.18 + - @backstage/backend-defaults@0.2.14 + - @backstage/plugin-kubernetes-backend@0.16.0 + - @backstage/plugin-adr-backend@0.4.11 + - @backstage/plugin-proxy-backend@0.4.12 + - @backstage/backend-tasks@0.5.19 + - @backstage/plugin-search-backend-node@1.2.18 + - @backstage/plugin-app-backend@0.3.62 + - @backstage/plugin-permission-node@0.7.25 + - @backstage/plugin-todo-backend@0.3.12 + - @backstage/plugin-badges-backend@0.3.11 + - @backstage/plugin-auth-backend-module-github-provider@0.1.11 + - @backstage/plugin-catalog-backend-module-openapi@0.1.31 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11 + - @backstage/plugin-sonarqube-backend@0.2.16 + - @backstage/catalog-model@1.4.5 + +## 0.0.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.22.0-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.2 + - @backstage/plugin-catalog-backend@1.18.0-next.2 + - @backstage/plugin-devtools-backend@0.3.0-next.2 + - @backstage/plugin-jenkins-backend@0.4.0-next.2 + - @backstage/plugin-search-backend@1.5.4-next.2 + - @backstage/plugin-techdocs-backend@1.10.0-next.2 + - @backstage/plugin-notifications-backend@0.1.0-next.2 + - @backstage/plugin-linguist-backend@0.5.11-next.2 + - @backstage/plugin-kubernetes-backend@0.16.0-next.2 + - @backstage/plugin-todo-backend@0.3.12-next.2 + - @backstage/plugin-signals-backend@0.1.0-next.2 + - @backstage/plugin-scaffolder-backend-module-github@0.2.4-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.31-next.2 + - @backstage/plugin-adr-backend@0.4.11-next.2 + - @backstage/plugin-azure-devops-backend@0.6.0-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.2 + - @backstage/plugin-auth-backend@0.22.0-next.2 + - @backstage/backend-defaults@0.2.14-next.2 + - @backstage/plugin-app-backend@0.3.62-next.2 + - @backstage/plugin-auth-node@0.4.9-next.2 + - @backstage/plugin-badges-backend@0.3.11-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.11-next.2 + - @backstage/plugin-lighthouse-backend@0.4.6-next.2 + - @backstage/plugin-playlist-backend@0.3.18-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.18-next.2 + - @backstage/backend-plugin-api@0.6.14-next.2 + - @backstage/backend-tasks@0.5.19-next.2 + - @backstage/catalog-model@1.4.5-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.11-next.2 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.2 + - @backstage/plugin-nomad-backend@0.1.16-next.2 + - @backstage/plugin-permission-backend@0.5.37-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11-next.2 + - @backstage/plugin-permission-common@0.7.13-next.1 + - @backstage/plugin-permission-node@0.7.25-next.2 + - @backstage/plugin-proxy-backend@0.4.12-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.18-next.2 + - @backstage/plugin-search-backend-node@1.2.18-next.2 + - @backstage/plugin-sonarqube-backend@0.2.16-next.2 + +## 0.0.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-entity-feedback-backend@0.2.11-next.1 + - @backstage/plugin-notifications-backend@0.1.0-next.1 + - @backstage/plugin-scaffolder-backend@1.22.0-next.1 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.1 + - @backstage/plugin-scaffolder-backend-module-github@0.2.4-next.1 + - @backstage/plugin-app-backend@0.3.62-next.1 + - @backstage/plugin-signals-backend@0.1.0-next.1 + - @backstage/plugin-azure-devops-backend@0.6.0-next.1 + - @backstage/plugin-kubernetes-backend@0.16.0-next.1 + - @backstage/backend-plugin-api@0.6.14-next.1 + - @backstage/backend-tasks@0.5.19-next.1 + - @backstage/plugin-adr-backend@0.4.11-next.1 + - @backstage/plugin-auth-backend@0.22.0-next.1 + - @backstage/plugin-auth-node@0.4.9-next.1 + - @backstage/plugin-badges-backend@0.3.11-next.1 + - @backstage/plugin-catalog-backend@1.18.0-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.31-next.1 + - @backstage/plugin-devtools-backend@0.3.0-next.1 + - @backstage/plugin-jenkins-backend@0.4.0-next.1 + - @backstage/plugin-lighthouse-backend@0.4.6-next.1 + - @backstage/plugin-linguist-backend@0.5.11-next.1 + - @backstage/plugin-nomad-backend@0.1.16-next.1 + - @backstage/plugin-permission-backend@0.5.37-next.1 + - @backstage/plugin-permission-common@0.7.13-next.1 + - @backstage/plugin-permission-node@0.7.25-next.1 + - @backstage/plugin-playlist-backend@0.3.18-next.1 + - @backstage/plugin-proxy-backend@0.4.12-next.1 + - @backstage/plugin-search-backend@1.5.4-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.18-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.18-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.1 + - @backstage/plugin-search-backend-node@1.2.18-next.1 + - @backstage/plugin-sonarqube-backend@0.2.16-next.1 + - @backstage/plugin-techdocs-backend@1.9.7-next.1 + - @backstage/plugin-todo-backend@0.3.12-next.1 + - @backstage/backend-defaults@0.2.14-next.1 + - @backstage/catalog-model@1.4.5-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.11-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11-next.1 + +## 0.0.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-linguist-backend@0.5.10-next.0 + - @backstage/plugin-auth-node@0.4.8-next.0 + - @backstage/plugin-lighthouse-backend@0.4.5-next.0 + - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.0 + - @backstage/plugin-playlist-backend@0.3.17-next.0 + - @backstage/backend-plugin-api@0.6.13-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.10-next.0 + - @backstage/plugin-notifications-backend@0.1.0-next.0 + - @backstage/plugin-catalog-backend@1.18.0-next.0 + - @backstage/plugin-auth-backend@0.22.0-next.0 + - @backstage/plugin-jenkins-backend@0.4.0-next.0 + - @backstage/plugin-azure-devops-backend@0.6.0-next.0 + - @backstage/plugin-scaffolder-backend-module-github@0.2.3-next.0 + - @backstage/plugin-scaffolder-backend@1.22.0-next.0 + - @backstage/plugin-permission-common@0.7.13-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.17-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.17-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.17-next.0 + - @backstage/backend-defaults@0.2.13-next.0 + - @backstage/plugin-kubernetes-backend@0.16.0-next.0 + - @backstage/plugin-adr-backend@0.4.10-next.0 + - @backstage/plugin-proxy-backend@0.4.11-next.0 + - @backstage/backend-tasks@0.5.18-next.0 + - @backstage/plugin-search-backend-node@1.2.17-next.0 + - @backstage/plugin-signals-backend@0.0.4-next.0 + - @backstage/plugin-search-backend@1.5.3-next.0 + - @backstage/plugin-devtools-backend@0.3.0-next.0 + - @backstage/plugin-permission-node@0.7.24-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.6-next.0 + - @backstage/plugin-badges-backend@0.3.10-next.0 + - @backstage/plugin-permission-backend@0.5.36-next.0 + - @backstage/plugin-app-backend@0.3.61-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.10-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.30-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.10-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.10-next.0 + - @backstage/plugin-sonarqube-backend@0.2.15-next.0 + - @backstage/plugin-techdocs-backend@1.9.6-next.0 + - @backstage/plugin-nomad-backend@0.1.15-next.0 + - @backstage/plugin-todo-backend@0.3.11-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.10-next.0 + - @backstage/catalog-model@1.4.5-next.0 + +## 0.0.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7 + - @backstage/plugin-scaffolder-backend@1.21.0 + - @backstage/plugin-badges-backend@0.3.7 + - @backstage/plugin-azure-devops-backend@0.5.2 + - @backstage/plugin-auth-node@0.4.4 + - @backstage/plugin-entity-feedback-backend@0.2.7 + - @backstage/plugin-lighthouse-backend@0.4.2 + - @backstage/plugin-devtools-backend@0.2.7 + - @backstage/plugin-linguist-backend@0.5.7 + - @backstage/plugin-adr-backend@0.4.7 + - @backstage/plugin-kubernetes-backend@0.15.0 + - @backstage/plugin-signals-backend@0.0.1 + - @backstage/plugin-notifications-backend@0.0.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.27 + - @backstage/plugin-search-backend-module-techdocs@0.1.14 + - @backstage/plugin-search-backend-module-catalog@0.1.14 + - @backstage/plugin-search-backend-module-explore@0.1.14 + - @backstage/backend-plugin-api@0.6.10 + - @backstage/backend-defaults@0.2.10 + - @backstage/plugin-sonarqube-backend@0.2.12 + - @backstage/plugin-playlist-backend@0.3.14 + - @backstage/plugin-catalog-backend@1.17.0 + - @backstage/plugin-jenkins-backend@0.3.4 + - @backstage/backend-tasks@0.5.15 + - @backstage/plugin-nomad-backend@0.1.12 + - @backstage/plugin-app-backend@0.3.58 + - @backstage/plugin-search-backend@1.5.0 + - @backstage/plugin-todo-backend@0.3.8 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3 + - @backstage/plugin-techdocs-backend@1.9.3 + - @backstage/plugin-permission-backend@0.5.33 + - @backstage/plugin-permission-node@0.7.21 + - @backstage/plugin-proxy-backend@0.4.8 + - @backstage/plugin-search-backend-node@1.2.14 + - @backstage/plugin-permission-common@0.7.12 + +## 0.0.20-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-badges-backend@0.3.7-next.3 + - @backstage/plugin-kubernetes-backend@0.15.0-next.3 + - @backstage/backend-tasks@0.5.15-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.3 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.3 + - @backstage/plugin-notifications-backend@0.0.1-next.1 + - @backstage/plugin-signals-backend@0.0.1-next.3 + - @backstage/plugin-catalog-backend@1.17.0-next.3 + - @backstage/plugin-app-backend@0.3.58-next.3 + - @backstage/backend-defaults@0.2.10-next.3 + - @backstage/plugin-adr-backend@0.4.7-next.3 + - @backstage/plugin-auth-node@0.4.4-next.3 + - @backstage/plugin-azure-devops-backend@0.5.2-next.3 + - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.3 + - @backstage/plugin-devtools-backend@0.2.7-next.3 + - @backstage/plugin-entity-feedback-backend@0.2.7-next.3 + - @backstage/plugin-jenkins-backend@0.3.4-next.3 + - @backstage/plugin-lighthouse-backend@0.4.2-next.3 + - @backstage/plugin-linguist-backend@0.5.7-next.3 + - @backstage/plugin-nomad-backend@0.1.12-next.3 + - @backstage/plugin-permission-backend@0.5.33-next.3 + - @backstage/plugin-permission-node@0.7.21-next.3 + - @backstage/plugin-playlist-backend@0.3.14-next.3 + - @backstage/plugin-proxy-backend@0.4.8-next.3 + - @backstage/plugin-scaffolder-backend@1.21.0-next.3 + - @backstage/plugin-search-backend@1.5.0-next.3 + - @backstage/plugin-search-backend-module-catalog@0.1.14-next.3 + - @backstage/plugin-search-backend-module-explore@0.1.14-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.3 + - @backstage/plugin-search-backend-node@1.2.14-next.3 + - @backstage/plugin-sonarqube-backend@0.2.12-next.3 + - @backstage/plugin-techdocs-backend@1.9.3-next.3 + - @backstage/plugin-todo-backend@0.3.8-next.3 + - @backstage/backend-plugin-api@0.6.10-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.3 + - @backstage/plugin-permission-common@0.7.12 + +## 0.0.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.21.0-next.2 + - @backstage/plugin-signals-backend@0.0.1-next.2 + - @backstage/plugin-kubernetes-backend@0.15.0-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.14-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.14-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.7-next.2 + - @backstage/plugin-azure-devops-backend@0.5.2-next.2 + - @backstage/backend-plugin-api@0.6.10-next.2 + - @backstage/plugin-lighthouse-backend@0.4.2-next.2 + - @backstage/backend-defaults@0.2.10-next.2 + - @backstage/plugin-sonarqube-backend@0.2.12-next.2 + - @backstage/plugin-devtools-backend@0.2.7-next.2 + - @backstage/plugin-linguist-backend@0.5.7-next.2 + - @backstage/plugin-playlist-backend@0.3.14-next.2 + - @backstage/plugin-catalog-backend@1.17.0-next.2 + - @backstage/plugin-jenkins-backend@0.3.4-next.2 + - @backstage/backend-tasks@0.5.15-next.2 + - @backstage/plugin-badges-backend@0.3.7-next.2 + - @backstage/plugin-nomad-backend@0.1.12-next.2 + - @backstage/plugin-adr-backend@0.4.7-next.2 + - @backstage/plugin-app-backend@0.3.58-next.2 + - @backstage/plugin-auth-node@0.4.4-next.2 + - @backstage/plugin-notifications-backend@0.0.1-next.0 + - @backstage/plugin-todo-backend@0.3.8-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.2 + - @backstage/plugin-permission-backend@0.5.33-next.2 + - @backstage/plugin-permission-node@0.7.21-next.2 + - @backstage/plugin-proxy-backend@0.4.8-next.2 + - @backstage/plugin-search-backend@1.5.0-next.2 + - @backstage/plugin-search-backend-node@1.2.14-next.2 + - @backstage/plugin-techdocs-backend@1.9.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.2 + - @backstage/plugin-permission-common@0.7.12 + +## 0.0.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.21.0-next.1 + - @backstage/plugin-azure-devops-backend@0.5.2-next.1 + - @backstage/plugin-catalog-backend@1.17.0-next.1 + - @backstage/backend-plugin-api@0.6.10-next.1 + - @backstage/backend-defaults@0.2.10-next.1 + - @backstage/backend-tasks@0.5.15-next.1 + - @backstage/plugin-adr-backend@0.4.7-next.1 + - @backstage/plugin-app-backend@0.3.58-next.1 + - @backstage/plugin-auth-node@0.4.4-next.1 + - @backstage/plugin-badges-backend@0.3.7-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.1 + - @backstage/plugin-devtools-backend@0.2.7-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.7-next.1 + - @backstage/plugin-jenkins-backend@0.3.4-next.1 + - @backstage/plugin-kubernetes-backend@0.14.2-next.1 + - @backstage/plugin-lighthouse-backend@0.4.2-next.1 + - @backstage/plugin-linguist-backend@0.5.7-next.1 + - @backstage/plugin-nomad-backend@0.1.12-next.1 + - @backstage/plugin-permission-backend@0.5.33-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.1 + - @backstage/plugin-permission-common@0.7.12 + - @backstage/plugin-permission-node@0.7.21-next.1 + - @backstage/plugin-playlist-backend@0.3.14-next.1 + - @backstage/plugin-proxy-backend@0.4.8-next.1 + - @backstage/plugin-search-backend@1.5.0-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.14-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.14-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.1 + - @backstage/plugin-search-backend-node@1.2.14-next.1 + - @backstage/plugin-sonarqube-backend@0.2.12-next.1 + - @backstage/plugin-techdocs-backend@1.9.3-next.1 + - @backstage/plugin-todo-backend@0.3.8-next.1 + +## 0.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-azure-devops-backend@0.5.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.2-next.0 + - @backstage/plugin-catalog-backend@1.17.0-next.0 + - @backstage/plugin-search-backend@1.5.0-next.0 + - @backstage/plugin-todo-backend@0.3.8-next.0 + - @backstage/plugin-scaffolder-backend@1.21.0-next.0 + - @backstage/plugin-app-backend@0.3.58-next.0 + - @backstage/backend-defaults@0.2.10-next.0 + - @backstage/backend-tasks@0.5.15-next.0 + - @backstage/plugin-auth-node@0.4.4-next.0 + - @backstage/plugin-badges-backend@0.3.7-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.7-next.0 + - @backstage/plugin-linguist-backend@0.5.7-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.0 + - @backstage/plugin-permission-node@0.7.21-next.0 + - @backstage/plugin-playlist-backend@0.3.14-next.0 + - @backstage/plugin-proxy-backend@0.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.14-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.14-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.0 + - @backstage/plugin-sonarqube-backend@0.2.12-next.0 + - @backstage/plugin-techdocs-backend@1.9.3-next.0 + - @backstage/plugin-adr-backend@0.4.7-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.0 + - @backstage/plugin-devtools-backend@0.2.7-next.0 + - @backstage/plugin-jenkins-backend@0.3.4-next.0 + - @backstage/plugin-lighthouse-backend@0.4.2-next.0 + - @backstage/plugin-nomad-backend@0.1.12-next.0 + - @backstage/plugin-permission-backend@0.5.33-next.0 + - @backstage/plugin-search-backend-node@1.2.14-next.0 + - @backstage/backend-plugin-api@0.6.10-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.0 + - @backstage/plugin-permission-common@0.7.12 + +## 0.0.19 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-sonarqube-backend@0.2.11 + - @backstage/plugin-scaffolder-backend@1.20.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.26 + - @backstage/plugin-search-backend-module-techdocs@0.1.13 + - @backstage/plugin-search-backend-module-catalog@0.1.13 + - @backstage/plugin-search-backend-module-explore@0.1.13 + - @backstage/backend-plugin-api@0.6.9 + - @backstage/backend-defaults@0.2.9 + - @backstage/plugin-azure-devops-backend@0.5.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2 + - @backstage/plugin-entity-feedback-backend@0.2.6 + - @backstage/plugin-devtools-backend@0.2.6 + - @backstage/plugin-linguist-backend@0.5.6 + - @backstage/plugin-playlist-backend@0.3.13 + - @backstage/plugin-techdocs-backend@1.9.2 + - @backstage/plugin-jenkins-backend@0.3.3 + - @backstage/plugin-badges-backend@0.3.6 + - @backstage/plugin-search-backend@1.4.9 + - @backstage/plugin-nomad-backend@0.1.11 + - @backstage/plugin-todo-backend@0.3.7 + - @backstage/plugin-adr-backend@0.4.6 + - @backstage/plugin-app-backend@0.3.57 + - @backstage/plugin-permission-backend@0.5.32 + - @backstage/plugin-permission-common@0.7.12 + - @backstage/plugin-permission-node@0.7.20 + - @backstage/plugin-catalog-backend@1.16.1 + - @backstage/backend-tasks@0.5.14 + - @backstage/plugin-auth-node@0.4.3 + - @backstage/plugin-kubernetes-backend@0.14.1 + - @backstage/plugin-lighthouse-backend@0.4.1 + - @backstage/plugin-proxy-backend@0.4.7 + - @backstage/plugin-search-backend-node@1.2.13 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6 + +## 0.0.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-sonarqube-backend@0.2.11-next.2 + - @backstage/backend-plugin-api@0.6.9-next.2 + - @backstage/backend-defaults@0.2.9-next.2 + - @backstage/plugin-adr-backend@0.4.6-next.2 + - @backstage/plugin-app-backend@0.3.57-next.2 + - @backstage/plugin-auth-node@0.4.3-next.2 + - @backstage/plugin-azure-devops-backend@0.5.1-next.2 + - @backstage/plugin-badges-backend@0.3.6-next.2 + - @backstage/plugin-catalog-backend@1.16.1-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.2 + - @backstage/plugin-devtools-backend@0.2.6-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.6-next.2 + - @backstage/plugin-jenkins-backend@0.3.3-next.2 + - @backstage/plugin-kubernetes-backend@0.14.1-next.2 + - @backstage/plugin-lighthouse-backend@0.4.1-next.2 + - @backstage/plugin-linguist-backend@0.5.6-next.2 + - @backstage/plugin-nomad-backend@0.1.11-next.2 + - @backstage/plugin-permission-backend@0.5.32-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.2 + - @backstage/plugin-permission-node@0.7.20-next.2 + - @backstage/plugin-playlist-backend@0.3.13-next.2 + - @backstage/plugin-proxy-backend@0.4.7-next.2 + - @backstage/plugin-scaffolder-backend@1.19.3-next.2 + - @backstage/plugin-search-backend@1.4.9-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.13-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.13-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.2 + - @backstage/plugin-search-backend-node@1.2.13-next.2 + - @backstage/plugin-techdocs-backend@1.9.2-next.2 + - @backstage/plugin-todo-backend@0.3.7-next.2 + - @backstage/backend-tasks@0.5.14-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.2 + +## 0.0.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-app-backend@0.3.57-next.1 + - @backstage/plugin-devtools-backend@0.2.6-next.1 + - @backstage/plugin-proxy-backend@0.4.7-next.1 + - @backstage/backend-defaults@0.2.9-next.1 + - @backstage/plugin-kubernetes-backend@0.14.1-next.1 + - @backstage/backend-tasks@0.5.14-next.1 + - @backstage/plugin-adr-backend@0.4.6-next.1 + - @backstage/plugin-auth-node@0.4.3-next.1 + - @backstage/plugin-azure-devops-backend@0.5.1-next.1 + - @backstage/plugin-badges-backend@0.3.6-next.1 + - @backstage/plugin-catalog-backend@1.16.1-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.6-next.1 + - @backstage/plugin-jenkins-backend@0.3.3-next.1 + - @backstage/plugin-lighthouse-backend@0.4.1-next.1 + - @backstage/plugin-linguist-backend@0.5.6-next.1 + - @backstage/plugin-nomad-backend@0.1.11-next.1 + - @backstage/plugin-permission-backend@0.5.32-next.1 + - @backstage/plugin-permission-node@0.7.20-next.1 + - @backstage/plugin-playlist-backend@0.3.13-next.1 + - @backstage/plugin-scaffolder-backend@1.19.3-next.1 + - @backstage/plugin-search-backend@1.4.9-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.13-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.13-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.1 + - @backstage/plugin-search-backend-node@1.2.13-next.1 + - @backstage/plugin-sonarqube-backend@0.2.11-next.1 + - @backstage/plugin-techdocs-backend@1.9.2-next.1 + - @backstage/plugin-todo-backend@0.3.7-next.1 + - @backstage/backend-plugin-api@0.6.9-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.1 + - @backstage/plugin-permission-common@0.7.11 + +## 0.0.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.19.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.13-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.13-next.0 + - @backstage/plugin-azure-devops-backend@0.5.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.6-next.0 + - @backstage/plugin-devtools-backend@0.2.6-next.0 + - @backstage/plugin-linguist-backend@0.5.6-next.0 + - @backstage/plugin-playlist-backend@0.3.13-next.0 + - @backstage/plugin-techdocs-backend@1.9.2-next.0 + - @backstage/plugin-jenkins-backend@0.3.3-next.0 + - @backstage/plugin-badges-backend@0.3.6-next.0 + - @backstage/plugin-search-backend@1.4.9-next.0 + - @backstage/plugin-nomad-backend@0.1.11-next.0 + - @backstage/plugin-todo-backend@0.3.7-next.0 + - @backstage/plugin-adr-backend@0.4.6-next.0 + - @backstage/plugin-app-backend@0.3.57-next.0 + - @backstage/backend-defaults@0.2.9-next.0 + - @backstage/backend-plugin-api@0.6.9-next.0 + - @backstage/backend-tasks@0.5.14-next.0 + - @backstage/plugin-auth-node@0.4.3-next.0 + - @backstage/plugin-catalog-backend@1.16.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.0 + - @backstage/plugin-kubernetes-backend@0.14.1-next.0 + - @backstage/plugin-lighthouse-backend@0.4.1-next.0 + - @backstage/plugin-permission-backend@0.5.32-next.0 + - @backstage/plugin-permission-common@0.7.11 + - @backstage/plugin-permission-node@0.7.20-next.0 + - @backstage/plugin-proxy-backend@0.4.7-next.0 + - @backstage/plugin-search-backend-node@1.2.13-next.0 + - @backstage/plugin-sonarqube-backend@0.2.11-next.0 + +## 0.0.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1 + - @backstage/plugin-techdocs-backend@1.9.1 + - @backstage/plugin-catalog-backend@1.16.0 + - @backstage/plugin-azure-devops-backend@0.5.0 + - @backstage/plugin-scaffolder-backend@1.19.2 + - @backstage/backend-tasks@0.5.13 + - @backstage/plugin-lighthouse-backend@0.4.0 + - @backstage/plugin-kubernetes-backend@0.14.0 + - @backstage/plugin-auth-node@0.4.2 + - @backstage/plugin-permission-backend@0.5.31 + - @backstage/plugin-permission-common@0.7.11 + - @backstage/plugin-playlist-backend@0.3.12 + - @backstage/plugin-permission-node@0.7.19 + - @backstage/plugin-search-backend@1.4.8 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5 + - @backstage/plugin-search-backend-module-techdocs@0.1.12 + - @backstage/plugin-search-backend-module-catalog@0.1.12 + - @backstage/plugin-search-backend-module-explore@0.1.12 + - @backstage/backend-defaults@0.2.8 + - @backstage/plugin-adr-backend@0.4.5 + - @backstage/plugin-app-backend@0.3.56 + - @backstage/plugin-badges-backend@0.3.5 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25 + - @backstage/plugin-devtools-backend@0.2.5 + - @backstage/plugin-entity-feedback-backend@0.2.5 + - @backstage/plugin-jenkins-backend@0.3.2 + - @backstage/plugin-linguist-backend@0.5.5 + - @backstage/plugin-nomad-backend@0.1.10 + - @backstage/plugin-proxy-backend@0.4.6 + - @backstage/plugin-search-backend-node@1.2.12 + - @backstage/plugin-sonarqube-backend@0.2.10 + - @backstage/plugin-todo-backend@0.3.6 + - @backstage/backend-plugin-api@0.6.8 + +## 0.0.18-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-azure-devops-backend@0.5.0-next.3 + - @backstage/plugin-scaffolder-backend@1.19.2-next.3 + - @backstage/backend-defaults@0.2.8-next.3 + - @backstage/backend-plugin-api@0.6.8-next.3 + - @backstage/backend-tasks@0.5.13-next.3 + - @backstage/plugin-adr-backend@0.4.5-next.3 + - @backstage/plugin-app-backend@0.3.56-next.3 + - @backstage/plugin-auth-node@0.4.2-next.3 + - @backstage/plugin-badges-backend@0.3.5-next.3 + - @backstage/plugin-catalog-backend@1.16.0-next.3 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.3 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.3 + - @backstage/plugin-devtools-backend@0.2.5-next.3 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.3 + - @backstage/plugin-jenkins-backend@0.3.2-next.3 + - @backstage/plugin-kubernetes-backend@0.14.0-next.3 + - @backstage/plugin-lighthouse-backend@0.4.0-next.3 + - @backstage/plugin-linguist-backend@0.5.5-next.3 + - @backstage/plugin-nomad-backend@0.1.10-next.3 + - @backstage/plugin-permission-backend@0.5.31-next.3 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.3 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-permission-node@0.7.19-next.3 + - @backstage/plugin-playlist-backend@0.3.12-next.3 + - @backstage/plugin-proxy-backend@0.4.6-next.3 + - @backstage/plugin-search-backend@1.4.8-next.3 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.3 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.3 + - @backstage/plugin-search-backend-node@1.2.12-next.3 + - @backstage/plugin-sonarqube-backend@0.2.10-next.3 + - @backstage/plugin-techdocs-backend@1.9.1-next.3 + - @backstage/plugin-todo-backend@0.3.6-next.3 + +## 0.0.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.16.0-next.2 + - @backstage/plugin-lighthouse-backend@0.4.0-next.2 + - @backstage/plugin-auth-node@0.4.2-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.2 + - @backstage/backend-defaults@0.2.8-next.2 + - @backstage/backend-plugin-api@0.6.8-next.2 + - @backstage/backend-tasks@0.5.13-next.2 + - @backstage/plugin-adr-backend@0.4.5-next.2 + - @backstage/plugin-app-backend@0.3.56-next.2 + - @backstage/plugin-azure-devops-backend@0.5.0-next.2 + - @backstage/plugin-badges-backend@0.3.5-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.2 + - @backstage/plugin-devtools-backend@0.2.5-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.2 + - @backstage/plugin-jenkins-backend@0.3.2-next.2 + - @backstage/plugin-kubernetes-backend@0.14.0-next.2 + - @backstage/plugin-linguist-backend@0.5.5-next.2 + - @backstage/plugin-nomad-backend@0.1.10-next.2 + - @backstage/plugin-permission-backend@0.5.31-next.2 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-permission-node@0.7.19-next.2 + - @backstage/plugin-playlist-backend@0.3.12-next.2 + - @backstage/plugin-proxy-backend@0.4.6-next.2 + - @backstage/plugin-scaffolder-backend@1.19.2-next.2 + - @backstage/plugin-search-backend@1.4.8-next.2 + - @backstage/plugin-search-backend-node@1.2.12-next.2 + - @backstage/plugin-sonarqube-backend@0.2.10-next.2 + - @backstage/plugin-techdocs-backend@1.9.1-next.2 + - @backstage/plugin-todo-backend@0.3.6-next.2 + +## 0.0.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.1 + - @backstage/plugin-catalog-backend@1.15.1-next.1 + - @backstage/plugin-azure-devops-backend@0.5.0-next.1 + - @backstage/plugin-kubernetes-backend@0.14.0-next.1 + - @backstage/backend-defaults@0.2.8-next.1 + - @backstage/backend-plugin-api@0.6.8-next.1 + - @backstage/backend-tasks@0.5.13-next.1 + - @backstage/plugin-adr-backend@0.4.5-next.1 + - @backstage/plugin-app-backend@0.3.56-next.1 + - @backstage/plugin-auth-node@0.4.2-next.1 + - @backstage/plugin-badges-backend@0.3.5-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.1 + - @backstage/plugin-devtools-backend@0.2.5-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.1 + - @backstage/plugin-jenkins-backend@0.3.2-next.1 + - @backstage/plugin-lighthouse-backend@0.3.5-next.1 + - @backstage/plugin-linguist-backend@0.5.5-next.1 + - @backstage/plugin-nomad-backend@0.1.10-next.1 + - @backstage/plugin-permission-backend@0.5.31-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.1 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-permission-node@0.7.19-next.1 + - @backstage/plugin-playlist-backend@0.3.12-next.1 + - @backstage/plugin-proxy-backend@0.4.6-next.1 + - @backstage/plugin-scaffolder-backend@1.19.2-next.1 + - @backstage/plugin-search-backend@1.4.8-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.1 + - @backstage/plugin-search-backend-node@1.2.12-next.1 + - @backstage/plugin-sonarqube-backend@0.2.10-next.1 + - @backstage/plugin-techdocs-backend@1.9.1-next.1 + - @backstage/plugin-todo-backend@0.3.6-next.1 + +## 0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-scaffolder-backend@1.19.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.0-next.0 + - @backstage/backend-defaults@0.2.8-next.0 + - @backstage/plugin-adr-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.56-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-azure-devops-backend@0.4.5-next.0 + - @backstage/plugin-badges-backend@0.3.5-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-devtools-backend@0.2.5-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + - @backstage/plugin-jenkins-backend@0.3.2-next.0 + - @backstage/plugin-lighthouse-backend@0.3.5-next.0 + - @backstage/plugin-linguist-backend@0.5.5-next.0 + - @backstage/plugin-nomad-backend@0.1.10-next.0 + - @backstage/plugin-permission-backend@0.5.31-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-playlist-backend@0.3.12-next.0 + - @backstage/plugin-proxy-backend@0.4.6-next.0 + - @backstage/plugin-search-backend@1.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/plugin-sonarqube-backend@0.2.10-next.0 + - @backstage/plugin-techdocs-backend@1.9.1-next.0 + - @backstage/plugin-todo-backend@0.3.6-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-kubernetes-backend@0.13.1 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0 + - @backstage/plugin-techdocs-backend@1.9.0 + - @backstage/plugin-scaffolder-backend@1.19.0 + - @backstage/plugin-search-backend@1.4.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 + - @backstage/plugin-entity-feedback-backend@0.2.4 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-linguist-backend@0.5.4 + - @backstage/plugin-playlist-backend@0.3.11 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-badges-backend@0.3.4 + - @backstage/plugin-app-backend@0.3.55 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-jenkins-backend@0.3.1 + - @backstage/plugin-adr-backend@0.4.4 + - @backstage/plugin-proxy-backend@0.4.5 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @backstage/plugin-lighthouse-backend@0.3.4 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @backstage/plugin-todo-backend@0.3.5 + - @backstage/plugin-devtools-backend@0.2.4 + - @backstage/backend-defaults@0.2.7 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-azure-devops-backend@0.4.4 + - @backstage/plugin-nomad-backend@0.1.9 + - @backstage/plugin-permission-backend@0.5.30 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-sonarqube-backend@0.2.9 + +## 0.0.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.13.1-next.2 + - @backstage/plugin-scaffolder-backend@1.19.0-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.4-next.2 + - @backstage/backend-plugin-api@0.6.7-next.2 + - @backstage/plugin-linguist-backend@0.5.4-next.2 + - @backstage/plugin-playlist-backend@0.3.11-next.2 + - @backstage/plugin-techdocs-backend@1.9.0-next.2 + - @backstage/plugin-catalog-backend@1.15.0-next.2 + - @backstage/backend-tasks@0.5.12-next.2 + - @backstage/plugin-badges-backend@0.3.4-next.2 + - @backstage/plugin-app-backend@0.3.55-next.2 + - @backstage/backend-defaults@0.2.7-next.2 + - @backstage/plugin-adr-backend@0.4.4-next.2 + - @backstage/plugin-auth-node@0.4.1-next.2 + - @backstage/plugin-azure-devops-backend@0.4.4-next.2 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.2 + - @backstage/plugin-devtools-backend@0.2.4-next.2 + - @backstage/plugin-jenkins-backend@0.3.1-next.2 + - @backstage/plugin-lighthouse-backend@0.3.4-next.2 + - @backstage/plugin-nomad-backend@0.1.9-next.2 + - @backstage/plugin-permission-backend@0.5.30-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.2 + - @backstage/plugin-permission-node@0.7.18-next.2 + - @backstage/plugin-proxy-backend@0.4.5-next.2 + - @backstage/plugin-search-backend@1.4.7-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.11-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.11-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.2 + - @backstage/plugin-search-backend-node@1.2.11-next.2 + - @backstage/plugin-sonarqube-backend@0.2.9-next.2 + - @backstage/plugin-todo-backend@0.3.5-next.2 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.2 + +## 0.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0-next.1 + - @backstage/plugin-techdocs-backend@1.9.0-next.1 + - @backstage/plugin-scaffolder-backend@1.19.0-next.1 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.1 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.1 + - @backstage/plugin-jenkins-backend@0.3.1-next.1 + - @backstage/plugin-kubernetes-backend@0.13.1-next.1 + - @backstage/plugin-lighthouse-backend@0.3.4-next.1 + - @backstage/plugin-linguist-backend@0.5.4-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.11-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.1 + - @backstage/plugin-todo-backend@0.3.5-next.1 + - @backstage/plugin-adr-backend@0.4.4-next.1 + - @backstage/backend-defaults@0.2.7-next.1 + - @backstage/backend-tasks@0.5.12-next.1 + - @backstage/plugin-app-backend@0.3.55-next.1 + - @backstage/plugin-auth-node@0.4.1-next.1 + - @backstage/plugin-badges-backend@0.3.4-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.4-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.1 + - @backstage/plugin-permission-node@0.7.18-next.1 + - @backstage/plugin-playlist-backend@0.3.11-next.1 + - @backstage/plugin-proxy-backend@0.4.5-next.1 + - @backstage/plugin-search-backend@1.4.7-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.11-next.1 + - @backstage/plugin-sonarqube-backend@0.2.9-next.1 + - @backstage/plugin-azure-devops-backend@0.4.4-next.1 + - @backstage/plugin-devtools-backend@0.2.4-next.1 + - @backstage/plugin-nomad-backend@0.1.9-next.1 + - @backstage/plugin-permission-backend@0.5.30-next.1 + - @backstage/plugin-search-backend-node@1.2.11-next.1 + - @backstage/backend-plugin-api@0.6.7-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.1 + - @backstage/plugin-permission-common@0.7.9 + +## 0.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.0 + - @backstage/plugin-techdocs-backend@1.8.1-next.0 + - @backstage/plugin-scaffolder-backend@1.19.0-next.0 + - @backstage/plugin-catalog-backend@1.15.0-next.0 + - @backstage/plugin-search-backend@1.4.7-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.0 + - @backstage/plugin-proxy-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.55-next.0 + - @backstage/plugin-devtools-backend@0.2.4-next.0 + - @backstage/backend-defaults@0.2.7-next.0 + - @backstage/backend-plugin-api@0.6.7-next.0 + - @backstage/backend-tasks@0.5.12-next.0 + - @backstage/plugin-adr-backend@0.4.4-next.0 + - @backstage/plugin-auth-node@0.4.1-next.0 + - @backstage/plugin-azure-devops-backend@0.4.4-next.0 + - @backstage/plugin-badges-backend@0.3.4-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.4-next.0 + - @backstage/plugin-jenkins-backend@0.3.1-next.0 + - @backstage/plugin-kubernetes-backend@0.13.1-next.0 + - @backstage/plugin-lighthouse-backend@0.3.4-next.0 + - @backstage/plugin-linguist-backend@0.5.4-next.0 + - @backstage/plugin-nomad-backend@0.1.9-next.0 + - @backstage/plugin-permission-backend@0.5.30-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.0 + - @backstage/plugin-permission-common@0.7.9 + - @backstage/plugin-permission-node@0.7.18-next.0 + - @backstage/plugin-playlist-backend@0.3.11-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.11-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.11-next.0 + - @backstage/plugin-sonarqube-backend@0.2.9-next.0 + - @backstage/plugin-todo-backend@0.3.5-next.0 + +## 0.0.16 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8 + - @backstage/backend-tasks@0.5.11 + - @backstage/plugin-sonarqube-backend@0.2.8 + - @backstage/plugin-scaffolder-backend@1.18.0 + - @backstage/plugin-playlist-backend@0.3.10 + - @backstage/plugin-techdocs-backend@1.8.0 + - @backstage/plugin-catalog-backend@1.14.0 + - @backstage/plugin-auth-node@0.4.0 + - @backstage/plugin-badges-backend@0.3.3 + - @backstage/plugin-kubernetes-backend@0.13.0 + - @backstage/plugin-jenkins-backend@0.3.0 + - @backstage/plugin-search-backend@1.4.6 + - @backstage/backend-plugin-api@0.6.6 + - @backstage/plugin-lighthouse-backend@0.3.3 + - @backstage/plugin-linguist-backend@0.5.3 + - @backstage/plugin-search-backend-module-catalog@0.1.10 + - @backstage/plugin-search-backend-module-explore@0.1.10 + - @backstage/plugin-search-backend-module-techdocs@0.1.10 + - @backstage/plugin-search-backend-node@1.2.10 + - @backstage/backend-defaults@0.2.6 + - @backstage/plugin-adr-backend@0.4.3 + - @backstage/plugin-app-backend@0.3.54 + - @backstage/plugin-azure-devops-backend@0.4.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3 + - @backstage/plugin-devtools-backend@0.2.3 + - @backstage/plugin-entity-feedback-backend@0.2.3 + - @backstage/plugin-permission-backend@0.5.29 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3 + - @backstage/plugin-permission-node@0.7.17 + - @backstage/plugin-proxy-backend@0.4.3 + - @backstage/plugin-todo-backend@0.3.4 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3 + - @backstage/plugin-permission-common@0.7.9 + +## 0.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-nomad-backend@0.1.8-next.2 + - @backstage/plugin-scaffolder-backend@1.18.0-next.2 + - @backstage/plugin-techdocs-backend@1.8.0-next.2 + - @backstage/plugin-auth-node@0.4.0-next.2 + - @backstage/plugin-catalog-backend@1.14.0-next.2 + - @backstage/plugin-kubernetes-backend@0.12.3-next.2 + - @backstage/plugin-jenkins-backend@0.2.9-next.2 + - @backstage/backend-defaults@0.2.6-next.2 + - @backstage/backend-tasks@0.5.11-next.2 + - @backstage/plugin-adr-backend@0.4.3-next.2 + - @backstage/plugin-app-backend@0.3.54-next.2 + - @backstage/plugin-azure-devops-backend@0.4.3-next.2 + - @backstage/plugin-badges-backend@0.3.3-next.2 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 + - @backstage/plugin-devtools-backend@0.2.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 + - @backstage/plugin-lighthouse-backend@0.3.3-next.2 + - @backstage/plugin-linguist-backend@0.5.3-next.2 + - @backstage/plugin-permission-backend@0.5.29-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3-next.2 + - @backstage/plugin-permission-node@0.7.17-next.2 + - @backstage/plugin-playlist-backend@0.3.10-next.2 + - @backstage/plugin-proxy-backend@0.4.3-next.2 + - @backstage/plugin-search-backend@1.4.6-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 + - @backstage/plugin-search-backend-node@1.2.10-next.2 + - @backstage/plugin-sonarqube-backend@0.2.8-next.2 + - @backstage/plugin-todo-backend@0.3.4-next.2 + - @backstage/backend-plugin-api@0.6.6-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 + - @backstage/plugin-permission-common@0.7.9-next.0 + +## 0.0.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.10-next.1 + - @backstage/plugin-catalog-backend@1.14.0-next.1 + - @backstage/plugin-scaffolder-backend@1.18.0-next.1 + - @backstage/plugin-badges-backend@0.3.2-next.1 + - @backstage/backend-plugin-api@0.6.5-next.1 + - @backstage/plugin-lighthouse-backend@0.3.2-next.1 + - @backstage/plugin-linguist-backend@0.5.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.9-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.9-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.1 + - @backstage/plugin-search-backend-node@1.2.9-next.1 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.1 + - @backstage/plugin-kubernetes-backend@0.12.2-next.1 + - @backstage/plugin-todo-backend@0.3.3-next.1 + - @backstage/backend-defaults@0.2.5-next.1 + - @backstage/plugin-adr-backend@0.4.2-next.1 + - @backstage/plugin-app-backend@0.3.53-next.1 + - @backstage/plugin-auth-node@0.3.2-next.1 + - @backstage/plugin-azure-devops-backend@0.4.2-next.1 + - @backstage/plugin-devtools-backend@0.2.2-next.1 + - @backstage/plugin-entity-feedback-backend@0.2.2-next.1 + - @backstage/plugin-permission-backend@0.5.28-next.1 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.1 + - @backstage/plugin-permission-node@0.7.16-next.1 + - @backstage/plugin-playlist-backend@0.3.9-next.1 + - @backstage/plugin-proxy-backend@0.4.2-next.1 + - @backstage/plugin-search-backend@1.4.5-next.1 + - @backstage/plugin-sonarqube-backend@0.2.7-next.1 + - @backstage/plugin-techdocs-backend@1.7.2-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.1 + - @backstage/plugin-permission-common@0.7.8 + +## 0.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-sonarqube-backend@0.2.7-next.0 + - @backstage/plugin-playlist-backend@0.3.9-next.0 + - @backstage/plugin-catalog-backend@1.14.0-next.0 + - @backstage/plugin-auth-node@0.3.2-next.0 + - @backstage/plugin-adr-backend@0.4.2-next.0 + - @backstage/plugin-scaffolder-backend@1.17.3-next.0 + - @backstage/plugin-techdocs-backend@1.7.2-next.0 + - @backstage/plugin-todo-backend@0.3.3-next.0 + - @backstage/backend-defaults@0.2.5-next.0 + - @backstage/backend-plugin-api@0.6.5-next.0 + - @backstage/backend-tasks@0.5.10-next.0 + - @backstage/plugin-app-backend@0.3.53-next.0 + - @backstage/plugin-azure-devops-backend@0.4.2-next.0 + - @backstage/plugin-badges-backend@0.3.2-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0 + - @backstage/plugin-devtools-backend@0.2.2-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.2-next.0 + - @backstage/plugin-kubernetes-backend@0.12.2-next.0 + - @backstage/plugin-lighthouse-backend@0.3.2-next.0 + - @backstage/plugin-linguist-backend@0.5.2-next.0 + - @backstage/plugin-permission-backend@0.5.28-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.0 + - @backstage/plugin-permission-common@0.7.8 + - @backstage/plugin-permission-node@0.7.16-next.0 + - @backstage/plugin-proxy-backend@0.4.2-next.0 + - @backstage/plugin-search-backend@1.4.5-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.9-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0 + - @backstage/plugin-search-backend-node@1.2.9-next.0 + +## 0.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.13.0 + - @backstage/plugin-kubernetes-backend@0.12.0 + - @backstage/plugin-techdocs-backend@1.7.0 + - @backstage/plugin-proxy-backend@0.4.0 + - @backstage/plugin-adr-backend@0.4.0 + - @backstage/plugin-azure-devops-backend@0.4.0 + - @backstage/plugin-badges-backend@0.3.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0 + - @backstage/plugin-devtools-backend@0.2.0 + - @backstage/plugin-entity-feedback-backend@0.2.0 + - @backstage/plugin-lighthouse-backend@0.3.0 + - @backstage/plugin-linguist-backend@0.5.0 + - @backstage/plugin-todo-backend@0.3.0 + - @backstage/plugin-app-backend@0.3.51 + - @backstage/plugin-permission-backend@0.5.26 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0 + - @backstage/plugin-scaffolder-backend@1.17.0 + - @backstage/plugin-search-backend@1.4.3 + - @backstage/plugin-search-backend-module-catalog@0.1.7 + - @backstage/plugin-search-backend-module-explore@0.1.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.7 + - @backstage/backend-tasks@0.5.8 + - @backstage/plugin-auth-node@0.3.0 + - @backstage/plugin-permission-common@0.7.8 + - @backstage/plugin-permission-node@0.7.14 + - @backstage/backend-plugin-api@0.6.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0 + - @backstage/backend-defaults@0.2.3 + - @backstage/plugin-search-backend-node@1.2.7 + +## 0.0.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-backend@1.7.0-next.3 + - @backstage/plugin-proxy-backend@0.4.0-next.3 + - @backstage/plugin-adr-backend@0.4.0-next.3 + - @backstage/plugin-azure-devops-backend@0.4.0-next.3 + - @backstage/plugin-badges-backend@0.3.0-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0-next.3 + - @backstage/plugin-devtools-backend@0.2.0-next.3 + - @backstage/plugin-entity-feedback-backend@0.2.0-next.3 + - @backstage/plugin-lighthouse-backend@0.3.0-next.3 + - @backstage/plugin-linguist-backend@0.5.0-next.3 + - @backstage/plugin-todo-backend@0.3.0-next.3 + - @backstage/plugin-app-backend@0.3.51-next.3 + - @backstage/plugin-catalog-backend@1.13.0-next.3 + - @backstage/plugin-kubernetes-backend@0.11.6-next.3 + - @backstage/plugin-permission-backend@0.5.26-next.3 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0-next.1 + - @backstage/plugin-scaffolder-backend@1.17.0-next.3 + - @backstage/plugin-search-backend@1.4.3-next.3 + - @backstage/plugin-search-backend-module-catalog@0.1.7-next.3 + - @backstage/plugin-search-backend-module-explore@0.1.7-next.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.3 + - @backstage/plugin-permission-common@0.7.8-next.2 + - @backstage/plugin-permission-node@0.7.14-next.3 + - @backstage/backend-plugin-api@0.6.3-next.3 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0-next.0 + - @backstage/backend-defaults@0.2.3-next.3 + - @backstage/backend-tasks@0.5.8-next.3 + - @backstage/plugin-auth-node@0.3.0-next.3 + - @backstage/plugin-search-backend-node@1.2.7-next.3 + +## 0.0.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.16.6-next.2 + - @backstage/plugin-permission-backend@0.5.26-next.2 + - @backstage/plugin-catalog-backend@1.13.0-next.2 + - @backstage/plugin-badges-backend@0.2.6-next.2 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0-next.0 + - @backstage/backend-tasks@0.5.8-next.2 + - @backstage/backend-defaults@0.2.3-next.2 + - @backstage/plugin-app-backend@0.3.51-next.2 + - @backstage/plugin-auth-node@0.3.0-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.9-next.2 + - @backstage/plugin-kubernetes-backend@0.11.6-next.2 + - @backstage/plugin-linguist-backend@0.4.3-next.2 + - @backstage/plugin-permission-node@0.7.14-next.2 + - @backstage/plugin-proxy-backend@0.3.3-next.2 + - @backstage/plugin-search-backend@1.4.3-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.7-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.7-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.2 + - @backstage/plugin-techdocs-backend@1.7.0-next.2 + - @backstage/plugin-devtools-backend@0.1.6-next.2 + - @backstage/backend-plugin-api@0.6.3-next.2 + - @backstage/plugin-adr-backend@0.3.9-next.2 + - @backstage/plugin-azure-devops-backend@0.3.30-next.2 + - @backstage/plugin-lighthouse-backend@0.2.7-next.2 + - @backstage/plugin-permission-common@0.7.8-next.1 + - @backstage/plugin-search-backend-node@1.2.7-next.2 + - @backstage/plugin-todo-backend@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.2 + +## 0.0.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.6-next.1 + - @backstage/plugin-catalog-backend@1.13.0-next.1 + - @backstage/plugin-devtools-backend@0.1.6-next.1 + - @backstage/backend-tasks@0.5.8-next.1 + - @backstage/plugin-techdocs-backend@1.7.0-next.1 + - @backstage/plugin-scaffolder-backend@1.16.6-next.1 + - @backstage/backend-plugin-api@0.6.3-next.1 + - @backstage/plugin-adr-backend@0.3.9-next.1 + - @backstage/plugin-app-backend@0.3.51-next.1 + - @backstage/plugin-auth-node@0.3.0-next.1 + - @backstage/plugin-azure-devops-backend@0.3.30-next.1 + - @backstage/plugin-badges-backend@0.2.6-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.9-next.1 + - @backstage/plugin-lighthouse-backend@0.2.7-next.1 + - @backstage/plugin-linguist-backend@0.4.3-next.1 + - @backstage/plugin-permission-backend@0.5.26-next.1 + - @backstage/plugin-permission-common@0.7.8-next.0 + - @backstage/plugin-permission-node@0.7.14-next.1 + - @backstage/plugin-proxy-backend@0.3.3-next.1 + - @backstage/plugin-search-backend@1.4.3-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.7-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.7-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.1 + - @backstage/plugin-search-backend-node@1.2.7-next.1 + - @backstage/plugin-todo-backend@0.2.3-next.1 + - @backstage/backend-defaults@0.2.3-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.1 + +## 0.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.12.2-next.0 + - @backstage/plugin-scaffolder-backend@1.16.3-next.0 + - @backstage/plugin-auth-node@0.3.0-next.0 + - @backstage/plugin-linguist-backend@0.4.2-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.8-next.0 + - @backstage/backend-tasks@0.5.7-next.0 + - @backstage/plugin-app-backend@0.3.50-next.0 + - @backstage/backend-defaults@0.2.2-next.0 + - @backstage/backend-plugin-api@0.6.2-next.0 + - @backstage/plugin-adr-backend@0.3.8-next.0 + - @backstage/plugin-azure-devops-backend@0.3.29-next.0 + - @backstage/plugin-badges-backend@0.2.5-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.2-next.0 + - @backstage/plugin-devtools-backend@0.1.5-next.0 + - @backstage/plugin-kubernetes-backend@0.11.5-next.0 + - @backstage/plugin-lighthouse-backend@0.2.6-next.0 + - @backstage/plugin-permission-backend@0.5.25-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.13-next.0 + - @backstage/plugin-proxy-backend@0.3.2-next.0 + - @backstage/plugin-search-backend@1.4.2-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.6-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.6-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.6-next.0 + - @backstage/plugin-search-backend-node@1.2.6-next.0 + - @backstage/plugin-techdocs-backend@1.6.7-next.0 + - @backstage/plugin-todo-backend@0.2.2-next.0 + +## 0.0.14 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.1.4 + - @backstage/plugin-search-backend-module-catalog@0.1.4 + - @backstage/plugin-search-backend-module-explore@0.1.4 + - @backstage/plugin-azure-devops-backend@0.3.27 + - @backstage/plugin-kubernetes-backend@0.11.3 + - @backstage/plugin-lighthouse-backend@0.2.4 + - @backstage/plugin-permission-backend@0.5.23 + - @backstage/plugin-scaffolder-backend@1.16.0 + - @backstage/backend-defaults@0.2.0 + - @backstage/plugin-devtools-backend@0.1.3 + - @backstage/plugin-techdocs-backend@1.6.5 + - @backstage/plugin-catalog-backend@1.12.0 + - @backstage/plugin-badges-backend@0.2.3 + - @backstage/plugin-search-backend@1.4.0 + - @backstage/plugin-proxy-backend@0.3.0 + - @backstage/plugin-todo-backend@0.2.0 + - @backstage/plugin-app-backend@0.3.48 + - @backstage/backend-plugin-api@0.6.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0 + - @backstage/plugin-entity-feedback-backend@0.1.6 + - @backstage/plugin-search-backend-node@1.2.4 + - @backstage/plugin-linguist-backend@0.4.0 + - @backstage/plugin-auth-node@0.2.17 + - @backstage/backend-tasks@0.5.5 + - @backstage/plugin-adr-backend@0.3.6 + - @backstage/plugin-permission-node@0.7.11 + - @backstage/plugin-permission-common@0.7.7 + +## 0.0.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.4-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.2 + - @backstage/plugin-scaffolder-backend@1.15.2-next.2 + - @backstage/plugin-catalog-backend@1.12.0-next.2 + - @backstage/backend-plugin-api@0.6.0-next.2 + - @backstage/plugin-proxy-backend@0.3.0-next.2 + - @backstage/backend-tasks@0.5.5-next.2 + - @backstage/plugin-app-backend@0.3.48-next.2 + - @backstage/plugin-linguist-backend@0.4.0-next.2 + - @backstage/plugin-techdocs-backend@1.6.5-next.2 + - @backstage/backend-defaults@0.2.0-next.2 + - @backstage/plugin-adr-backend@0.3.6-next.2 + - @backstage/plugin-azure-devops-backend@0.3.27-next.2 + - @backstage/plugin-badges-backend@0.2.3-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.2 + - @backstage/plugin-devtools-backend@0.1.3-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.2 + - @backstage/plugin-kubernetes-backend@0.11.3-next.2 + - @backstage/plugin-lighthouse-backend@0.2.4-next.2 + - @backstage/plugin-permission-backend@0.5.23-next.2 + - @backstage/plugin-permission-node@0.7.11-next.2 + - @backstage/plugin-search-backend@1.4.0-next.2 + - @backstage/plugin-search-backend-node@1.2.4-next.2 + - @backstage/plugin-todo-backend@0.2.0-next.2 + - @backstage/plugin-auth-node@0.2.17-next.2 + +## 0.0.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.1 + - @backstage/plugin-azure-devops-backend@0.3.27-next.1 + - @backstage/plugin-kubernetes-backend@0.11.3-next.1 + - @backstage/plugin-lighthouse-backend@0.2.4-next.1 + - @backstage/plugin-permission-backend@0.5.23-next.1 + - @backstage/plugin-scaffolder-backend@1.15.2-next.1 + - @backstage/backend-defaults@0.2.0-next.1 + - @backstage/plugin-devtools-backend@0.1.3-next.1 + - @backstage/plugin-techdocs-backend@1.6.5-next.1 + - @backstage/plugin-catalog-backend@1.12.0-next.1 + - @backstage/plugin-badges-backend@0.2.3-next.1 + - @backstage/plugin-search-backend@1.4.0-next.1 + - @backstage/plugin-todo-backend@0.2.0-next.1 + - @backstage/plugin-app-backend@0.3.48-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/plugin-linguist-backend@0.3.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-adr-backend@0.3.6-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/plugin-permission-common@0.7.7 + +## 0.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-linguist-backend@0.3.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.0 + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/plugin-todo-backend@0.2.0-next.0 + - @backstage/plugin-catalog-backend@1.12.0-next.0 + - @backstage/plugin-search-backend@1.4.0-next.0 + - @backstage/backend-defaults@0.1.13-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/plugin-adr-backend@0.3.6-next.0 + - @backstage/plugin-app-backend@0.3.48-next.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-azure-devops-backend@0.3.27-next.0 + - @backstage/plugin-badges-backend@0.2.3-next.0 + - @backstage/plugin-devtools-backend@0.1.3-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.0 + - @backstage/plugin-kubernetes-backend@0.11.3-next.0 + - @backstage/plugin-lighthouse-backend@0.2.4-next.0 + - @backstage/plugin-permission-backend@0.5.23-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.4-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.0 + - @backstage/plugin-techdocs-backend@1.6.5-next.0 + +## 0.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2 + - @backstage/plugin-badges-backend@0.2.2 + - @backstage/plugin-devtools-backend@0.1.2 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1 + - @backstage/plugin-azure-devops-backend@0.3.26 + - @backstage/plugin-linguist-backend@0.3.1 + - @backstage/plugin-adr-backend@0.3.5 + - @backstage/plugin-lighthouse-backend@0.2.3 + - @backstage/plugin-entity-feedback-backend@0.1.5 + - @backstage/plugin-catalog-backend@1.11.0 + - @backstage/backend-defaults@0.1.12 + - @backstage/backend-tasks@0.5.4 + - @backstage/plugin-app-backend@0.3.47 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-backend@0.5.22 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-search-backend@1.3.3 + - @backstage/plugin-search-backend-module-catalog@0.1.3 + - @backstage/plugin-search-backend-module-explore@0.1.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.3 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-techdocs-backend@1.6.4 + - @backstage/plugin-todo-backend@0.1.44 + +## 0.0.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-backend@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/plugin-kubernetes-backend@0.11.2-next.2 + - @backstage/plugin-adr-backend@0.3.5-next.1 + - @backstage/backend-defaults@0.1.12-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2-next.1 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-devtools-backend@0.1.2-next.1 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + +## 0.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-kubernetes-backend@0.11.2-next.0 + - @backstage/backend-defaults@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.0.12 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/plugin-kubernetes-backend@0.11.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0 + - @backstage/plugin-catalog-backend@1.10.0 + - @backstage/plugin-search-backend@1.3.2 + - @backstage/plugin-search-backend-module-explore@0.1.2 + - @backstage/backend-defaults@0.1.11 + - @backstage/plugin-app-backend@0.3.46 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-backend@0.5.21 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/plugin-search-backend-module-catalog@0.1.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.2 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/plugin-techdocs-backend@1.6.3 + - @backstage/plugin-todo-backend@0.1.43 + - @backstage/plugin-permission-common@0.7.6 + +## 0.0.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/plugin-kubernetes-backend@0.11.1-next.3 + - @backstage/plugin-catalog-backend@1.10.0-next.2 + - @backstage/backend-defaults@0.1.11-next.2 + - @backstage/plugin-app-backend@0.3.46-next.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.1 + - @backstage/plugin-permission-backend@0.5.21-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-search-backend@1.3.2-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.2-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.2-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.2 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-techdocs-backend@1.6.3-next.2 + - @backstage/plugin-todo-backend@0.1.43-next.2 + +## 0.0.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.1-next.2 + - @backstage/plugin-scaffolder-backend@1.15.0-next.2 + +## 0.0.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.0 + - @backstage/plugin-catalog-backend@1.9.2-next.1 + - @backstage/plugin-scaffolder-backend@1.15.0-next.1 + - @backstage/backend-defaults@0.1.11-next.1 + - @backstage/plugin-app-backend@0.3.46-next.1 + - @backstage/plugin-auth-node@0.2.15-next.1 + - @backstage/plugin-kubernetes-backend@0.11.1-next.1 + - @backstage/plugin-permission-backend@0.5.21-next.1 + - @backstage/plugin-permission-node@0.7.9-next.1 + - @backstage/plugin-search-backend@1.3.2-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.2-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.2-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.1 + - @backstage/plugin-search-backend-node@1.2.2-next.1 + - @backstage/plugin-techdocs-backend@1.6.3-next.1 + - @backstage/plugin-todo-backend@0.1.43-next.1 + - @backstage/plugin-permission-common@0.7.6-next.0 + +## 0.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.1-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.2-next.0 + - @backstage/plugin-catalog-backend@1.9.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.1-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.2-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.0 + - @backstage/plugin-techdocs-backend@1.6.3-next.0 + - @backstage/plugin-todo-backend@0.1.43-next.0 + - @backstage/plugin-app-backend@0.3.46-next.0 + - @backstage/backend-defaults@0.1.11-next.0 + - @backstage/plugin-auth-node@0.2.15-next.0 + - @backstage/plugin-permission-backend@0.5.21-next.0 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-node@0.7.9-next.0 + - @backstage/plugin-search-backend@1.3.2-next.0 + - @backstage/plugin-search-backend-node@1.2.2-next.0 + +## 0.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.14.0 + - @backstage/plugin-catalog-backend@1.9.1 + - @backstage/plugin-kubernetes-backend@0.11.0 + - @backstage/plugin-todo-backend@0.1.42 + - @backstage/plugin-permission-node@0.7.8 + - @backstage/plugin-search-backend@1.3.1 + - @backstage/backend-defaults@0.1.10 + - @backstage/plugin-app-backend@0.3.45 + - @backstage/plugin-auth-node@0.2.14 + - @backstage/plugin-search-backend-module-catalog@0.1.1 + - @backstage/plugin-search-backend-module-explore@0.1.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1 + - @backstage/plugin-techdocs-backend@1.6.2 + - @backstage/plugin-permission-backend@0.5.20 + - @backstage/plugin-search-backend-node@1.2.1 + - @backstage/plugin-permission-common@0.7.5 + +## 0.0.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.9.1-next.2 + - @backstage/plugin-kubernetes-backend@0.11.0-next.2 + - @backstage/plugin-search-backend@1.3.1-next.2 + - @backstage/plugin-scaffolder-backend@1.13.2-next.2 + +## 0.0.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.0-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/backend-defaults@0.1.10-next.1 + - @backstage/plugin-app-backend@0.3.45-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-backend@0.5.20-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend@1.3.1-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-techdocs-backend@1.6.2-next.1 + - @backstage/plugin-todo-backend@0.1.42-next.1 + +## 0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.0-next.0 + - @backstage/backend-defaults@0.1.10-next.0 + - @backstage/plugin-app-backend@0.3.45-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-search-backend@1.3.1-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + - @backstage/plugin-techdocs-backend@1.6.2-next.0 + - @backstage/plugin-permission-backend@0.5.20-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-todo-backend@0.1.42-next.0 + - @backstage/plugin-permission-common@0.7.5 + +## 0.0.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0 + - @backstage/plugin-scaffolder-backend@1.13.0 + - @backstage/plugin-catalog-backend@1.9.0 + - @backstage/plugin-permission-node@0.7.7 + - @backstage/plugin-permission-backend@0.5.19 + - @backstage/plugin-search-backend@1.3.0 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-techdocs-backend@1.6.1 + - @backstage/plugin-search-backend-node@1.2.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.0 + - @backstage/plugin-search-backend-module-catalog@0.1.0 + - @backstage/plugin-search-backend-module-explore@0.1.0 + - @backstage/backend-defaults@0.1.9 + - @backstage/plugin-app-backend@0.3.44 + - @backstage/plugin-auth-node@0.2.13 + - @backstage/plugin-todo-backend@0.1.41 + +## 0.0.10-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.3 + - @backstage/plugin-catalog-backend@1.9.0-next.3 + - @backstage/plugin-scaffolder-backend@1.13.0-next.3 + - @backstage/backend-defaults@0.1.9-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.2 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.3 + - @backstage/plugin-todo-backend@0.1.41-next.3 + +## 0.0.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.10.0-next.2 + - @backstage/plugin-catalog-backend@1.8.1-next.2 + - @backstage/plugin-permission-node@0.7.7-next.2 + - @backstage/plugin-permission-backend@0.5.19-next.2 + - @backstage/plugin-scaffolder-backend@1.13.0-next.2 + - @backstage/backend-defaults@0.1.9-next.2 + - @backstage/plugin-app-backend@0.3.44-next.2 + - @backstage/plugin-auth-node@0.2.13-next.2 + - @backstage/plugin-permission-common@0.7.5-next.0 + - @backstage/plugin-search-backend@1.3.0-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 + - @backstage/plugin-search-backend-node@1.2.0-next.2 + - @backstage/plugin-techdocs-backend@1.6.1-next.2 + - @backstage/plugin-todo-backend@0.1.41-next.2 + +## 0.0.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend@1.3.0-next.1 + - @backstage/plugin-scaffolder-backend@1.13.0-next.1 + - @backstage/plugin-catalog-backend@1.8.1-next.1 + - @backstage/plugin-kubernetes-backend@0.10.0-next.1 + - @backstage/plugin-techdocs-backend@1.6.1-next.1 + - @backstage/plugin-search-backend-node@1.2.0-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.0-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.0-next.0 + - @backstage/backend-defaults@0.1.9-next.1 + - @backstage/plugin-app-backend@0.3.44-next.1 + - @backstage/plugin-todo-backend@0.1.41-next.1 + +## 0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.1-next.0 + - @backstage/plugin-catalog-backend@1.8.1-next.0 + - @backstage/backend-defaults@0.1.9-next.0 + - @backstage/plugin-app-backend@0.3.44-next.0 + - @backstage/plugin-techdocs-backend@1.6.1-next.0 + - @backstage/plugin-todo-backend@0.1.41-next.0 + +## 0.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0 + - @backstage/plugin-catalog-backend@1.8.0 + - @backstage/plugin-todo-backend@0.1.40 + - @backstage/plugin-techdocs-backend@1.6.0 + - @backstage/backend-defaults@0.1.8 + - @backstage/plugin-app-backend@0.3.43 + +## 0.0.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.2 + - @backstage/backend-defaults@0.1.8-next.2 + - @backstage/plugin-app-backend@0.3.43-next.2 + - @backstage/plugin-catalog-backend@1.8.0-next.2 + - @backstage/plugin-todo-backend@0.1.40-next.2 + +## 0.0.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.12.0-next.1 + - @backstage/plugin-app-backend@0.3.43-next.1 + - @backstage/plugin-catalog-backend@1.8.0-next.1 + - @backstage/plugin-todo-backend@0.1.40-next.1 + - @backstage/backend-defaults@0.1.8-next.1 + +## 0.0.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-todo-backend@0.1.40-next.0 + - @backstage/plugin-scaffolder-backend@1.11.1-next.0 + - @backstage/plugin-catalog-backend@1.8.0-next.0 + - @backstage/backend-defaults@0.1.8-next.0 + - @backstage/plugin-app-backend@0.3.43-next.0 + +## 0.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.7.2 + - @backstage/plugin-scaffolder-backend@1.11.0 + - @backstage/plugin-app-backend@0.3.42 + - @backstage/backend-defaults@0.1.7 + +## 0.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.7.2-next.2 + - @backstage/plugin-scaffolder-backend@1.11.0-next.2 + - @backstage/plugin-app-backend@0.3.42-next.2 + - @backstage/backend-defaults@0.1.7-next.2 + +## 0.0.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.7.2-next.1 + - @backstage/plugin-scaffolder-backend@1.11.0-next.1 + - @backstage/backend-defaults@0.1.7-next.1 + - @backstage/plugin-app-backend@0.3.42-next.1 + +## 0.0.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.11.0-next.0 + - @backstage/backend-defaults@0.1.7-next.0 + - @backstage/plugin-app-backend@0.3.42-next.0 + - @backstage/plugin-catalog-backend@1.7.2-next.0 + +## 0.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.10.0 + - @backstage/backend-defaults@0.1.5 + - @backstage/plugin-app-backend@0.3.40 + - @backstage/plugin-catalog-backend@1.7.0 + +## 0.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.1.5-next.1 + - @backstage/plugin-scaffolder-backend@1.10.0-next.2 + - @backstage/plugin-catalog-backend@1.7.0-next.2 + - @backstage/plugin-app-backend@0.3.40-next.1 + +## 0.0.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-defaults@0.1.5-next.0 + - @backstage/plugin-scaffolder-backend@1.10.0-next.1 + - @backstage/plugin-app-backend@0.3.40-next.0 + - @backstage/plugin-catalog-backend@1.7.0-next.1 + +## 0.0.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.9.1-next.0 + - @backstage/plugin-catalog-backend@1.7.0-next.0 + - @backstage/backend-defaults@0.1.4 + - @backstage/plugin-app-backend@0.3.39 + +## 0.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.9.0 + - @backstage/plugin-catalog-backend@1.6.0 + - @backstage/plugin-app-backend@0.3.39 + - @backstage/backend-defaults@0.1.4 + +## 0.0.6-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.3 + - @backstage/plugin-scaffolder-backend@1.9.0-next.3 + - @backstage/backend-defaults@0.1.4-next.3 + - @backstage/plugin-app-backend@0.3.39-next.3 + +## 0.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.2 + - @backstage/plugin-app-backend@0.3.39-next.2 + - @backstage/plugin-scaffolder-backend@1.9.0-next.2 + - @backstage/backend-defaults@0.1.4-next.2 + +## 0.0.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.6.0-next.1 + - @backstage/plugin-scaffolder-backend@1.8.1-next.1 + - @backstage/plugin-app-backend@0.3.39-next.1 + - @backstage/backend-defaults@0.1.4-next.1 + +## 0.0.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.8.1-next.0 + - @backstage/plugin-catalog-backend@1.6.0-next.0 + - @backstage/plugin-app-backend@0.3.39-next.0 + - @backstage/backend-defaults@0.1.4-next.0 + +## 0.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.1 + - @backstage/plugin-scaffolder-backend@1.8.0 + - @backstage/plugin-app-backend@0.3.38 + - @backstage/backend-defaults@0.1.3 + +## 0.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.8.0-next.2 + - @backstage/plugin-app-backend@0.3.38-next.1 + - @backstage/plugin-catalog-backend@1.5.1-next.1 + - @backstage/backend-defaults@0.1.3-next.1 + +## 0.0.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.8.0-next.1 + +## 0.0.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.1-next.0 + - @backstage/plugin-scaffolder-backend@1.8.0-next.0 + - @backstage/plugin-app-backend@0.3.38-next.0 + - @backstage/backend-defaults@0.1.3-next.0 + +## 0.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/backend-defaults@0.1.2 + - @backstage/plugin-app-backend@0.3.37 + +## 0.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/plugin-app-backend@0.3.37-next.2 + - @backstage/backend-defaults@0.1.2-next.2 + +## 0.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0-next.1 + - @backstage/backend-defaults@0.1.2-next.1 + - @backstage/plugin-app-backend@0.3.37-next.1 + - @backstage/plugin-catalog-backend@1.4.1-next.1 + +## 0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0-next.0 + - @backstage/backend-defaults@0.1.2-next.0 + - @backstage/plugin-catalog-backend@1.4.1-next.0 + - @backstage/plugin-app-backend@0.3.37-next.0 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.6.0 + - @backstage/plugin-catalog-backend@1.4.0 + - @backstage/backend-defaults@0.1.1 + +## 0.0.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.4.0-next.1 + - @backstage/plugin-scaffolder-backend@1.6.0-next.1 + +## 0.0.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.6.0-next.0 + - @backstage/plugin-catalog-backend@1.3.2-next.0 + - @backstage/backend-defaults@0.1.1-next.0 + +## 0.0.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0 + - @backstage/backend-defaults@0.1.0 + - @backstage/plugin-catalog-backend@1.3.1 + +## 0.0.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.5.0-next.0 + - @backstage/backend-app-api@0.1.1-next.0 + - @backstage/plugin-catalog-backend@1.3.1-next.0 + +## 0.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.3.0 + - @backstage/plugin-scaffolder-backend@1.4.0 + - @backstage/backend-app-api@0.1.0 + +## 0.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.3.0-next.3 + - @backstage/plugin-scaffolder-backend@1.4.0-next.3 + - @backstage/backend-app-api@0.1.0-next.0 diff --git a/packages/backend-split/README.md b/packages/backend-split/README.md new file mode 100644 index 0000000000..d5d2abe027 --- /dev/null +++ b/packages/backend-split/README.md @@ -0,0 +1,8 @@ +# example-backend + +This package is an EXAMPLE of a Backstage backend using the [new backend system](https://backstage.io/docs/backend-system/). + +The main purpose of this package is to provide a test bed for Backstage split deployment work. You can deploy both this package and the main `packages/backend` together by running the `start:split` command in both packages. This will run the following backends: + +1. `packages/backend` running on `:7007` with the default plugins installed. +2. `packages/backend-split` running on `:7008` with a subset of plugins installed for testing. diff --git a/packages/backend-split/app-config.split.yaml b/packages/backend-split/app-config.split.yaml new file mode 100644 index 0000000000..80d77aaa3d --- /dev/null +++ b/packages/backend-split/app-config.split.yaml @@ -0,0 +1,14 @@ +backend: + baseUrl: http://localhost:7008 + listen: + port: 7008 + +discovery: + endpoints: + - target: http://localhost:7007/api/{{pluginId}} + plugins: [proxy] + - target: http://localhost:7008/api/{{pluginId}} + plugins: [catalog] + instances: + - baseUrl: http://localhost:7007 + - baseUrl: http://localhost:7008 diff --git a/packages/backend-split/catalog-info.yaml b/packages/backend-split/catalog-info.yaml new file mode 100644 index 0000000000..8c81e9d5e9 --- /dev/null +++ b/packages/backend-split/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: example-backend-split + title: example-backend-split +spec: + lifecycle: experimental + type: backstage-backend + owner: maintainers diff --git a/packages/backend-split/knip-report.md b/packages/backend-split/knip-report.md new file mode 100644 index 0000000000..a26b412ee9 --- /dev/null +++ b/packages/backend-split/knip-report.md @@ -0,0 +1,12 @@ +# Knip report + +## Unused dependencies (5) + +| Name | Location | Severity | +| :----------------------------------------------- | :----------- | :------- | +| @backstage/plugin-catalog-backend-module-openapi | package.json | error | +| @backstage/plugin-search-backend-node | package.json | error | +| @backstage/plugin-permission-common | package.json | error | +| @backstage/plugin-permission-node | package.json | error | +| @backstage/backend-tasks | package.json | error | + diff --git a/packages/backend-split/package.json b/packages/backend-split/package.json new file mode 100644 index 0000000000..cca4f9ebd0 --- /dev/null +++ b/packages/backend-split/package.json @@ -0,0 +1,73 @@ +{ + "name": "example-backend-split", + "version": "0.0.33-next.2", + "backstage": { + "role": "backend" + }, + "private": true, + "keywords": [ + "backstage" + ], + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/backend" + }, + "license": "Apache-2.0", + "main": "dist/index.cjs.js", + "types": "src/index.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "start": "backstage-cli package start --require ./src/instrumentation.js", + "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-app-backend": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", + "@backstage/plugin-auth-backend-module-guest-provider": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^", + "@backstage/plugin-catalog-backend-module-openapi": "workspace:^", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", + "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", + "@backstage/plugin-devtools-backend": "workspace:^", + "@backstage/plugin-events-backend": "workspace:^", + "@backstage/plugin-kubernetes-backend": "workspace:^", + "@backstage/plugin-notifications-backend": "workspace:^", + "@backstage/plugin-permission-backend": "workspace:^", + "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^", + "@backstage/plugin-permission-common": "workspace:^", + "@backstage/plugin-permission-node": "workspace:^", + "@backstage/plugin-proxy-backend": "workspace:^", + "@backstage/plugin-scaffolder-backend": "workspace:^", + "@backstage/plugin-scaffolder-backend-module-github": "workspace:^", + "@backstage/plugin-scaffolder-backend-module-notifications": "workspace:^", + "@backstage/plugin-search-backend": "workspace:^", + "@backstage/plugin-search-backend-module-catalog": "workspace:^", + "@backstage/plugin-search-backend-module-explore": "workspace:^", + "@backstage/plugin-search-backend-module-techdocs": "workspace:^", + "@backstage/plugin-search-backend-node": "workspace:^", + "@backstage/plugin-signals-backend": "workspace:^", + "@backstage/plugin-techdocs-backend": "workspace:^", + "@opentelemetry/auto-instrumentations-node": "^0.54.0", + "@opentelemetry/exporter-prometheus": "^0.54.0", + "@opentelemetry/sdk-node": "^0.54.0", + "example-app": "link:../app", + "express-promise-router": "^4.1.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^" + } +} diff --git a/packages/backend-split/src/experimental/features.http b/packages/backend-split/src/experimental/features.http new file mode 100644 index 0000000000..41c07e99d4 --- /dev/null +++ b/packages/backend-split/src/experimental/features.http @@ -0,0 +1,5 @@ +GET http://localhost:7007/.backstage/systemInfo/features/installed + +### + +GET http://localhost:7008/.backstage/systemInfo/features/installed \ No newline at end of file diff --git a/packages/backend/src/instanceMetadata.ts b/packages/backend-split/src/experimental/instanceMetadata.ts similarity index 77% rename from packages/backend/src/instanceMetadata.ts rename to packages/backend-split/src/experimental/instanceMetadata.ts index 026fc6fd02..370ec02325 100644 --- a/packages/backend/src/instanceMetadata.ts +++ b/packages/backend-split/src/experimental/instanceMetadata.ts @@ -26,14 +26,22 @@ export default createBackendPlugin({ deps: { instanceMetadata: coreServices.rootInstanceMetadata, logger: coreServices.logger, + httpRouter: coreServices.rootHttpRouter, }, - async init({ instanceMetadata, logger }) { - const plugins = await instanceMetadata.getInstalledPlugins(); + async init({ instanceMetadata, logger, httpRouter }) { logger.info( `Installed plugins on this instance: ${plugins .map(e => e.pluginId) .join(', ')}`, ); + + const router = Router(); + + router.get('/features/installed', (_, res) => { + res.json({ items: instanceMetadata.getInstalledFeatures() }); + }); + + httpRouter.use('/.backstage/instanceInfo', router); }, }); }, diff --git a/packages/backend-split/src/experimental/systemMetadata.ts b/packages/backend-split/src/experimental/systemMetadata.ts new file mode 100644 index 0000000000..3b70059711 --- /dev/null +++ b/packages/backend-split/src/experimental/systemMetadata.ts @@ -0,0 +1,93 @@ +/* + * Copyright 2024 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 { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { + BackendFeatureMeta, + systemMetadataServiceRef, +} from '@backstage/backend-plugin-api/alpha'; +import Router from 'express-promise-router'; + +// Example usage of the instance metadata service to log the installed features. +export default createBackendPlugin({ + pluginId: 'system-metadata-logging', + register(env) { + env.registerInit({ + deps: { + systemMetadata: systemMetadataServiceRef, + logger: coreServices.logger, + httpRouter: coreServices.rootHttpRouter, + }, + async init({ systemMetadata, logger, httpRouter }) { + logger.info( + `Instances in this system: ${JSON.stringify( + await systemMetadata.listInstances(), + )}`, + ); + + const router = Router(); + + router.get('/instances', async (_, res) => { + res.json(await systemMetadata.listInstances()); + }); + + router.get('/features/installed', async (_, res) => { + const instances = await systemMetadata.listInstances(); + const featurePromises = await Promise.allSettled( + instances.map(async instance => { + const response = await fetch( + `${instance.url}/.backstage/instanceInfo/features/installed`, + ); + if (response.ok) { + return { instance, response: await response.json() }; + } + throw new Error( + `Failed to fetch installed features from ${instance.url}`, + ); + }), + ); + const pluginByInstance: Record = {}; + for (const result of featurePromises) { + if (result.status !== 'fulfilled') { + logger.error( + `Failed to fetch installed features: ${result.reason}`, + ); + continue; + } + const instance = result.value.instance; + const installedFeatures = result.value.response + .items as BackendFeatureMeta[]; + for (const feature of installedFeatures) { + if (feature.type === 'plugin') { + if (!pluginByInstance[feature.pluginId]) { + pluginByInstance[feature.pluginId] = []; + } + pluginByInstance[feature.pluginId].push( + `${instance.url}/api/${feature.pluginId}`, + ); + } + } + } + res.json(pluginByInstance); + }); + + httpRouter.use('/.backstage/systemInfo', router); + }, + }); + }, +}); diff --git a/packages/backend-split/src/index.ts b/packages/backend-split/src/index.ts new file mode 100644 index 0000000000..ca5fcd93e8 --- /dev/null +++ b/packages/backend-split/src/index.ts @@ -0,0 +1,37 @@ +/* + * Copyright 2022 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 { createBackend } from '@backstage/backend-defaults'; +import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha/systemMetadata'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-catalog-backend-module-unprocessed')); +backend.add( + import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), +); +backend.add(import('@backstage/plugin-catalog-backend')); + +backend.add( + import('@backstage/plugin-permission-backend-module-allow-all-policy'), +); +backend.add(import('@backstage/plugin-permission-backend')); + +backend.add(import('./experimental/instanceMetadata')); +backend.add(import('./experimental/systemMetadata')); +backend.add(systemMetadataServiceFactory); + +backend.start(); diff --git a/packages/backend-split/src/instrumentation.js b/packages/backend-split/src/instrumentation.js new file mode 100644 index 0000000000..e3725632c1 --- /dev/null +++ b/packages/backend-split/src/instrumentation.js @@ -0,0 +1,34 @@ +/* + * Copyright 2024 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. + */ + +const { NodeSDK } = require('@opentelemetry/sdk-node'); +const { + getNodeAutoInstrumentations, +} = require('@opentelemetry/auto-instrumentations-node'); +const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus'); + +// Expose opentelemetry metrics using a Prometheus exporter on +// http://localhost:9464/metrics. See packages/backend/prometheus.yml for +// more information on how to scrape it. +const prometheus = new PrometheusExporter(); + +const sdk = new NodeSDK({ + // traceExporter: ..., + metricReader: prometheus, + instrumentations: [getNodeAutoInstrumentations()], +}); + +sdk.start(); diff --git a/packages/backend/app-config.split.yaml b/packages/backend/app-config.split.yaml new file mode 100644 index 0000000000..d1a7cf76f1 --- /dev/null +++ b/packages/backend/app-config.split.yaml @@ -0,0 +1,9 @@ +discovery: + endpoints: + - target: http://localhost:7007/api/{{pluginId}} + plugins: [proxy] + - target: http://localhost:7008/api/{{pluginId}} + plugins: [catalog] + instances: + - baseUrl: http://localhost:7007 + - baseUrl: http://localhost:7008 diff --git a/packages/backend/package.json b/packages/backend/package.json index 2af36b8077..12eba46769 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -26,6 +26,7 @@ "clean": "backstage-cli package clean", "lint": "backstage-cli package lint", "start": "backstage-cli package start --require ./src/instrumentation.js", + "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", "start:prometheus": "docker run --mount type=bind,source=./prometheus.yml,destination=/etc/prometheus/prometheus.yml --publish published=9090,target=9090,protocol=tcp prom/prometheus", "test": "backstage-cli package test" }, @@ -69,7 +70,8 @@ "@opentelemetry/auto-instrumentations-node": "^0.61.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "example-app": "link:../app" + "example-app": "link:../app", + "express-promise-router": "^4.1.0" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/packages/backend/src/experimental/instanceMetadata.ts b/packages/backend/src/experimental/instanceMetadata.ts new file mode 100644 index 0000000000..09e2b0cae8 --- /dev/null +++ b/packages/backend/src/experimental/instanceMetadata.ts @@ -0,0 +1,50 @@ +/* + * Copyright 2024 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 { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { instanceMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; +import Router from 'express-promise-router'; + +// Example usage of the instance metadata service to log the installed features. +export default createBackendPlugin({ + pluginId: 'instance-metadata-logging', + register(env) { + env.registerInit({ + deps: { + instanceMetadata: instanceMetadataServiceRef, + logger: coreServices.logger, + httpRouter: coreServices.rootHttpRouter, + }, + async init({ instanceMetadata, logger, httpRouter }) { + logger.info( + `Installed features on this instance: ${JSON.stringify( + instanceMetadata.getInstalledFeatures(), + )}`, + ); + + const router = Router(); + + router.get('/features/installed', (_, res) => { + res.json({ items: instanceMetadata.getInstalledFeatures() }); + }); + + httpRouter.use('/.backstage/instanceInfo', router); + }, + }); + }, +}); diff --git a/packages/backend/src/experimental/systemMetadata.ts b/packages/backend/src/experimental/systemMetadata.ts new file mode 100644 index 0000000000..3b70059711 --- /dev/null +++ b/packages/backend/src/experimental/systemMetadata.ts @@ -0,0 +1,93 @@ +/* + * Copyright 2024 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 { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { + BackendFeatureMeta, + systemMetadataServiceRef, +} from '@backstage/backend-plugin-api/alpha'; +import Router from 'express-promise-router'; + +// Example usage of the instance metadata service to log the installed features. +export default createBackendPlugin({ + pluginId: 'system-metadata-logging', + register(env) { + env.registerInit({ + deps: { + systemMetadata: systemMetadataServiceRef, + logger: coreServices.logger, + httpRouter: coreServices.rootHttpRouter, + }, + async init({ systemMetadata, logger, httpRouter }) { + logger.info( + `Instances in this system: ${JSON.stringify( + await systemMetadata.listInstances(), + )}`, + ); + + const router = Router(); + + router.get('/instances', async (_, res) => { + res.json(await systemMetadata.listInstances()); + }); + + router.get('/features/installed', async (_, res) => { + const instances = await systemMetadata.listInstances(); + const featurePromises = await Promise.allSettled( + instances.map(async instance => { + const response = await fetch( + `${instance.url}/.backstage/instanceInfo/features/installed`, + ); + if (response.ok) { + return { instance, response: await response.json() }; + } + throw new Error( + `Failed to fetch installed features from ${instance.url}`, + ); + }), + ); + const pluginByInstance: Record = {}; + for (const result of featurePromises) { + if (result.status !== 'fulfilled') { + logger.error( + `Failed to fetch installed features: ${result.reason}`, + ); + continue; + } + const instance = result.value.instance; + const installedFeatures = result.value.response + .items as BackendFeatureMeta[]; + for (const feature of installedFeatures) { + if (feature.type === 'plugin') { + if (!pluginByInstance[feature.pluginId]) { + pluginByInstance[feature.pluginId] = []; + } + pluginByInstance[feature.pluginId].push( + `${instance.url}/api/${feature.pluginId}`, + ); + } + } + } + res.json(pluginByInstance); + }); + + httpRouter.use('/.backstage/systemInfo', router); + }, + }); + }, +}); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 541c3bd791..2728068ab5 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -19,6 +19,7 @@ import { coreServices, createBackendFeatureLoader, } from '@backstage/backend-plugin-api'; +import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha/systemMetadata'; const backend = createBackend(); @@ -69,7 +70,9 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); -backend.add(import('./instanceMetadata')); +backend.add(import('./experimental/instanceMetadata')); +backend.add(import('./experimental/systemMetadata')); +backend.add(systemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); backend.add(import('@backstage/plugin-mcp-actions-backend')); diff --git a/yarn.lock b/yarn.lock index 657eb08631..fdafe26f05 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30232,6 +30232,12 @@ __metadata: languageName: node linkType: soft +"example-app@link:../app::locator=example-backend-split%40workspace%3Apackages%2Fbackend-split": + version: 0.0.0-use.local + resolution: "example-app@link:../app::locator=example-backend-split%40workspace%3Apackages%2Fbackend-split" + languageName: node + linkType: soft + "example-app@workspace:packages/app": version: 0.0.0-use.local resolution: "example-app@workspace:packages/app" @@ -30300,6 +30306,51 @@ __metadata: languageName: unknown linkType: soft +"example-backend-split@workspace:packages/backend-split": + version: 0.0.0-use.local + resolution: "example-backend-split@workspace:packages/backend-split" + dependencies: + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-app-backend": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" + "@backstage/plugin-auth-backend-module-guest-provider": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^" + "@backstage/plugin-catalog-backend-module-openapi": "workspace:^" + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" + "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" + "@backstage/plugin-devtools-backend": "workspace:^" + "@backstage/plugin-events-backend": "workspace:^" + "@backstage/plugin-kubernetes-backend": "workspace:^" + "@backstage/plugin-notifications-backend": "workspace:^" + "@backstage/plugin-permission-backend": "workspace:^" + "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^" + "@backstage/plugin-permission-common": "workspace:^" + "@backstage/plugin-permission-node": "workspace:^" + "@backstage/plugin-proxy-backend": "workspace:^" + "@backstage/plugin-scaffolder-backend": "workspace:^" + "@backstage/plugin-scaffolder-backend-module-github": "workspace:^" + "@backstage/plugin-scaffolder-backend-module-notifications": "workspace:^" + "@backstage/plugin-search-backend": "workspace:^" + "@backstage/plugin-search-backend-module-catalog": "workspace:^" + "@backstage/plugin-search-backend-module-explore": "workspace:^" + "@backstage/plugin-search-backend-module-techdocs": "workspace:^" + "@backstage/plugin-search-backend-node": "workspace:^" + "@backstage/plugin-signals-backend": "workspace:^" + "@backstage/plugin-techdocs-backend": "workspace:^" + "@opentelemetry/auto-instrumentations-node": "npm:^0.54.0" + "@opentelemetry/exporter-prometheus": "npm:^0.54.0" + "@opentelemetry/sdk-node": "npm:^0.54.0" + example-app: "link:../app" + express-promise-router: "npm:^4.1.0" + languageName: unknown + linkType: soft + "example-backend@workspace:packages/backend": version: 0.0.0-use.local resolution: "example-backend@workspace:packages/backend" @@ -30345,6 +30396,7 @@ __metadata: "@opentelemetry/exporter-prometheus": "npm:^0.54.0" "@opentelemetry/sdk-node": "npm:^0.54.0" example-app: "link:../app" + express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft From 2a0c4b09a6d860916d837bc778fde603e859426d Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 21:55:38 -0700 Subject: [PATCH 02/42] add changeset Signed-off-by: aramissennyeydd --- .changeset/old-cats-shake.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/old-cats-shake.md diff --git a/.changeset/old-cats-shake.md b/.changeset/old-cats-shake.md new file mode 100644 index 0000000000..367e7f2062 --- /dev/null +++ b/.changeset/old-cats-shake.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-defaults': minor +'@backstage/backend-plugin-api': minor +--- + +Adds a new experimental `SystemMetadataService` for tracking the collection of Backstage instances that may be deployed at any one time. From bc7bdd7a1ce654468c8ad8e76f48d061b724959d Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 22:01:27 -0700 Subject: [PATCH 03/42] small updates Signed-off-by: aramissennyeydd --- packages/backend-split/CHANGELOG.md | 3516 --------------------------- packages/backend-split/package.json | 2 +- 2 files changed, 1 insertion(+), 3517 deletions(-) delete mode 100644 packages/backend-split/CHANGELOG.md diff --git a/packages/backend-split/CHANGELOG.md b/packages/backend-split/CHANGELOG.md deleted file mode 100644 index 27c2a067b7..0000000000 --- a/packages/backend-split/CHANGELOG.md +++ /dev/null @@ -1,3516 +0,0 @@ -# example-backend - -## 0.0.33-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.28.0-next.2 - - @backstage/backend-defaults@0.6.0-next.2 - - @backstage/plugin-catalog-backend@1.29.0-next.2 - - @backstage/backend-plugin-api@1.1.0-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.2 - - @backstage/plugin-notifications-backend@0.5.0-next.2 - - @backstage/plugin-permission-node@0.8.6-next.2 - - @backstage/plugin-app-backend@0.4.3-next.2 - - @backstage/plugin-auth-backend@0.24.1-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.2 - - @backstage/plugin-devtools-backend@0.5.0-next.2 - - @backstage/plugin-events-backend@0.4.0-next.2 - - @backstage/plugin-kubernetes-backend@0.19.1-next.2 - - @backstage/plugin-proxy-backend@0.5.9-next.2 - - @backstage/plugin-search-backend@1.8.0-next.2 - - @backstage/plugin-search-backend-node@1.3.6-next.2 - - @backstage/plugin-signals-backend@0.2.4-next.2 - - @backstage/plugin-techdocs-backend@1.11.4-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.2 - - @backstage/plugin-auth-node@0.5.5-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.2 - - @backstage/plugin-permission-backend@0.5.52-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.2 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.2 - - @backstage/catalog-model@1.7.2-next.0 - - @backstage/plugin-permission-common@0.8.3-next.0 - -## 0.0.33-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-backend@0.24.1-next.1 - - @backstage/plugin-auth-node@0.5.5-next.1 - - @backstage/plugin-catalog-backend@1.29.0-next.1 - - @backstage/backend-defaults@0.6.0-next.1 - - @backstage/plugin-events-backend@0.4.0-next.1 - - @backstage/plugin-search-backend@1.8.0-next.1 - - @backstage/plugin-devtools-backend@0.5.0-next.1 - - @backstage/plugin-search-backend-node@1.3.6-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.1 - - @backstage/plugin-notifications-backend@0.4.4-next.1 - - @backstage/plugin-permission-backend@0.5.52-next.1 - - @backstage/plugin-techdocs-backend@1.11.4-next.1 - - @backstage/plugin-signals-backend@0.2.4-next.1 - - @backstage/plugin-proxy-backend@0.5.9-next.1 - - @backstage/plugin-app-backend@0.4.3-next.1 - - @backstage/backend-plugin-api@1.1.0-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.1 - - @backstage/plugin-kubernetes-backend@0.19.1-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.1 - - @backstage/plugin-permission-node@0.8.6-next.1 - - @backstage/plugin-scaffolder-backend@1.28.0-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.5.4-next.1 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.5-next.1 - - @backstage/catalog-model@1.7.1 - - @backstage/plugin-permission-common@0.8.2 - -## 0.0.33-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.6.0-next.0 - - @backstage/plugin-scaffolder-backend@1.28.0-next.0 - - @backstage/backend-plugin-api@1.0.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.4-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.6-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.6-next.0 - - @backstage/plugin-app-backend@0.4.3-next.0 - - @backstage/plugin-catalog-backend@1.28.1-next.0 - - @backstage/plugin-auth-node@0.5.5-next.0 - - @backstage/plugin-permission-backend@0.5.52-next.0 - - @backstage/plugin-devtools-backend@0.4.3-next.0 - - @backstage/plugin-signals-backend@0.2.4-next.0 - - @backstage/plugin-events-backend@0.3.17-next.0 - - @backstage/plugin-kubernetes-backend@0.19.1-next.0 - - @backstage/catalog-model@1.7.1 - - @backstage/plugin-auth-backend@0.24.1-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.3-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.3-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.3-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.5-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.3-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.3-next.0 - - @backstage/plugin-notifications-backend@0.4.4-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.3-next.0 - - @backstage/plugin-permission-common@0.8.2 - - @backstage/plugin-permission-node@0.8.6-next.0 - - @backstage/plugin-proxy-backend@0.5.9-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.5.3-next.0 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.4-next.0 - - @backstage/plugin-search-backend@1.7.1-next.0 - - @backstage/plugin-search-backend-node@1.3.6-next.0 - - @backstage/plugin-techdocs-backend@1.11.4-next.0 - -## 0.0.32 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.3 - - @backstage/plugin-app-backend@0.4.0 - - @backstage/plugin-search-backend-module-catalog@0.2.5 - - @backstage/plugin-scaffolder-backend@1.27.0 - - @backstage/plugin-auth-backend@0.24.0 - - @backstage/plugin-catalog-backend@1.28.0 - - @backstage/plugin-search-backend@1.7.0 - - @backstage/plugin-events-backend@0.3.16 - - @backstage/plugin-kubernetes-backend@0.19.0 - - @backstage/plugin-auth-node@0.5.4 - - @backstage/plugin-search-backend-module-explore@0.2.5 - - @backstage/plugin-catalog-backend-module-openapi@0.2.4 - - @backstage/backend-plugin-api@1.0.2 - - @backstage/plugin-notifications-backend@0.4.3 - - @backstage/plugin-signals-backend@0.2.3 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2 - - @backstage/plugin-search-backend-node@1.3.5 - - @backstage/plugin-permission-common@0.8.2 - - @backstage/plugin-proxy-backend@0.5.8 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.2 - - @backstage/catalog-model@1.7.1 - - @backstage/plugin-auth-backend-module-github-provider@0.2.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2 - - @backstage/plugin-devtools-backend@0.4.2 - - @backstage/plugin-permission-backend@0.5.51 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2 - - @backstage/plugin-permission-node@0.8.5 - - @backstage/plugin-scaffolder-backend-module-github@0.5.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.2 - - @backstage/plugin-techdocs-backend@1.11.2 - -## 0.0.32-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-events-backend@0.3.16-next.3 - - @backstage/plugin-catalog-backend@1.28.0-next.3 - - @backstage/backend-defaults@0.5.3-next.3 - - @backstage/plugin-scaffolder-backend@1.27.0-next.3 - - @backstage/backend-plugin-api@1.0.2-next.2 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-app-backend@0.3.77-next.2 - - @backstage/plugin-auth-backend@0.24.0-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 - - @backstage/plugin-auth-node@0.5.4-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 - - @backstage/plugin-devtools-backend@0.4.2-next.2 - - @backstage/plugin-kubernetes-backend@0.19.0-next.3 - - @backstage/plugin-notifications-backend@0.4.3-next.3 - - @backstage/plugin-permission-backend@0.5.51-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.2 - - @backstage/plugin-proxy-backend@0.5.8-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.3 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.3 - - @backstage/plugin-search-backend@1.7.0-next.3 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.3 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.3 - - @backstage/plugin-search-backend-node@1.3.5-next.3 - - @backstage/plugin-signals-backend@0.2.3-next.3 - - @backstage/plugin-techdocs-backend@1.11.2-next.3 - -## 0.0.32-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.28.0-next.2 - - @backstage/plugin-search-backend@1.7.0-next.2 - - @backstage/plugin-kubernetes-backend@0.19.0-next.2 - - @backstage/backend-defaults@0.5.3-next.2 - - @backstage/plugin-events-backend@0.3.16-next.2 - - @backstage/plugin-auth-backend@0.24.0-next.2 - - @backstage/plugin-auth-node@0.5.4-next.2 - - @backstage/plugin-notifications-backend@0.4.3-next.2 - - @backstage/plugin-scaffolder-backend@1.27.0-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.2 - - @backstage/plugin-techdocs-backend@1.11.2-next.2 - - @backstage/backend-plugin-api@1.0.2-next.2 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-app-backend@0.3.77-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.2 - - @backstage/plugin-devtools-backend@0.4.2-next.2 - - @backstage/plugin-permission-backend@0.5.51-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.2 - - @backstage/plugin-proxy-backend@0.5.8-next.2 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.2 - - @backstage/plugin-search-backend-node@1.3.5-next.2 - - @backstage/plugin-signals-backend@0.2.3-next.2 - -## 0.0.32-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.19.0-next.1 - - @backstage/plugin-scaffolder-backend@1.27.0-next.1 - - @backstage/backend-defaults@0.5.3-next.1 - - @backstage/backend-plugin-api@1.0.2-next.1 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-app-backend@0.3.77-next.1 - - @backstage/plugin-auth-backend@0.24.0-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.1 - - @backstage/plugin-auth-node@0.5.4-next.1 - - @backstage/plugin-catalog-backend@1.27.2-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.1 - - @backstage/plugin-devtools-backend@0.4.2-next.1 - - @backstage/plugin-events-backend@0.3.16-next.1 - - @backstage/plugin-notifications-backend@0.4.3-next.1 - - @backstage/plugin-permission-backend@0.5.51-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.1 - - @backstage/plugin-proxy-backend@0.5.8-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.1 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.1 - - @backstage/plugin-search-backend@1.6.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.1 - - @backstage/plugin-search-backend-node@1.3.5-next.1 - - @backstage/plugin-signals-backend@0.2.3-next.1 - - @backstage/plugin-techdocs-backend@1.11.2-next.1 - -## 0.0.32-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-catalog@0.2.5-next.0 - - @backstage/plugin-scaffolder-backend@1.26.3-next.0 - - @backstage/plugin-auth-backend@0.24.0-next.0 - - @backstage/plugin-events-backend@0.3.15-next.0 - - @backstage/plugin-auth-node@0.5.4-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.5-next.0 - - @backstage/backend-defaults@0.5.3-next.0 - - @backstage/plugin-notifications-backend@0.4.3-next.0 - - @backstage/plugin-signals-backend@0.2.3-next.0 - - @backstage/backend-plugin-api@1.0.2-next.0 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-app-backend@0.3.77-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.2-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.2-next.0 - - @backstage/plugin-catalog-backend@1.27.2-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.2-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.4-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.2-next.0 - - @backstage/plugin-devtools-backend@0.4.2-next.0 - - @backstage/plugin-kubernetes-backend@0.18.8-next.0 - - @backstage/plugin-permission-backend@0.5.51-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.2-next.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.5-next.0 - - @backstage/plugin-proxy-backend@0.5.8-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.5.2-next.0 - - @backstage/plugin-scaffolder-backend-module-notifications@0.1.3-next.0 - - @backstage/plugin-search-backend@1.6.2-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.3.2-next.0 - - @backstage/plugin-search-backend-node@1.3.5-next.0 - - @backstage/plugin-techdocs-backend@1.11.2-next.0 - -## 0.0.31 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-catalog@0.2.3 - - @backstage/plugin-search-backend-module-techdocs@0.3.0 - - @backstage/plugin-scaffolder-backend@1.26.0 - - @backstage/backend-defaults@0.5.1 - - @backstage/plugin-scaffolder-backend-module-github@0.5.1 - - @backstage/plugin-auth-backend-module-github-provider@0.2.1 - - @backstage/plugin-search-backend@1.6.0 - - @backstage/plugin-auth-node@0.5.3 - - @backstage/plugin-app-backend@0.3.76 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1 - - @backstage/plugin-catalog-backend-module-openapi@0.2.2 - - @backstage/plugin-search-backend-module-explore@0.2.3 - - @backstage/plugin-notifications-backend@0.4.1 - - @backstage/plugin-search-backend-node@1.3.3 - - @backstage/plugin-kubernetes-backend@0.18.7 - - @backstage/plugin-permission-backend@0.5.50 - - @backstage/plugin-devtools-backend@0.4.1 - - @backstage/plugin-techdocs-backend@1.11.0 - - @backstage/plugin-catalog-backend@1.27.0 - - @backstage/plugin-permission-node@0.8.4 - - @backstage/plugin-signals-backend@0.2.1 - - @backstage/plugin-events-backend@0.3.13 - - @backstage/plugin-proxy-backend@0.5.7 - - @backstage/plugin-auth-backend@0.23.1 - - @backstage/backend-plugin-api@1.0.1 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1 - - @backstage/plugin-permission-common@0.8.1 - -## 0.0.31-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.2 - - @backstage/backend-defaults@0.5.1-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.1 - - @backstage/plugin-scaffolder-backend@1.26.0-next.2 - - @backstage/plugin-search-backend@1.5.18-next.2 - - @backstage/plugin-auth-node@0.5.3-next.1 - - @backstage/plugin-app-backend@0.3.76-next.1 - - @backstage/plugin-catalog-backend@1.26.2-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.2 - - @backstage/plugin-techdocs-backend@1.10.14-next.2 - - @backstage/backend-plugin-api@1.0.1-next.1 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-auth-backend@0.23.1-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.1 - - @backstage/plugin-devtools-backend@0.4.1-next.1 - - @backstage/plugin-events-backend@0.3.13-next.1 - - @backstage/plugin-kubernetes-backend@0.18.7-next.1 - - @backstage/plugin-notifications-backend@0.4.1-next.1 - - @backstage/plugin-permission-backend@0.5.50-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.4-next.1 - - @backstage/plugin-proxy-backend@0.5.7-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.2 - - @backstage/plugin-search-backend-node@1.3.3-next.2 - - @backstage/plugin-signals-backend@0.2.1-next.1 - -## 0.0.31-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.26.0-next.1 - - @backstage/plugin-catalog-backend@1.26.2-next.1 - - @backstage/backend-defaults@0.5.1-next.1 - - @backstage/backend-plugin-api@1.0.1-next.0 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-app-backend@0.3.75-next.0 - - @backstage/plugin-auth-backend@0.23.1-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 - - @backstage/plugin-auth-node@0.5.3-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.2-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 - - @backstage/plugin-devtools-backend@0.4.1-next.0 - - @backstage/plugin-events-backend@0.3.13-next.0 - - @backstage/plugin-kubernetes-backend@0.18.7-next.0 - - @backstage/plugin-notifications-backend@0.4.1-next.0 - - @backstage/plugin-permission-backend@0.5.50-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.4-next.0 - - @backstage/plugin-proxy-backend@0.5.7-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.1 - - @backstage/plugin-search-backend@1.5.18-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.1 - - @backstage/plugin-search-backend-node@1.3.3-next.1 - - @backstage/plugin-signals-backend@0.2.1-next.0 - - @backstage/plugin-techdocs-backend@1.10.14-next.1 - -## 0.0.31-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.26.0-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.1-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.1-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.5.1-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.1-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.3-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.3-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.3-next.0 - - @backstage/plugin-notifications-backend@0.4.1-next.0 - - @backstage/plugin-search-backend-node@1.3.3-next.0 - - @backstage/plugin-kubernetes-backend@0.18.7-next.0 - - @backstage/plugin-permission-backend@0.5.50-next.0 - - @backstage/backend-defaults@0.5.1-next.0 - - @backstage/plugin-devtools-backend@0.4.1-next.0 - - @backstage/plugin-techdocs-backend@1.10.14-next.0 - - @backstage/plugin-catalog-backend@1.26.1-next.0 - - @backstage/plugin-permission-node@0.8.4-next.0 - - @backstage/plugin-signals-backend@0.2.1-next.0 - - @backstage/plugin-events-backend@0.3.13-next.0 - - @backstage/plugin-search-backend@1.5.18-next.0 - - @backstage/plugin-proxy-backend@0.5.7-next.0 - - @backstage/plugin-auth-backend@0.23.1-next.0 - - @backstage/plugin-app-backend@0.3.75-next.0 - - @backstage/plugin-auth-node@0.5.3-next.0 - - @backstage/backend-plugin-api@1.0.1-next.0 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.1-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.1-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.1-next.0 - - @backstage/plugin-permission-common@0.8.1 - -## 0.0.30 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.0 - - @backstage/plugin-kubernetes-backend@0.18.6 - - @backstage/plugin-signals-backend@0.2.0 - - @backstage/plugin-techdocs-backend@1.10.13 - - @backstage/backend-plugin-api@1.0.0 - - @backstage/plugin-search-backend@1.5.17 - - @backstage/plugin-auth-node@0.5.2 - - @backstage/plugin-devtools-backend@0.4.0 - - @backstage/plugin-app-backend@0.3.74 - - @backstage/plugin-notifications-backend@0.4.0 - - @backstage/plugin-scaffolder-backend@1.25.0 - - @backstage/plugin-auth-backend@0.23.0 - - @backstage/catalog-model@1.7.0 - - @backstage/plugin-catalog-backend@1.26.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.2 - - @backstage/plugin-search-backend-module-catalog@0.2.2 - - @backstage/plugin-search-backend-module-explore@0.2.2 - - @backstage/plugin-permission-node@0.8.3 - - @backstage/plugin-permission-backend@0.5.49 - - @backstage/plugin-proxy-backend@0.5.6 - - @backstage/plugin-scaffolder-backend-module-github@0.5.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-search-backend-node@1.3.2 - -## 0.0.30-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.0-next.2 - - @backstage/plugin-devtools-backend@0.4.0-next.2 - - @backstage/plugin-scaffolder-backend@1.25.0-next.2 - - @backstage/plugin-auth-node@0.5.2-next.2 - - @backstage/plugin-auth-backend@0.23.0-next.2 - - @backstage/backend-plugin-api@1.0.0-next.2 - - @backstage/plugin-catalog-backend@1.26.0-next.2 - - @backstage/plugin-app-backend@0.3.74-next.2 - - @backstage/plugin-notifications-backend@0.4.0-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.2 - - @backstage/plugin-kubernetes-backend@0.18.6-next.2 - - @backstage/plugin-permission-backend@0.5.49-next.2 - - @backstage/plugin-permission-node@0.8.3-next.2 - - @backstage/plugin-search-backend@1.5.17-next.2 - - @backstage/plugin-signals-backend@0.2.0-next.2 - - @backstage/plugin-techdocs-backend@1.10.13-next.2 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.2 - - @backstage/catalog-model@1.6.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.2 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-proxy-backend@0.5.6-next.2 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.2 - - @backstage/plugin-search-backend-node@1.3.2-next.2 - -## 0.0.30-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.5.0-next.1 - - @backstage/plugin-auth-node@0.5.2-next.1 - - @backstage/plugin-catalog-backend@1.25.3-next.1 - - @backstage/plugin-scaffolder-backend@1.25.0-next.1 - - @backstage/plugin-notifications-backend@0.4.0-next.1 - - @backstage/plugin-kubernetes-backend@0.18.6-next.1 - - @backstage/plugin-techdocs-backend@1.10.13-next.1 - - @backstage/backend-plugin-api@0.9.0-next.1 - - @backstage/catalog-model@1.6.0 - - @backstage/plugin-app-backend@0.3.74-next.1 - - @backstage/plugin-auth-backend@0.23.0-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.1 - - @backstage/plugin-devtools-backend@0.4.0-next.1 - - @backstage/plugin-permission-backend@0.5.49-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.1 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-permission-node@0.8.3-next.1 - - @backstage/plugin-proxy-backend@0.5.6-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.1 - - @backstage/plugin-search-backend@1.5.17-next.1 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.1 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.1 - - @backstage/plugin-search-backend-node@1.3.2-next.1 - - @backstage/plugin-signals-backend@0.2.0-next.1 - -## 0.0.30-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.13-next.0 - - @backstage/backend-plugin-api@0.9.0-next.0 - - @backstage/plugin-search-backend@1.5.17-next.0 - - @backstage/plugin-kubernetes-backend@0.18.6-next.0 - - @backstage/plugin-scaffolder-backend@1.25.0-next.0 - - @backstage/plugin-app-backend@0.3.74-next.0 - - @backstage/plugin-signals-backend@0.2.0-next.0 - - @backstage/backend-defaults@0.5.0-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.2.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.2.2-next.0 - - @backstage/plugin-search-backend-module-explore@0.2.2-next.0 - - @backstage/plugin-permission-node@0.8.3-next.0 - - @backstage/plugin-auth-backend@0.23.0-next.0 - - @backstage/plugin-catalog-backend@1.25.3-next.0 - - @backstage/plugin-permission-backend@0.5.49-next.0 - - @backstage/plugin-proxy-backend@0.5.6-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.2.0-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.2.0-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.4.0-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.2.0-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.2.0-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.5.0-next.0 - - @backstage/plugin-devtools-backend@0.4.0-next.0 - - @backstage/plugin-notifications-backend@0.4.0-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.2.0-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.5.0-next.0 - - @backstage/plugin-auth-node@0.5.2-next.0 - - @backstage/plugin-search-backend-node@1.3.2-next.0 - - @backstage/catalog-model@1.6.0 - - @backstage/plugin-permission-common@0.8.1 - -## 0.0.29 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.4.2 - - @backstage/plugin-scaffolder-backend-module-github@0.4.1 - - @backstage/plugin-auth-backend-module-github-provider@0.1.20 - - @backstage/backend-plugin-api@0.8.0 - - @backstage/plugin-catalog-backend@1.25.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.41 - - @backstage/plugin-search-backend-node@1.3.0 - - @backstage/plugin-scaffolder-backend@1.24.0 - - @backstage/plugin-techdocs-backend@1.10.10 - - @backstage/plugin-permission-common@0.8.1 - - @backstage/plugin-search-backend-module-techdocs@0.2.0 - - @backstage/plugin-search-backend-module-explore@0.2.0 - - @backstage/plugin-notifications-backend@0.3.4 - - @backstage/plugin-kubernetes-backend@0.18.4 - - @backstage/plugin-permission-backend@0.5.47 - - @backstage/plugin-devtools-backend@0.3.9 - - @backstage/plugin-signals-backend@0.1.9 - - @backstage/plugin-proxy-backend@0.5.4 - - @backstage/plugin-auth-backend@0.22.10 - - @backstage/plugin-app-backend@0.3.72 - - @backstage/plugin-auth-node@0.5.0 - - @backstage/plugin-permission-node@0.8.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.3.0 - - @backstage/plugin-search-backend-module-catalog@0.2.0 - - @backstage/plugin-search-backend@1.5.15 - - @backstage/catalog-model@1.6.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.9 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20 - -## 0.0.29-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.3 - - @backstage/plugin-notifications-backend@0.3.4-next.3 - - @backstage/backend-plugin-api@0.8.0-next.3 - - @backstage/plugin-techdocs-backend@1.10.10-next.3 - - @backstage/backend-defaults@0.4.2-next.3 - - @backstage/catalog-model@1.6.0-next.0 - - @backstage/plugin-scaffolder-backend@1.23.1-next.3 - - @backstage/backend-tasks@0.5.28-next.3 - - @backstage/plugin-app-backend@0.3.72-next.3 - - @backstage/plugin-auth-backend@0.22.10-next.3 - - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.3 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.3 - - @backstage/plugin-auth-node@0.5.0-next.3 - - @backstage/plugin-catalog-backend@1.24.1-next.3 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.3 - - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.3 - - @backstage/plugin-devtools-backend@0.3.9-next.3 - - @backstage/plugin-kubernetes-backend@0.18.4-next.3 - - @backstage/plugin-permission-backend@0.5.47-next.3 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.3 - - @backstage/plugin-permission-common@0.8.1-next.1 - - @backstage/plugin-permission-node@0.8.1-next.3 - - @backstage/plugin-proxy-backend@0.5.4-next.3 - - @backstage/plugin-search-backend@1.5.15-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.3 - - @backstage/plugin-search-backend-node@1.2.28-next.3 - - @backstage/plugin-signals-backend@0.1.9-next.3 - -## 0.0.29-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.4.2-next.2 - - @backstage/backend-plugin-api@0.8.0-next.2 - - @backstage/plugin-scaffolder-backend@1.23.1-next.2 - - @backstage/plugin-permission-common@0.8.1-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.2 - - @backstage/plugin-notifications-backend@0.3.4-next.2 - - @backstage/plugin-kubernetes-backend@0.18.4-next.2 - - @backstage/plugin-permission-backend@0.5.47-next.2 - - @backstage/plugin-devtools-backend@0.3.9-next.2 - - @backstage/plugin-techdocs-backend@1.10.10-next.2 - - @backstage/plugin-catalog-backend@1.24.1-next.2 - - @backstage/plugin-signals-backend@0.1.9-next.2 - - @backstage/plugin-proxy-backend@0.5.4-next.2 - - @backstage/plugin-auth-backend@0.22.10-next.2 - - @backstage/plugin-app-backend@0.3.72-next.2 - - @backstage/plugin-auth-node@0.5.0-next.2 - - @backstage/plugin-permission-node@0.8.1-next.2 - - @backstage/plugin-search-backend-node@1.2.28-next.2 - - @backstage/plugin-search-backend@1.5.15-next.2 - - @backstage/backend-tasks@0.5.28-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.2 - - @backstage/catalog-model@1.5.0 - -## 0.0.29-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.1 - - @backstage/plugin-techdocs-backend@1.10.10-next.1 - - @backstage/plugin-permission-common@0.8.1-next.0 - - @backstage/plugin-catalog-backend@1.24.1-next.1 - - @backstage/plugin-permission-node@0.8.1-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.1 - - @backstage/backend-plugin-api@0.7.1-next.1 - - @backstage/plugin-scaffolder-backend@1.23.1-next.1 - - @backstage/plugin-auth-backend@0.22.10-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.1 - - @backstage/backend-defaults@0.4.2-next.1 - - @backstage/plugin-app-backend@0.3.72-next.1 - - @backstage/plugin-devtools-backend@0.3.9-next.1 - - @backstage/plugin-proxy-backend@0.5.4-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.1 - - @backstage/plugin-kubernetes-backend@0.18.4-next.1 - - @backstage/plugin-permission-backend@0.5.47-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.1 - - @backstage/plugin-search-backend@1.5.15-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.1 - - @backstage/plugin-search-backend-node@1.2.28-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.1 - - @backstage/backend-tasks@0.5.28-next.1 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.1 - - @backstage/plugin-auth-node@0.4.18-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.1 - - @backstage/plugin-notifications-backend@0.3.4-next.1 - - @backstage/plugin-signals-backend@0.1.9-next.1 - -## 0.0.29-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.4.2-next.0 - - @backstage/plugin-catalog-backend@1.24.1-next.0 - - @backstage/plugin-devtools-backend@0.3.9-next.0 - - @backstage/backend-plugin-api@0.7.1-next.0 - - @backstage/backend-tasks@0.5.28-next.0 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-app-backend@0.3.72-next.0 - - @backstage/plugin-auth-backend@0.22.10-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.20-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.9-next.0 - - @backstage/plugin-auth-node@0.4.18-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.6-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.41-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.21-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.10-next.0 - - @backstage/plugin-kubernetes-backend@0.18.4-next.0 - - @backstage/plugin-notifications-backend@0.3.4-next.0 - - @backstage/plugin-permission-backend@0.5.47-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.20-next.0 - - @backstage/plugin-permission-common@0.8.0 - - @backstage/plugin-permission-node@0.8.1-next.0 - - @backstage/plugin-proxy-backend@0.5.4-next.0 - - @backstage/plugin-scaffolder-backend@1.23.1-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.4.1-next.0 - - @backstage/plugin-search-backend@1.5.15-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.29-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.29-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.28-next.0 - - @backstage/plugin-search-backend-node@1.2.28-next.0 - - @backstage/plugin-signals-backend@0.1.9-next.0 - - @backstage/plugin-techdocs-backend@1.10.10-next.0 - -## 0.0.28 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.7.0 - - @backstage/backend-defaults@0.4.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.19 - - @backstage/backend-tasks@0.5.27 - - @backstage/plugin-scaffolder-backend@1.23.0 - - @backstage/plugin-scaffolder-backend-module-github@0.4.0 - - @backstage/plugin-permission-common@0.8.0 - - @backstage/plugin-permission-backend@0.5.46 - - @backstage/plugin-permission-node@0.8.0 - - @backstage/plugin-techdocs-backend@1.10.9 - - @backstage/plugin-notifications-backend@0.3.3 - - @backstage/plugin-auth-node@0.4.17 - - @backstage/plugin-search-backend@1.5.14 - - @backstage/plugin-catalog-backend@1.24.0 - - @backstage/plugin-app-backend@0.3.71 - - @backstage/plugin-auth-backend@0.22.9 - - @backstage/plugin-auth-backend-module-github-provider@0.1.19 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.8 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.5 - - @backstage/plugin-catalog-backend-module-openapi@0.1.40 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9 - - @backstage/plugin-devtools-backend@0.3.8 - - @backstage/plugin-kubernetes-backend@0.18.3 - - @backstage/plugin-proxy-backend@0.5.3 - - @backstage/plugin-search-backend-module-catalog@0.1.28 - - @backstage/plugin-search-backend-module-explore@0.1.28 - - @backstage/plugin-search-backend-module-techdocs@0.1.27 - - @backstage/plugin-search-backend-node@1.2.27 - - @backstage/plugin-signals-backend@0.1.8 - - @backstage/catalog-model@1.5.0 - -## 0.0.28-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.23.0-next.2 - -## 0.0.28-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.9-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.4.0-next.1 - - @backstage/plugin-catalog-backend@1.24.0-next.1 - - @backstage/backend-defaults@0.3.4-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.27-next.1 - - @backstage/backend-plugin-api@0.6.22-next.1 - - @backstage/backend-tasks@0.5.27-next.1 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-app-backend@0.3.71-next.1 - - @backstage/plugin-auth-backend@0.22.9-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.1.19-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.8-next.1 - - @backstage/plugin-auth-node@0.4.17-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.5-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.40-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.20-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.9-next.1 - - @backstage/plugin-devtools-backend@0.3.8-next.1 - - @backstage/plugin-kubernetes-backend@0.18.3-next.1 - - @backstage/plugin-notifications-backend@0.3.3-next.1 - - @backstage/plugin-permission-backend@0.5.46-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.19-next.1 - - @backstage/plugin-permission-common@0.7.14 - - @backstage/plugin-permission-node@0.7.33-next.1 - - @backstage/plugin-proxy-backend@0.5.3-next.1 - - @backstage/plugin-scaffolder-backend@1.23.0-next.1 - - @backstage/plugin-search-backend@1.5.14-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.28-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.28-next.1 - - @backstage/plugin-search-backend-node@1.2.27-next.1 - - @backstage/plugin-signals-backend@0.1.8-next.1 - -## 0.0.28-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.21-next.0 - - @backstage/backend-defaults@0.3.3-next.0 - - @backstage/backend-tasks@0.5.26-next.0 - - @backstage/plugin-scaffolder-backend@1.23.0-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.4.0-next.0 - - @backstage/plugin-notifications-backend@0.3.2-next.0 - - @backstage/plugin-app-backend@0.3.70-next.0 - - @backstage/plugin-auth-backend@0.22.8-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.18-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.7-next.0 - - @backstage/plugin-auth-node@0.4.16-next.0 - - @backstage/plugin-catalog-backend@1.23.2-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.4-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.39-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.19-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.8-next.0 - - @backstage/plugin-devtools-backend@0.3.7-next.0 - - @backstage/plugin-kubernetes-backend@0.18.2-next.0 - - @backstage/plugin-permission-backend@0.5.45-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.18-next.0 - - @backstage/plugin-permission-node@0.7.32-next.0 - - @backstage/plugin-proxy-backend@0.5.2-next.0 - - @backstage/plugin-search-backend@1.5.13-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.27-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.27-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.26-next.0 - - @backstage/plugin-search-backend-node@1.2.26-next.0 - - @backstage/plugin-signals-backend@0.1.7-next.0 - - @backstage/plugin-techdocs-backend@1.10.8-next.0 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-permission-common@0.7.14 - -## 0.0.27 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.19 - - @backstage/backend-tasks@0.5.24 - - @backstage/plugin-auth-node@0.4.14 - - @backstage/plugin-auth-backend@0.22.6 - - @backstage/plugin-techdocs-backend@1.10.6 - - @backstage/plugin-scaffolder-backend-module-github@0.3.0 - - @backstage/plugin-devtools-backend@0.3.5 - - @backstage/plugin-catalog-backend@1.23.0 - - @backstage/plugin-search-backend@1.5.10 - - @backstage/plugin-proxy-backend@0.5.0 - - @backstage/plugin-app-backend@0.3.68 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2 - - @backstage/plugin-auth-backend-module-github-provider@0.1.16 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.5 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6 - - @backstage/plugin-catalog-backend-module-openapi@0.1.37 - - @backstage/plugin-search-backend-module-techdocs@0.1.24 - - @backstage/plugin-search-backend-module-catalog@0.1.25 - - @backstage/plugin-search-backend-module-explore@0.1.25 - - @backstage/plugin-notifications-backend@0.3.0 - - @backstage/plugin-kubernetes-backend@0.18.0 - - @backstage/plugin-permission-backend@0.5.43 - - @backstage/plugin-scaffolder-backend@1.22.9 - - @backstage/plugin-signals-backend@0.1.5 - - @backstage/backend-defaults@0.3.0 - - @backstage/plugin-search-backend-node@1.2.24 - - @backstage/plugin-permission-node@0.7.30 - - @backstage/plugin-permission-common@0.7.14 - - @backstage/catalog-model@1.5.0 - -## 0.0.27-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.19-next.3 - - @backstage/plugin-auth-node@0.4.14-next.3 - - @backstage/backend-defaults@0.3.0-next.3 - - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.3 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.3 - - @backstage/plugin-scaffolder-backend-module-github@0.3.0-next.3 - - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.3 - - @backstage/plugin-notifications-backend@0.3.0-next.3 - - @backstage/plugin-search-backend-node@1.2.24-next.3 - - @backstage/plugin-kubernetes-backend@0.18.0-next.3 - - @backstage/plugin-permission-backend@0.5.43-next.3 - - @backstage/plugin-scaffolder-backend@1.22.8-next.3 - - @backstage/plugin-permission-common@0.7.14-next.0 - - @backstage/plugin-devtools-backend@0.3.5-next.3 - - @backstage/plugin-techdocs-backend@1.10.6-next.3 - - @backstage/plugin-catalog-backend@1.23.0-next.3 - - @backstage/plugin-permission-node@0.7.30-next.3 - - @backstage/plugin-signals-backend@0.1.5-next.3 - - @backstage/plugin-search-backend@1.5.10-next.3 - - @backstage/plugin-proxy-backend@0.5.0-next.3 - - @backstage/plugin-auth-backend@0.22.6-next.3 - - @backstage/plugin-app-backend@0.3.68-next.3 - - @backstage/backend-tasks@0.5.24-next.3 - - @backstage/catalog-model@1.5.0 - -## 0.0.27-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.6-next.2 - - @backstage/backend-plugin-api@0.6.19-next.2 - - @backstage/backend-defaults@0.3.0-next.2 - - @backstage/plugin-permission-node@0.7.30-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.3.0-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.2 - - @backstage/plugin-scaffolder-backend@1.22.8-next.2 - - @backstage/backend-tasks@0.5.24-next.2 - - @backstage/plugin-app-backend@0.3.68-next.2 - - @backstage/plugin-auth-backend@0.22.6-next.2 - - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.2 - - @backstage/plugin-auth-node@0.4.14-next.2 - - @backstage/plugin-catalog-backend@1.23.0-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.2 - - @backstage/plugin-devtools-backend@0.3.5-next.2 - - @backstage/plugin-kubernetes-backend@0.18.0-next.2 - - @backstage/plugin-notifications-backend@0.3.0-next.2 - - @backstage/plugin-permission-backend@0.5.43-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.1 - - @backstage/plugin-proxy-backend@0.5.0-next.2 - - @backstage/plugin-search-backend@1.5.10-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.2 - - @backstage/plugin-search-backend-node@1.2.24-next.2 - - @backstage/plugin-signals-backend@0.1.5-next.2 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.27-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.24-next.1 - - @backstage/backend-plugin-api@0.6.19-next.1 - - @backstage/plugin-permission-node@0.7.30-next.1 - - @backstage/plugin-search-backend@1.5.10-next.1 - - @backstage/backend-defaults@0.3.0-next.1 - - @backstage/plugin-kubernetes-backend@0.18.0-next.1 - - @backstage/plugin-catalog-backend@1.23.0-next.1 - - @backstage/plugin-scaffolder-backend@1.22.8-next.1 - - @backstage/plugin-notifications-backend@0.3.0-next.1 - - @backstage/plugin-app-backend@0.3.68-next.1 - - @backstage/plugin-auth-backend@0.22.6-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.1 - - @backstage/plugin-auth-node@0.4.14-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.1 - - @backstage/plugin-devtools-backend@0.3.5-next.1 - - @backstage/plugin-permission-backend@0.5.43-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.0 - - @backstage/plugin-proxy-backend@0.5.0-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.2.9-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.1 - - @backstage/plugin-search-backend-node@1.2.24-next.1 - - @backstage/plugin-signals-backend@0.1.5-next.1 - - @backstage/plugin-techdocs-backend@1.10.6-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.1 - -## 0.0.27-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.24-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.2.9-next.0 - - @backstage/plugin-devtools-backend@0.3.5-next.0 - - @backstage/plugin-techdocs-backend@1.10.6-next.0 - - @backstage/plugin-catalog-backend@1.23.0-next.0 - - @backstage/plugin-search-backend@1.5.10-next.0 - - @backstage/plugin-proxy-backend@0.5.0-next.0 - - @backstage/plugin-auth-backend@0.22.6-next.0 - - @backstage/plugin-app-backend@0.3.68-next.0 - - @backstage/plugin-search-backend-node@1.2.24-next.0 - - @backstage/plugin-signals-backend@0.1.5-next.0 - - @backstage/backend-defaults@0.2.19-next.0 - - @backstage/backend-plugin-api@0.6.19-next.0 - - @backstage/plugin-scaffolder-backend@1.22.8-next.0 - - @backstage/plugin-kubernetes-backend@0.17.2-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.25-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.25-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.24-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.5-next.0 - - @backstage/plugin-auth-node@0.4.14-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.37-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.6-next.0 - - @backstage/plugin-notifications-backend@0.2.2-next.0 - - @backstage/plugin-permission-backend@0.5.43-next.0 - - @backstage/plugin-permission-node@0.7.30-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.16-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.17-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.16-next.0 - - @backstage/catalog-model@1.5.0 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.26 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.22.6 - - @backstage/plugin-catalog-backend@1.22.0 - - @backstage/plugin-scaffolder-backend-module-github@0.2.8 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5 - - @backstage/plugin-search-backend-module-catalog@0.1.24 - - @backstage/plugin-notifications-backend@0.2.1 - - @backstage/catalog-model@1.5.0 - - @backstage/backend-plugin-api@0.6.18 - - @backstage/backend-tasks@0.5.23 - - @backstage/plugin-auth-backend@0.22.5 - - @backstage/plugin-app-backend@0.3.66 - - @backstage/plugin-devtools-backend@0.3.4 - - @backstage/plugin-signals-backend@0.1.4 - - @backstage/plugin-search-backend-node@1.2.22 - - @backstage/plugin-search-backend@1.5.8 - - @backstage/plugin-auth-backend-module-github-provider@0.1.15 - - @backstage/plugin-techdocs-backend@1.10.5 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.4 - - @backstage/backend-defaults@0.2.18 - - @backstage/plugin-search-backend-module-explore@0.1.24 - - @backstage/plugin-auth-node@0.4.13 - - @backstage/plugin-search-backend-module-techdocs@0.1.23 - - @backstage/plugin-catalog-backend-module-openapi@0.1.36 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16 - - @backstage/plugin-kubernetes-backend@0.17.1 - - @backstage/plugin-permission-backend@0.5.42 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15 - - @backstage/plugin-permission-node@0.7.29 - - @backstage/plugin-proxy-backend@0.4.16 - -## 0.0.26-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.1 - - @backstage/plugin-notifications-backend@0.2.1-next.1 - - @backstage/plugin-catalog-backend@1.22.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.1 - - @backstage/plugin-scaffolder-backend@1.22.5-next.1 - - @backstage/plugin-search-backend@1.5.8-next.1 - - @backstage/backend-defaults@0.2.18-next.1 - - @backstage/plugin-app-backend@0.3.66-next.1 - - @backstage/plugin-kubernetes-backend@0.17.1-next.1 - - @backstage/backend-tasks@0.5.23-next.1 - - @backstage/plugin-auth-backend@0.22.5-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.4-next.1 - - @backstage/plugin-auth-node@0.4.13-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.36-next.1 - - @backstage/plugin-devtools-backend@0.3.4-next.1 - - @backstage/plugin-permission-backend@0.5.42-next.1 - - @backstage/plugin-permission-node@0.7.29-next.1 - - @backstage/plugin-proxy-backend@0.4.16-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.2.8-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.24-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.24-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.1 - - @backstage/plugin-search-backend-node@1.2.22-next.1 - - @backstage/plugin-signals-backend@0.1.4-next.1 - - @backstage/plugin-techdocs-backend@1.10.5-next.1 - - @backstage/plugin-auth-backend-module-github-provider@0.1.15-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15-next.1 - - @backstage/backend-plugin-api@0.6.18-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1-next.1 - -## 0.0.26-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend-module-github@0.2.8-next.0 - - @backstage/plugin-catalog-backend@1.22.0-next.0 - - @backstage/plugin-scaffolder-backend@1.22.5-next.0 - - @backstage/catalog-model@1.5.0-next.0 - - @backstage/plugin-search-backend-node@1.2.22-next.0 - - @backstage/plugin-search-backend@1.5.8-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.23-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.1-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.4-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.23-next.0 - - @backstage/plugin-auth-backend@0.22.5-next.0 - - @backstage/plugin-auth-node@0.4.13-next.0 - - @backstage/plugin-notifications-backend@0.2.1-next.0 - - @backstage/backend-plugin-api@0.6.18-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.36-next.0 - - @backstage/backend-defaults@0.2.18-next.0 - - @backstage/plugin-app-backend@0.3.66-next.0 - - @backstage/plugin-kubernetes-backend@0.17.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.16-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.5-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.23-next.0 - - @backstage/plugin-techdocs-backend@1.10.5-next.0 - - @backstage/backend-tasks@0.5.23-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.15-next.0 - - @backstage/plugin-devtools-backend@0.3.4-next.0 - - @backstage/plugin-permission-backend@0.5.42-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.15-next.0 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-permission-node@0.7.29-next.0 - - @backstage/plugin-proxy-backend@0.4.16-next.0 - - @backstage/plugin-signals-backend@0.1.4-next.0 - -## 0.0.25 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-badges-backend@0.4.0 - - @backstage/plugin-kubernetes-backend@0.17.0 - - @backstage/plugin-azure-devops-backend@0.6.4 - - @backstage/plugin-techdocs-backend@1.10.4 - - @backstage/plugin-notifications-backend@0.2.0 - - @backstage/plugin-permission-node@0.7.28 - - @backstage/plugin-auth-backend@0.22.4 - - @backstage/plugin-catalog-backend@1.21.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.2.0 - - @backstage/backend-plugin-api@0.6.17 - - @backstage/plugin-search-backend@1.5.7 - - @backstage/plugin-todo-backend@0.3.16 - - @backstage/plugin-scaffolder-backend-module-github@0.2.7 - - @backstage/plugin-search-backend-module-techdocs@0.1.22 - - @backstage/plugin-search-backend-module-explore@0.1.21 - - @backstage/plugin-entity-feedback-backend@0.2.14 - - @backstage/plugin-search-backend-node@1.2.21 - - @backstage/plugin-lighthouse-backend@0.4.10 - - @backstage/plugin-permission-backend@0.5.41 - - @backstage/plugin-sonarqube-backend@0.2.19 - - @backstage/plugin-devtools-backend@0.3.3 - - @backstage/plugin-linguist-backend@0.5.15 - - @backstage/plugin-playlist-backend@0.3.21 - - @backstage/plugin-jenkins-backend@0.4.4 - - @backstage/backend-tasks@0.5.22 - - @backstage/plugin-nomad-backend@0.1.19 - - @backstage/plugin-adr-backend@0.4.14 - - @backstage/plugin-app-backend@0.3.65 - - @backstage/plugin-auth-node@0.4.12 - - @backstage/plugin-signals-backend@0.1.3 - - @backstage/plugin-proxy-backend@0.4.15 - - @backstage/plugin-scaffolder-backend@1.22.4 - - @backstage/backend-defaults@0.2.17 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.3 - - @backstage/plugin-catalog-backend-module-openapi@0.1.35 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4 - - @backstage/plugin-search-backend-module-catalog@0.1.22 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-auth-backend-module-github-provider@0.1.14 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.25-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.17.0-next.1 - - @backstage/plugin-azure-devops-backend@0.6.4-next.1 - - @backstage/plugin-techdocs-backend@1.10.4-next.1 - - @backstage/plugin-auth-backend@0.22.4-next.1 - - @backstage/backend-plugin-api@0.6.17-next.1 - - @backstage/plugin-auth-node@0.4.12-next.1 - - @backstage/plugin-proxy-backend@0.4.15-next.1 - - @backstage/plugin-scaffolder-backend@1.22.4-next.1 - - @backstage/plugin-catalog-backend@1.21.1-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.2.7-next.1 - - @backstage/plugin-app-backend@0.3.65-next.1 - - @backstage/plugin-notifications-backend@0.2.0-next.1 - - @backstage/backend-defaults@0.2.17-next.1 - - @backstage/backend-tasks@0.5.22-next.1 - - @backstage/plugin-adr-backend@0.4.14-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.3-next.1 - - @backstage/plugin-badges-backend@0.3.14-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.35-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.1 - - @backstage/plugin-devtools-backend@0.3.3-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.14-next.1 - - @backstage/plugin-jenkins-backend@0.4.4-next.1 - - @backstage/plugin-lighthouse-backend@0.4.10-next.1 - - @backstage/plugin-linguist-backend@0.5.15-next.1 - - @backstage/plugin-nomad-backend@0.1.19-next.1 - - @backstage/plugin-permission-backend@0.5.41-next.1 - - @backstage/plugin-permission-node@0.7.28-next.1 - - @backstage/plugin-playlist-backend@0.3.21-next.1 - - @backstage/plugin-search-backend@1.5.7-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.22-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.21-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.1 - - @backstage/plugin-search-backend-node@1.2.21-next.1 - - @backstage/plugin-signals-backend@0.1.3-next.1 - - @backstage/plugin-sonarqube-backend@0.2.19-next.1 - - @backstage/plugin-todo-backend@0.3.16-next.1 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-auth-backend-module-github-provider@0.1.14-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.11-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14-next.1 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.25-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.10.4-next.0 - - @backstage/plugin-catalog-backend@1.21.1-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.11-next.0 - - @backstage/plugin-kubernetes-backend@0.16.4-next.0 - - @backstage/plugin-signals-backend@0.1.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.22-next.0 - - @backstage/plugin-scaffolder-backend@1.22.4-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.35-next.0 - - @backstage/backend-defaults@0.2.17-next.0 - - @backstage/plugin-app-backend@0.3.65-next.0 - - @backstage/backend-plugin-api@0.6.17-next.0 - - @backstage/backend-tasks@0.5.22-next.0 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-adr-backend@0.4.14-next.0 - - @backstage/plugin-auth-backend@0.22.4-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.14-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.3-next.0 - - @backstage/plugin-auth-node@0.4.12-next.0 - - @backstage/plugin-azure-devops-backend@0.6.4-next.0 - - @backstage/plugin-badges-backend@0.3.14-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.15-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.4-next.0 - - @backstage/plugin-devtools-backend@0.3.3-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.14-next.0 - - @backstage/plugin-jenkins-backend@0.4.4-next.0 - - @backstage/plugin-lighthouse-backend@0.4.10-next.0 - - @backstage/plugin-linguist-backend@0.5.15-next.0 - - @backstage/plugin-nomad-backend@0.1.19-next.0 - - @backstage/plugin-notifications-backend@0.1.3-next.0 - - @backstage/plugin-permission-backend@0.5.41-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.14-next.0 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-permission-node@0.7.28-next.0 - - @backstage/plugin-playlist-backend@0.3.21-next.0 - - @backstage/plugin-proxy-backend@0.4.15-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.2.7-next.0 - - @backstage/plugin-search-backend@1.5.7-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.22-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.21-next.0 - - @backstage/plugin-search-backend-node@1.2.21-next.0 - - @backstage/plugin-sonarqube-backend@0.2.19-next.0 - - @backstage/plugin-todo-backend@0.3.16-next.0 - -## 0.0.24 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.21.0 - - @backstage/plugin-kubernetes-backend@0.16.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.3 - - @backstage/plugin-permission-backend@0.5.40 - - @backstage/plugin-proxy-backend@0.4.14 - - @backstage/plugin-scaffolder-backend@1.22.3 - - @backstage/plugin-jenkins-backend@0.4.3 - - @backstage/plugin-auth-backend@0.22.3 - - @backstage/plugin-auth-node@0.4.11 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.34 - - @backstage/plugin-azure-devops-backend@0.6.3 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.10 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.14 - - @backstage/plugin-lighthouse-backend@0.4.9 - - @backstage/plugin-linguist-backend@0.5.14 - - @backstage/plugin-search-backend-module-catalog@0.1.21 - - @backstage/plugin-search-backend-module-techdocs@0.1.21 - - @backstage/plugin-todo-backend@0.3.15 - - @backstage/backend-defaults@0.2.16 - - @backstage/plugin-app-backend@0.3.64 - - @backstage/plugin-adr-backend@0.4.13 - - @backstage/plugin-badges-backend@0.3.13 - - @backstage/plugin-entity-feedback-backend@0.2.13 - - @backstage/plugin-notifications-backend@0.1.2 - - @backstage/plugin-playlist-backend@0.3.20 - - @backstage/plugin-techdocs-backend@1.10.3 - - @backstage/plugin-auth-backend-module-github-provider@0.1.13 - - @backstage/backend-plugin-api@0.6.16 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.13 - - @backstage/plugin-permission-node@0.7.27 - - @backstage/plugin-signals-backend@0.1.2 - - @backstage/backend-tasks@0.5.21 - - @backstage/plugin-devtools-backend@0.3.2 - - @backstage/plugin-nomad-backend@0.1.18 - - @backstage/plugin-scaffolder-backend-module-github@0.2.6 - - @backstage/plugin-search-backend@1.5.6 - - @backstage/plugin-search-backend-module-explore@0.1.20 - - @backstage/plugin-search-backend-node@1.2.20 - - @backstage/plugin-sonarqube-backend@0.2.18 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.23 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.20.0 - - @backstage/plugin-kubernetes-backend@0.16.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.2 - - @backstage/plugin-permission-backend@0.5.39 - - @backstage/plugin-catalog-backend-module-openapi@0.1.33 - - @backstage/plugin-auth-backend@0.22.2 - - @backstage/plugin-azure-devops-backend@0.6.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.9 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.13 - - @backstage/plugin-jenkins-backend@0.4.2 - - @backstage/plugin-lighthouse-backend@0.4.8 - - @backstage/plugin-linguist-backend@0.5.13 - - @backstage/plugin-scaffolder-backend@1.22.2 - - @backstage/plugin-search-backend-module-catalog@0.1.20 - - @backstage/plugin-search-backend-module-techdocs@0.1.20 - - @backstage/plugin-todo-backend@0.3.14 - - @backstage/backend-defaults@0.2.15 - - @backstage/plugin-app-backend@0.3.63 - - @backstage/plugin-adr-backend@0.4.12 - - @backstage/plugin-auth-node@0.4.10 - - @backstage/plugin-badges-backend@0.3.12 - - @backstage/plugin-entity-feedback-backend@0.2.12 - - @backstage/plugin-notifications-backend@0.1.1 - - @backstage/plugin-playlist-backend@0.3.19 - - @backstage/plugin-techdocs-backend@1.10.2 - - @backstage/backend-tasks@0.5.20 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.1 - - @backstage/plugin-devtools-backend@0.3.1 - - @backstage/plugin-nomad-backend@0.1.17 - - @backstage/plugin-permission-node@0.7.26 - - @backstage/plugin-proxy-backend@0.4.13 - - @backstage/plugin-scaffolder-backend-module-github@0.2.5 - - @backstage/plugin-search-backend@1.5.5 - - @backstage/plugin-search-backend-module-explore@0.1.19 - - @backstage/plugin-search-backend-node@1.2.19 - - @backstage/plugin-signals-backend@0.1.1 - - @backstage/plugin-sonarqube-backend@0.2.17 - - @backstage/backend-plugin-api@0.6.15 - - @backstage/catalog-model@1.4.5 - - @backstage/plugin-auth-backend-module-github-provider@0.1.12 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.12 - - @backstage/plugin-permission-common@0.7.13 - -## 0.0.22 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.19.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.1 - - @backstage/plugin-permission-backend@0.5.38 - - @backstage/plugin-catalog-backend-module-openapi@0.1.32 - - @backstage/plugin-auth-backend@0.22.1 - - @backstage/plugin-azure-devops-backend@0.6.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.8 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.12 - - @backstage/plugin-jenkins-backend@0.4.1 - - @backstage/plugin-kubernetes-backend@0.16.1 - - @backstage/plugin-lighthouse-backend@0.4.7 - - @backstage/plugin-linguist-backend@0.5.12 - - @backstage/plugin-scaffolder-backend@1.22.1 - - @backstage/plugin-search-backend-module-catalog@0.1.19 - - @backstage/plugin-search-backend-module-techdocs@0.1.19 - - @backstage/plugin-todo-backend@0.3.13 - - @backstage/plugin-auth-backend-module-github-provider@0.1.11 - - @backstage/plugin-techdocs-backend@1.10.1 - -## 0.0.21 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-notifications-backend@0.1.0 - - @backstage/plugin-scaffolder-backend@1.22.0 - - @backstage/plugin-linguist-backend@0.5.11 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7 - - @backstage/plugin-catalog-backend-module-unprocessed@0.4.0 - - @backstage/plugin-catalog-backend@1.18.0 - - @backstage/plugin-devtools-backend@0.3.0 - - @backstage/plugin-jenkins-backend@0.4.0 - - @backstage/plugin-search-backend@1.5.4 - - @backstage/plugin-auth-node@0.4.9 - - @backstage/plugin-lighthouse-backend@0.4.6 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.0 - - @backstage/plugin-azure-devops-backend@0.6.0 - - @backstage/plugin-permission-backend@0.5.37 - - @backstage/plugin-signals-backend@0.1.0 - - @backstage/plugin-nomad-backend@0.1.16 - - @backstage/plugin-entity-feedback-backend@0.2.11 - - @backstage/plugin-playlist-backend@0.3.18 - - @backstage/backend-plugin-api@0.6.14 - - @backstage/plugin-auth-backend@0.22.0 - - @backstage/plugin-techdocs-backend@1.10.0 - - @backstage/plugin-scaffolder-backend-module-github@0.2.4 - - @backstage/plugin-permission-common@0.7.13 - - @backstage/plugin-search-backend-module-techdocs@0.1.18 - - @backstage/plugin-search-backend-module-catalog@0.1.18 - - @backstage/plugin-search-backend-module-explore@0.1.18 - - @backstage/backend-defaults@0.2.14 - - @backstage/plugin-kubernetes-backend@0.16.0 - - @backstage/plugin-adr-backend@0.4.11 - - @backstage/plugin-proxy-backend@0.4.12 - - @backstage/backend-tasks@0.5.19 - - @backstage/plugin-search-backend-node@1.2.18 - - @backstage/plugin-app-backend@0.3.62 - - @backstage/plugin-permission-node@0.7.25 - - @backstage/plugin-todo-backend@0.3.12 - - @backstage/plugin-badges-backend@0.3.11 - - @backstage/plugin-auth-backend-module-github-provider@0.1.11 - - @backstage/plugin-catalog-backend-module-openapi@0.1.31 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11 - - @backstage/plugin-sonarqube-backend@0.2.16 - - @backstage/catalog-model@1.4.5 - -## 0.0.21-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.22.0-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.2 - - @backstage/plugin-catalog-backend@1.18.0-next.2 - - @backstage/plugin-devtools-backend@0.3.0-next.2 - - @backstage/plugin-jenkins-backend@0.4.0-next.2 - - @backstage/plugin-search-backend@1.5.4-next.2 - - @backstage/plugin-techdocs-backend@1.10.0-next.2 - - @backstage/plugin-notifications-backend@0.1.0-next.2 - - @backstage/plugin-linguist-backend@0.5.11-next.2 - - @backstage/plugin-kubernetes-backend@0.16.0-next.2 - - @backstage/plugin-todo-backend@0.3.12-next.2 - - @backstage/plugin-signals-backend@0.1.0-next.2 - - @backstage/plugin-scaffolder-backend-module-github@0.2.4-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.31-next.2 - - @backstage/plugin-adr-backend@0.4.11-next.2 - - @backstage/plugin-azure-devops-backend@0.6.0-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.2 - - @backstage/plugin-auth-backend@0.22.0-next.2 - - @backstage/backend-defaults@0.2.14-next.2 - - @backstage/plugin-app-backend@0.3.62-next.2 - - @backstage/plugin-auth-node@0.4.9-next.2 - - @backstage/plugin-badges-backend@0.3.11-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.11-next.2 - - @backstage/plugin-lighthouse-backend@0.4.6-next.2 - - @backstage/plugin-playlist-backend@0.3.18-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.18-next.2 - - @backstage/backend-plugin-api@0.6.14-next.2 - - @backstage/backend-tasks@0.5.19-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.11-next.2 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.2 - - @backstage/plugin-nomad-backend@0.1.16-next.2 - - @backstage/plugin-permission-backend@0.5.37-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11-next.2 - - @backstage/plugin-permission-common@0.7.13-next.1 - - @backstage/plugin-permission-node@0.7.25-next.2 - - @backstage/plugin-proxy-backend@0.4.12-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.18-next.2 - - @backstage/plugin-search-backend-node@1.2.18-next.2 - - @backstage/plugin-sonarqube-backend@0.2.16-next.2 - -## 0.0.21-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-entity-feedback-backend@0.2.11-next.1 - - @backstage/plugin-notifications-backend@0.1.0-next.1 - - @backstage/plugin-scaffolder-backend@1.22.0-next.1 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.1 - - @backstage/plugin-scaffolder-backend-module-github@0.2.4-next.1 - - @backstage/plugin-app-backend@0.3.62-next.1 - - @backstage/plugin-signals-backend@0.1.0-next.1 - - @backstage/plugin-azure-devops-backend@0.6.0-next.1 - - @backstage/plugin-kubernetes-backend@0.16.0-next.1 - - @backstage/backend-plugin-api@0.6.14-next.1 - - @backstage/backend-tasks@0.5.19-next.1 - - @backstage/plugin-adr-backend@0.4.11-next.1 - - @backstage/plugin-auth-backend@0.22.0-next.1 - - @backstage/plugin-auth-node@0.4.9-next.1 - - @backstage/plugin-badges-backend@0.3.11-next.1 - - @backstage/plugin-catalog-backend@1.18.0-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.7-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.31-next.1 - - @backstage/plugin-devtools-backend@0.3.0-next.1 - - @backstage/plugin-jenkins-backend@0.4.0-next.1 - - @backstage/plugin-lighthouse-backend@0.4.6-next.1 - - @backstage/plugin-linguist-backend@0.5.11-next.1 - - @backstage/plugin-nomad-backend@0.1.16-next.1 - - @backstage/plugin-permission-backend@0.5.37-next.1 - - @backstage/plugin-permission-common@0.7.13-next.1 - - @backstage/plugin-permission-node@0.7.25-next.1 - - @backstage/plugin-playlist-backend@0.3.18-next.1 - - @backstage/plugin-proxy-backend@0.4.12-next.1 - - @backstage/plugin-search-backend@1.5.4-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.18-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.18-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.18-next.1 - - @backstage/plugin-search-backend-node@1.2.18-next.1 - - @backstage/plugin-sonarqube-backend@0.2.16-next.1 - - @backstage/plugin-techdocs-backend@1.9.7-next.1 - - @backstage/plugin-todo-backend@0.3.12-next.1 - - @backstage/backend-defaults@0.2.14-next.1 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.11-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.11-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.11-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.11-next.1 - -## 0.0.21-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-backend@0.5.10-next.0 - - @backstage/plugin-auth-node@0.4.8-next.0 - - @backstage/plugin-lighthouse-backend@0.4.5-next.0 - - @backstage/plugin-auth-backend-module-guest-provider@0.1.0-next.0 - - @backstage/plugin-playlist-backend@0.3.17-next.0 - - @backstage/backend-plugin-api@0.6.13-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.10-next.0 - - @backstage/plugin-notifications-backend@0.1.0-next.0 - - @backstage/plugin-catalog-backend@1.18.0-next.0 - - @backstage/plugin-auth-backend@0.22.0-next.0 - - @backstage/plugin-jenkins-backend@0.4.0-next.0 - - @backstage/plugin-azure-devops-backend@0.6.0-next.0 - - @backstage/plugin-scaffolder-backend-module-github@0.2.3-next.0 - - @backstage/plugin-scaffolder-backend@1.22.0-next.0 - - @backstage/plugin-permission-common@0.7.13-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.17-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.17-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.17-next.0 - - @backstage/backend-defaults@0.2.13-next.0 - - @backstage/plugin-kubernetes-backend@0.16.0-next.0 - - @backstage/plugin-adr-backend@0.4.10-next.0 - - @backstage/plugin-proxy-backend@0.4.11-next.0 - - @backstage/backend-tasks@0.5.18-next.0 - - @backstage/plugin-search-backend-node@1.2.17-next.0 - - @backstage/plugin-signals-backend@0.0.4-next.0 - - @backstage/plugin-search-backend@1.5.3-next.0 - - @backstage/plugin-devtools-backend@0.3.0-next.0 - - @backstage/plugin-permission-node@0.7.24-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.6-next.0 - - @backstage/plugin-badges-backend@0.3.10-next.0 - - @backstage/plugin-permission-backend@0.5.36-next.0 - - @backstage/plugin-app-backend@0.3.61-next.0 - - @backstage/plugin-auth-backend-module-github-provider@0.1.10-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.30-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.10-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.10-next.0 - - @backstage/plugin-sonarqube-backend@0.2.15-next.0 - - @backstage/plugin-techdocs-backend@1.9.6-next.0 - - @backstage/plugin-nomad-backend@0.1.15-next.0 - - @backstage/plugin-todo-backend@0.3.11-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.10-next.0 - - @backstage/catalog-model@1.4.5-next.0 - -## 0.0.20 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7 - - @backstage/plugin-scaffolder-backend@1.21.0 - - @backstage/plugin-badges-backend@0.3.7 - - @backstage/plugin-azure-devops-backend@0.5.2 - - @backstage/plugin-auth-node@0.4.4 - - @backstage/plugin-entity-feedback-backend@0.2.7 - - @backstage/plugin-lighthouse-backend@0.4.2 - - @backstage/plugin-devtools-backend@0.2.7 - - @backstage/plugin-linguist-backend@0.5.7 - - @backstage/plugin-adr-backend@0.4.7 - - @backstage/plugin-kubernetes-backend@0.15.0 - - @backstage/plugin-signals-backend@0.0.1 - - @backstage/plugin-notifications-backend@0.0.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.27 - - @backstage/plugin-search-backend-module-techdocs@0.1.14 - - @backstage/plugin-search-backend-module-catalog@0.1.14 - - @backstage/plugin-search-backend-module-explore@0.1.14 - - @backstage/backend-plugin-api@0.6.10 - - @backstage/backend-defaults@0.2.10 - - @backstage/plugin-sonarqube-backend@0.2.12 - - @backstage/plugin-playlist-backend@0.3.14 - - @backstage/plugin-catalog-backend@1.17.0 - - @backstage/plugin-jenkins-backend@0.3.4 - - @backstage/backend-tasks@0.5.15 - - @backstage/plugin-nomad-backend@0.1.12 - - @backstage/plugin-app-backend@0.3.58 - - @backstage/plugin-search-backend@1.5.0 - - @backstage/plugin-todo-backend@0.3.8 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3 - - @backstage/plugin-techdocs-backend@1.9.3 - - @backstage/plugin-permission-backend@0.5.33 - - @backstage/plugin-permission-node@0.7.21 - - @backstage/plugin-proxy-backend@0.4.8 - - @backstage/plugin-search-backend-node@1.2.14 - - @backstage/plugin-permission-common@0.7.12 - -## 0.0.20-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-badges-backend@0.3.7-next.3 - - @backstage/plugin-kubernetes-backend@0.15.0-next.3 - - @backstage/backend-tasks@0.5.15-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.3 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.3 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.3 - - @backstage/plugin-notifications-backend@0.0.1-next.1 - - @backstage/plugin-signals-backend@0.0.1-next.3 - - @backstage/plugin-catalog-backend@1.17.0-next.3 - - @backstage/plugin-app-backend@0.3.58-next.3 - - @backstage/backend-defaults@0.2.10-next.3 - - @backstage/plugin-adr-backend@0.4.7-next.3 - - @backstage/plugin-auth-node@0.4.4-next.3 - - @backstage/plugin-azure-devops-backend@0.5.2-next.3 - - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.3 - - @backstage/plugin-devtools-backend@0.2.7-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.3 - - @backstage/plugin-jenkins-backend@0.3.4-next.3 - - @backstage/plugin-lighthouse-backend@0.4.2-next.3 - - @backstage/plugin-linguist-backend@0.5.7-next.3 - - @backstage/plugin-nomad-backend@0.1.12-next.3 - - @backstage/plugin-permission-backend@0.5.33-next.3 - - @backstage/plugin-permission-node@0.7.21-next.3 - - @backstage/plugin-playlist-backend@0.3.14-next.3 - - @backstage/plugin-proxy-backend@0.4.8-next.3 - - @backstage/plugin-scaffolder-backend@1.21.0-next.3 - - @backstage/plugin-search-backend@1.5.0-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.3 - - @backstage/plugin-search-backend-node@1.2.14-next.3 - - @backstage/plugin-sonarqube-backend@0.2.12-next.3 - - @backstage/plugin-techdocs-backend@1.9.3-next.3 - - @backstage/plugin-todo-backend@0.3.8-next.3 - - @backstage/backend-plugin-api@0.6.10-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.3 - - @backstage/plugin-permission-common@0.7.12 - -## 0.0.20-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.21.0-next.2 - - @backstage/plugin-signals-backend@0.0.1-next.2 - - @backstage/plugin-kubernetes-backend@0.15.0-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.2 - - @backstage/plugin-azure-devops-backend@0.5.2-next.2 - - @backstage/backend-plugin-api@0.6.10-next.2 - - @backstage/plugin-lighthouse-backend@0.4.2-next.2 - - @backstage/backend-defaults@0.2.10-next.2 - - @backstage/plugin-sonarqube-backend@0.2.12-next.2 - - @backstage/plugin-devtools-backend@0.2.7-next.2 - - @backstage/plugin-linguist-backend@0.5.7-next.2 - - @backstage/plugin-playlist-backend@0.3.14-next.2 - - @backstage/plugin-catalog-backend@1.17.0-next.2 - - @backstage/plugin-jenkins-backend@0.3.4-next.2 - - @backstage/backend-tasks@0.5.15-next.2 - - @backstage/plugin-badges-backend@0.3.7-next.2 - - @backstage/plugin-nomad-backend@0.1.12-next.2 - - @backstage/plugin-adr-backend@0.4.7-next.2 - - @backstage/plugin-app-backend@0.3.58-next.2 - - @backstage/plugin-auth-node@0.4.4-next.2 - - @backstage/plugin-notifications-backend@0.0.1-next.0 - - @backstage/plugin-todo-backend@0.3.8-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.2 - - @backstage/plugin-permission-backend@0.5.33-next.2 - - @backstage/plugin-permission-node@0.7.21-next.2 - - @backstage/plugin-proxy-backend@0.4.8-next.2 - - @backstage/plugin-search-backend@1.5.0-next.2 - - @backstage/plugin-search-backend-node@1.2.14-next.2 - - @backstage/plugin-techdocs-backend@1.9.3-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.2 - - @backstage/plugin-permission-common@0.7.12 - -## 0.0.20-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.21.0-next.1 - - @backstage/plugin-azure-devops-backend@0.5.2-next.1 - - @backstage/plugin-catalog-backend@1.17.0-next.1 - - @backstage/backend-plugin-api@0.6.10-next.1 - - @backstage/backend-defaults@0.2.10-next.1 - - @backstage/backend-tasks@0.5.15-next.1 - - @backstage/plugin-adr-backend@0.4.7-next.1 - - @backstage/plugin-app-backend@0.3.58-next.1 - - @backstage/plugin-auth-node@0.4.4-next.1 - - @backstage/plugin-badges-backend@0.3.7-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.1 - - @backstage/plugin-devtools-backend@0.2.7-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.1 - - @backstage/plugin-jenkins-backend@0.3.4-next.1 - - @backstage/plugin-kubernetes-backend@0.14.2-next.1 - - @backstage/plugin-lighthouse-backend@0.4.2-next.1 - - @backstage/plugin-linguist-backend@0.5.7-next.1 - - @backstage/plugin-nomad-backend@0.1.12-next.1 - - @backstage/plugin-permission-backend@0.5.33-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.1 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-permission-node@0.7.21-next.1 - - @backstage/plugin-playlist-backend@0.3.14-next.1 - - @backstage/plugin-proxy-backend@0.4.8-next.1 - - @backstage/plugin-search-backend@1.5.0-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.1 - - @backstage/plugin-search-backend-node@1.2.14-next.1 - - @backstage/plugin-sonarqube-backend@0.2.12-next.1 - - @backstage/plugin-techdocs-backend@1.9.3-next.1 - - @backstage/plugin-todo-backend@0.3.8-next.1 - -## 0.0.20-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-azure-devops-backend@0.5.2-next.0 - - @backstage/plugin-kubernetes-backend@0.14.2-next.0 - - @backstage/plugin-catalog-backend@1.17.0-next.0 - - @backstage/plugin-search-backend@1.5.0-next.0 - - @backstage/plugin-todo-backend@0.3.8-next.0 - - @backstage/plugin-scaffolder-backend@1.21.0-next.0 - - @backstage/plugin-app-backend@0.3.58-next.0 - - @backstage/backend-defaults@0.2.10-next.0 - - @backstage/backend-tasks@0.5.15-next.0 - - @backstage/plugin-auth-node@0.4.4-next.0 - - @backstage/plugin-badges-backend@0.3.7-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.27-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.7-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.7-next.0 - - @backstage/plugin-linguist-backend@0.5.7-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.7-next.0 - - @backstage/plugin-permission-node@0.7.21-next.0 - - @backstage/plugin-playlist-backend@0.3.14-next.0 - - @backstage/plugin-proxy-backend@0.4.8-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.14-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.14-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.14-next.0 - - @backstage/plugin-sonarqube-backend@0.2.12-next.0 - - @backstage/plugin-techdocs-backend@1.9.3-next.0 - - @backstage/plugin-adr-backend@0.4.7-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.3-next.0 - - @backstage/plugin-devtools-backend@0.2.7-next.0 - - @backstage/plugin-jenkins-backend@0.3.4-next.0 - - @backstage/plugin-lighthouse-backend@0.4.2-next.0 - - @backstage/plugin-nomad-backend@0.1.12-next.0 - - @backstage/plugin-permission-backend@0.5.33-next.0 - - @backstage/plugin-search-backend-node@1.2.14-next.0 - - @backstage/backend-plugin-api@0.6.10-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.7-next.0 - - @backstage/plugin-permission-common@0.7.12 - -## 0.0.19 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-sonarqube-backend@0.2.11 - - @backstage/plugin-scaffolder-backend@1.20.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.26 - - @backstage/plugin-search-backend-module-techdocs@0.1.13 - - @backstage/plugin-search-backend-module-catalog@0.1.13 - - @backstage/plugin-search-backend-module-explore@0.1.13 - - @backstage/backend-plugin-api@0.6.9 - - @backstage/backend-defaults@0.2.9 - - @backstage/plugin-azure-devops-backend@0.5.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2 - - @backstage/plugin-entity-feedback-backend@0.2.6 - - @backstage/plugin-devtools-backend@0.2.6 - - @backstage/plugin-linguist-backend@0.5.6 - - @backstage/plugin-playlist-backend@0.3.13 - - @backstage/plugin-techdocs-backend@1.9.2 - - @backstage/plugin-jenkins-backend@0.3.3 - - @backstage/plugin-badges-backend@0.3.6 - - @backstage/plugin-search-backend@1.4.9 - - @backstage/plugin-nomad-backend@0.1.11 - - @backstage/plugin-todo-backend@0.3.7 - - @backstage/plugin-adr-backend@0.4.6 - - @backstage/plugin-app-backend@0.3.57 - - @backstage/plugin-permission-backend@0.5.32 - - @backstage/plugin-permission-common@0.7.12 - - @backstage/plugin-permission-node@0.7.20 - - @backstage/plugin-catalog-backend@1.16.1 - - @backstage/backend-tasks@0.5.14 - - @backstage/plugin-auth-node@0.4.3 - - @backstage/plugin-kubernetes-backend@0.14.1 - - @backstage/plugin-lighthouse-backend@0.4.1 - - @backstage/plugin-proxy-backend@0.4.7 - - @backstage/plugin-search-backend-node@1.2.13 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6 - -## 0.0.19-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-sonarqube-backend@0.2.11-next.2 - - @backstage/backend-plugin-api@0.6.9-next.2 - - @backstage/backend-defaults@0.2.9-next.2 - - @backstage/plugin-adr-backend@0.4.6-next.2 - - @backstage/plugin-app-backend@0.3.57-next.2 - - @backstage/plugin-auth-node@0.4.3-next.2 - - @backstage/plugin-azure-devops-backend@0.5.1-next.2 - - @backstage/plugin-badges-backend@0.3.6-next.2 - - @backstage/plugin-catalog-backend@1.16.1-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.2 - - @backstage/plugin-devtools-backend@0.2.6-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.2 - - @backstage/plugin-jenkins-backend@0.3.3-next.2 - - @backstage/plugin-kubernetes-backend@0.14.1-next.2 - - @backstage/plugin-lighthouse-backend@0.4.1-next.2 - - @backstage/plugin-linguist-backend@0.5.6-next.2 - - @backstage/plugin-nomad-backend@0.1.11-next.2 - - @backstage/plugin-permission-backend@0.5.32-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.2 - - @backstage/plugin-permission-node@0.7.20-next.2 - - @backstage/plugin-playlist-backend@0.3.13-next.2 - - @backstage/plugin-proxy-backend@0.4.7-next.2 - - @backstage/plugin-scaffolder-backend@1.19.3-next.2 - - @backstage/plugin-search-backend@1.4.9-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.2 - - @backstage/plugin-search-backend-node@1.2.13-next.2 - - @backstage/plugin-techdocs-backend@1.9.2-next.2 - - @backstage/plugin-todo-backend@0.3.7-next.2 - - @backstage/backend-tasks@0.5.14-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.2 - -## 0.0.19-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-app-backend@0.3.57-next.1 - - @backstage/plugin-devtools-backend@0.2.6-next.1 - - @backstage/plugin-proxy-backend@0.4.7-next.1 - - @backstage/backend-defaults@0.2.9-next.1 - - @backstage/plugin-kubernetes-backend@0.14.1-next.1 - - @backstage/backend-tasks@0.5.14-next.1 - - @backstage/plugin-adr-backend@0.4.6-next.1 - - @backstage/plugin-auth-node@0.4.3-next.1 - - @backstage/plugin-azure-devops-backend@0.5.1-next.1 - - @backstage/plugin-badges-backend@0.3.6-next.1 - - @backstage/plugin-catalog-backend@1.16.1-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.1 - - @backstage/plugin-jenkins-backend@0.3.3-next.1 - - @backstage/plugin-lighthouse-backend@0.4.1-next.1 - - @backstage/plugin-linguist-backend@0.5.6-next.1 - - @backstage/plugin-nomad-backend@0.1.11-next.1 - - @backstage/plugin-permission-backend@0.5.32-next.1 - - @backstage/plugin-permission-node@0.7.20-next.1 - - @backstage/plugin-playlist-backend@0.3.13-next.1 - - @backstage/plugin-scaffolder-backend@1.19.3-next.1 - - @backstage/plugin-search-backend@1.4.9-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.1 - - @backstage/plugin-search-backend-node@1.2.13-next.1 - - @backstage/plugin-sonarqube-backend@0.2.11-next.1 - - @backstage/plugin-techdocs-backend@1.9.2-next.1 - - @backstage/plugin-todo-backend@0.3.7-next.1 - - @backstage/backend-plugin-api@0.6.9-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.1 - - @backstage/plugin-permission-common@0.7.11 - -## 0.0.19-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.19.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.13-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.13-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.13-next.0 - - @backstage/plugin-azure-devops-backend@0.5.1-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.6-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.6-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.2-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.6-next.0 - - @backstage/plugin-devtools-backend@0.2.6-next.0 - - @backstage/plugin-linguist-backend@0.5.6-next.0 - - @backstage/plugin-playlist-backend@0.3.13-next.0 - - @backstage/plugin-techdocs-backend@1.9.2-next.0 - - @backstage/plugin-jenkins-backend@0.3.3-next.0 - - @backstage/plugin-badges-backend@0.3.6-next.0 - - @backstage/plugin-search-backend@1.4.9-next.0 - - @backstage/plugin-nomad-backend@0.1.11-next.0 - - @backstage/plugin-todo-backend@0.3.7-next.0 - - @backstage/plugin-adr-backend@0.4.6-next.0 - - @backstage/plugin-app-backend@0.3.57-next.0 - - @backstage/backend-defaults@0.2.9-next.0 - - @backstage/backend-plugin-api@0.6.9-next.0 - - @backstage/backend-tasks@0.5.14-next.0 - - @backstage/plugin-auth-node@0.4.3-next.0 - - @backstage/plugin-catalog-backend@1.16.1-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.26-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.6-next.0 - - @backstage/plugin-kubernetes-backend@0.14.1-next.0 - - @backstage/plugin-lighthouse-backend@0.4.1-next.0 - - @backstage/plugin-permission-backend@0.5.32-next.0 - - @backstage/plugin-permission-common@0.7.11 - - @backstage/plugin-permission-node@0.7.20-next.0 - - @backstage/plugin-proxy-backend@0.4.7-next.0 - - @backstage/plugin-search-backend-node@1.2.13-next.0 - - @backstage/plugin-sonarqube-backend@0.2.11-next.0 - -## 0.0.18 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1 - - @backstage/plugin-techdocs-backend@1.9.1 - - @backstage/plugin-catalog-backend@1.16.0 - - @backstage/plugin-azure-devops-backend@0.5.0 - - @backstage/plugin-scaffolder-backend@1.19.2 - - @backstage/backend-tasks@0.5.13 - - @backstage/plugin-lighthouse-backend@0.4.0 - - @backstage/plugin-kubernetes-backend@0.14.0 - - @backstage/plugin-auth-node@0.4.2 - - @backstage/plugin-permission-backend@0.5.31 - - @backstage/plugin-permission-common@0.7.11 - - @backstage/plugin-playlist-backend@0.3.12 - - @backstage/plugin-permission-node@0.7.19 - - @backstage/plugin-search-backend@1.4.8 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5 - - @backstage/plugin-search-backend-module-techdocs@0.1.12 - - @backstage/plugin-search-backend-module-catalog@0.1.12 - - @backstage/plugin-search-backend-module-explore@0.1.12 - - @backstage/backend-defaults@0.2.8 - - @backstage/plugin-adr-backend@0.4.5 - - @backstage/plugin-app-backend@0.3.56 - - @backstage/plugin-badges-backend@0.3.5 - - @backstage/plugin-catalog-backend-module-openapi@0.1.25 - - @backstage/plugin-devtools-backend@0.2.5 - - @backstage/plugin-entity-feedback-backend@0.2.5 - - @backstage/plugin-jenkins-backend@0.3.2 - - @backstage/plugin-linguist-backend@0.5.5 - - @backstage/plugin-nomad-backend@0.1.10 - - @backstage/plugin-proxy-backend@0.4.6 - - @backstage/plugin-search-backend-node@1.2.12 - - @backstage/plugin-sonarqube-backend@0.2.10 - - @backstage/plugin-todo-backend@0.3.6 - - @backstage/backend-plugin-api@0.6.8 - -## 0.0.18-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-azure-devops-backend@0.5.0-next.3 - - @backstage/plugin-scaffolder-backend@1.19.2-next.3 - - @backstage/backend-defaults@0.2.8-next.3 - - @backstage/backend-plugin-api@0.6.8-next.3 - - @backstage/backend-tasks@0.5.13-next.3 - - @backstage/plugin-adr-backend@0.4.5-next.3 - - @backstage/plugin-app-backend@0.3.56-next.3 - - @backstage/plugin-auth-node@0.4.2-next.3 - - @backstage/plugin-badges-backend@0.3.5-next.3 - - @backstage/plugin-catalog-backend@1.16.0-next.3 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.3 - - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.3 - - @backstage/plugin-devtools-backend@0.2.5-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.3 - - @backstage/plugin-jenkins-backend@0.3.2-next.3 - - @backstage/plugin-kubernetes-backend@0.14.0-next.3 - - @backstage/plugin-lighthouse-backend@0.4.0-next.3 - - @backstage/plugin-linguist-backend@0.5.5-next.3 - - @backstage/plugin-nomad-backend@0.1.10-next.3 - - @backstage/plugin-permission-backend@0.5.31-next.3 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.3 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.3 - - @backstage/plugin-playlist-backend@0.3.12-next.3 - - @backstage/plugin-proxy-backend@0.4.6-next.3 - - @backstage/plugin-search-backend@1.4.8-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.3 - - @backstage/plugin-search-backend-node@1.2.12-next.3 - - @backstage/plugin-sonarqube-backend@0.2.10-next.3 - - @backstage/plugin-techdocs-backend@1.9.1-next.3 - - @backstage/plugin-todo-backend@0.3.6-next.3 - -## 0.0.18-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.16.0-next.2 - - @backstage/plugin-lighthouse-backend@0.4.0-next.2 - - @backstage/plugin-auth-node@0.4.2-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.2 - - @backstage/backend-defaults@0.2.8-next.2 - - @backstage/backend-plugin-api@0.6.8-next.2 - - @backstage/backend-tasks@0.5.13-next.2 - - @backstage/plugin-adr-backend@0.4.5-next.2 - - @backstage/plugin-app-backend@0.3.56-next.2 - - @backstage/plugin-azure-devops-backend@0.5.0-next.2 - - @backstage/plugin-badges-backend@0.3.5-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.2 - - @backstage/plugin-devtools-backend@0.2.5-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.2 - - @backstage/plugin-jenkins-backend@0.3.2-next.2 - - @backstage/plugin-kubernetes-backend@0.14.0-next.2 - - @backstage/plugin-linguist-backend@0.5.5-next.2 - - @backstage/plugin-nomad-backend@0.1.10-next.2 - - @backstage/plugin-permission-backend@0.5.31-next.2 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.2 - - @backstage/plugin-playlist-backend@0.3.12-next.2 - - @backstage/plugin-proxy-backend@0.4.6-next.2 - - @backstage/plugin-scaffolder-backend@1.19.2-next.2 - - @backstage/plugin-search-backend@1.4.8-next.2 - - @backstage/plugin-search-backend-node@1.2.12-next.2 - - @backstage/plugin-sonarqube-backend@0.2.10-next.2 - - @backstage/plugin-techdocs-backend@1.9.1-next.2 - - @backstage/plugin-todo-backend@0.3.6-next.2 - -## 0.0.18-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.1 - - @backstage/plugin-catalog-backend@1.15.1-next.1 - - @backstage/plugin-azure-devops-backend@0.5.0-next.1 - - @backstage/plugin-kubernetes-backend@0.14.0-next.1 - - @backstage/backend-defaults@0.2.8-next.1 - - @backstage/backend-plugin-api@0.6.8-next.1 - - @backstage/backend-tasks@0.5.13-next.1 - - @backstage/plugin-adr-backend@0.4.5-next.1 - - @backstage/plugin-app-backend@0.3.56-next.1 - - @backstage/plugin-auth-node@0.4.2-next.1 - - @backstage/plugin-badges-backend@0.3.5-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.1 - - @backstage/plugin-devtools-backend@0.2.5-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.1 - - @backstage/plugin-jenkins-backend@0.3.2-next.1 - - @backstage/plugin-lighthouse-backend@0.3.5-next.1 - - @backstage/plugin-linguist-backend@0.5.5-next.1 - - @backstage/plugin-nomad-backend@0.1.10-next.1 - - @backstage/plugin-permission-backend@0.5.31-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.1 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-permission-node@0.7.19-next.1 - - @backstage/plugin-playlist-backend@0.3.12-next.1 - - @backstage/plugin-proxy-backend@0.4.6-next.1 - - @backstage/plugin-scaffolder-backend@1.19.2-next.1 - - @backstage/plugin-search-backend@1.4.8-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.1 - - @backstage/plugin-search-backend-node@1.2.12-next.1 - - @backstage/plugin-sonarqube-backend@0.2.10-next.1 - - @backstage/plugin-techdocs-backend@1.9.1-next.1 - - @backstage/plugin-todo-backend@0.3.6-next.1 - -## 0.0.18-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.13-next.0 - - @backstage/plugin-scaffolder-backend@1.19.2-next.0 - - @backstage/plugin-kubernetes-backend@0.14.0-next.0 - - @backstage/backend-defaults@0.2.8-next.0 - - @backstage/plugin-adr-backend@0.4.5-next.0 - - @backstage/plugin-app-backend@0.3.56-next.0 - - @backstage/plugin-auth-node@0.4.2-next.0 - - @backstage/plugin-azure-devops-backend@0.4.5-next.0 - - @backstage/plugin-badges-backend@0.3.5-next.0 - - @backstage/plugin-catalog-backend@1.15.1-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 - - @backstage/plugin-devtools-backend@0.2.5-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 - - @backstage/plugin-jenkins-backend@0.3.2-next.0 - - @backstage/plugin-lighthouse-backend@0.3.5-next.0 - - @backstage/plugin-linguist-backend@0.5.5-next.0 - - @backstage/plugin-nomad-backend@0.1.10-next.0 - - @backstage/plugin-permission-backend@0.5.31-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.0 - - @backstage/plugin-permission-node@0.7.19-next.0 - - @backstage/plugin-playlist-backend@0.3.12-next.0 - - @backstage/plugin-proxy-backend@0.4.6-next.0 - - @backstage/plugin-search-backend@1.4.8-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 - - @backstage/plugin-search-backend-node@1.2.12-next.0 - - @backstage/plugin-sonarqube-backend@0.2.10-next.0 - - @backstage/plugin-techdocs-backend@1.9.1-next.0 - - @backstage/plugin-todo-backend@0.3.6-next.0 - - @backstage/backend-plugin-api@0.6.8-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 - - @backstage/plugin-permission-common@0.7.10 - -## 0.0.17 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.15.0 - - @backstage/plugin-kubernetes-backend@0.13.1 - - @backstage/plugin-search-backend-node@1.2.11 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0 - - @backstage/plugin-techdocs-backend@1.9.0 - - @backstage/plugin-scaffolder-backend@1.19.0 - - @backstage/plugin-search-backend@1.4.7 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 - - @backstage/plugin-entity-feedback-backend@0.2.4 - - @backstage/backend-plugin-api@0.6.7 - - @backstage/plugin-linguist-backend@0.5.4 - - @backstage/plugin-playlist-backend@0.3.11 - - @backstage/backend-tasks@0.5.12 - - @backstage/plugin-badges-backend@0.3.4 - - @backstage/plugin-app-backend@0.3.55 - - @backstage/plugin-search-backend-module-techdocs@0.1.11 - - @backstage/plugin-permission-common@0.7.10 - - @backstage/plugin-jenkins-backend@0.3.1 - - @backstage/plugin-adr-backend@0.4.4 - - @backstage/plugin-proxy-backend@0.4.5 - - @backstage/plugin-catalog-backend-module-openapi@0.1.24 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 - - @backstage/plugin-lighthouse-backend@0.3.4 - - @backstage/plugin-search-backend-module-catalog@0.1.11 - - @backstage/plugin-todo-backend@0.3.5 - - @backstage/plugin-devtools-backend@0.2.4 - - @backstage/backend-defaults@0.2.7 - - @backstage/plugin-auth-node@0.4.1 - - @backstage/plugin-azure-devops-backend@0.4.4 - - @backstage/plugin-nomad-backend@0.1.9 - - @backstage/plugin-permission-backend@0.5.30 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4 - - @backstage/plugin-permission-node@0.7.18 - - @backstage/plugin-search-backend-module-explore@0.1.11 - - @backstage/plugin-sonarqube-backend@0.2.9 - -## 0.0.17-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.13.1-next.2 - - @backstage/plugin-scaffolder-backend@1.19.0-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.2 - - @backstage/backend-plugin-api@0.6.7-next.2 - - @backstage/plugin-linguist-backend@0.5.4-next.2 - - @backstage/plugin-playlist-backend@0.3.11-next.2 - - @backstage/plugin-techdocs-backend@1.9.0-next.2 - - @backstage/plugin-catalog-backend@1.15.0-next.2 - - @backstage/backend-tasks@0.5.12-next.2 - - @backstage/plugin-badges-backend@0.3.4-next.2 - - @backstage/plugin-app-backend@0.3.55-next.2 - - @backstage/backend-defaults@0.2.7-next.2 - - @backstage/plugin-adr-backend@0.4.4-next.2 - - @backstage/plugin-auth-node@0.4.1-next.2 - - @backstage/plugin-azure-devops-backend@0.4.4-next.2 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.2 - - @backstage/plugin-devtools-backend@0.2.4-next.2 - - @backstage/plugin-jenkins-backend@0.3.1-next.2 - - @backstage/plugin-lighthouse-backend@0.3.4-next.2 - - @backstage/plugin-nomad-backend@0.1.9-next.2 - - @backstage/plugin-permission-backend@0.5.30-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.2 - - @backstage/plugin-permission-node@0.7.18-next.2 - - @backstage/plugin-proxy-backend@0.4.5-next.2 - - @backstage/plugin-search-backend@1.4.7-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.2 - - @backstage/plugin-search-backend-node@1.2.11-next.2 - - @backstage/plugin-sonarqube-backend@0.2.9-next.2 - - @backstage/plugin-todo-backend@0.3.5-next.2 - - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.2 - -## 0.0.17-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.15.0-next.1 - - @backstage/plugin-techdocs-backend@1.9.0-next.1 - - @backstage/plugin-scaffolder-backend@1.19.0-next.1 - - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.1 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.1 - - @backstage/plugin-jenkins-backend@0.3.1-next.1 - - @backstage/plugin-kubernetes-backend@0.13.1-next.1 - - @backstage/plugin-lighthouse-backend@0.3.4-next.1 - - @backstage/plugin-linguist-backend@0.5.4-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.1 - - @backstage/plugin-todo-backend@0.3.5-next.1 - - @backstage/plugin-adr-backend@0.4.4-next.1 - - @backstage/backend-defaults@0.2.7-next.1 - - @backstage/backend-tasks@0.5.12-next.1 - - @backstage/plugin-app-backend@0.3.55-next.1 - - @backstage/plugin-auth-node@0.4.1-next.1 - - @backstage/plugin-badges-backend@0.3.4-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.1 - - @backstage/plugin-permission-node@0.7.18-next.1 - - @backstage/plugin-playlist-backend@0.3.11-next.1 - - @backstage/plugin-proxy-backend@0.4.5-next.1 - - @backstage/plugin-search-backend@1.4.7-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.1 - - @backstage/plugin-sonarqube-backend@0.2.9-next.1 - - @backstage/plugin-azure-devops-backend@0.4.4-next.1 - - @backstage/plugin-devtools-backend@0.2.4-next.1 - - @backstage/plugin-nomad-backend@0.1.9-next.1 - - @backstage/plugin-permission-backend@0.5.30-next.1 - - @backstage/plugin-search-backend-node@1.2.11-next.1 - - @backstage/backend-plugin-api@0.6.7-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.1 - - @backstage/plugin-permission-common@0.7.9 - -## 0.0.17-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-node@1.2.11-next.0 - - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0-next.0 - - @backstage/plugin-techdocs-backend@1.8.1-next.0 - - @backstage/plugin-scaffolder-backend@1.19.0-next.0 - - @backstage/plugin-catalog-backend@1.15.0-next.0 - - @backstage/plugin-search-backend@1.4.7-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.11-next.0 - - @backstage/plugin-proxy-backend@0.4.5-next.0 - - @backstage/plugin-app-backend@0.3.55-next.0 - - @backstage/plugin-devtools-backend@0.2.4-next.0 - - @backstage/backend-defaults@0.2.7-next.0 - - @backstage/backend-plugin-api@0.6.7-next.0 - - @backstage/backend-tasks@0.5.12-next.0 - - @backstage/plugin-adr-backend@0.4.4-next.0 - - @backstage/plugin-auth-node@0.4.1-next.0 - - @backstage/plugin-azure-devops-backend@0.4.4-next.0 - - @backstage/plugin-badges-backend@0.3.4-next.0 - - @backstage/plugin-catalog-backend-module-openapi@0.1.24-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.4-next.0 - - @backstage/plugin-jenkins-backend@0.3.1-next.0 - - @backstage/plugin-kubernetes-backend@0.13.1-next.0 - - @backstage/plugin-lighthouse-backend@0.3.4-next.0 - - @backstage/plugin-linguist-backend@0.5.4-next.0 - - @backstage/plugin-nomad-backend@0.1.9-next.0 - - @backstage/plugin-permission-backend@0.5.30-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4-next.0 - - @backstage/plugin-permission-common@0.7.9 - - @backstage/plugin-permission-node@0.7.18-next.0 - - @backstage/plugin-playlist-backend@0.3.11-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.11-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.11-next.0 - - @backstage/plugin-sonarqube-backend@0.2.9-next.0 - - @backstage/plugin-todo-backend@0.3.5-next.0 - -## 0.0.16 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-nomad-backend@0.1.8 - - @backstage/backend-tasks@0.5.11 - - @backstage/plugin-sonarqube-backend@0.2.8 - - @backstage/plugin-scaffolder-backend@1.18.0 - - @backstage/plugin-playlist-backend@0.3.10 - - @backstage/plugin-techdocs-backend@1.8.0 - - @backstage/plugin-catalog-backend@1.14.0 - - @backstage/plugin-auth-node@0.4.0 - - @backstage/plugin-badges-backend@0.3.3 - - @backstage/plugin-kubernetes-backend@0.13.0 - - @backstage/plugin-jenkins-backend@0.3.0 - - @backstage/plugin-search-backend@1.4.6 - - @backstage/backend-plugin-api@0.6.6 - - @backstage/plugin-lighthouse-backend@0.3.3 - - @backstage/plugin-linguist-backend@0.5.3 - - @backstage/plugin-search-backend-module-catalog@0.1.10 - - @backstage/plugin-search-backend-module-explore@0.1.10 - - @backstage/plugin-search-backend-module-techdocs@0.1.10 - - @backstage/plugin-search-backend-node@1.2.10 - - @backstage/backend-defaults@0.2.6 - - @backstage/plugin-adr-backend@0.4.3 - - @backstage/plugin-app-backend@0.3.54 - - @backstage/plugin-azure-devops-backend@0.4.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3 - - @backstage/plugin-devtools-backend@0.2.3 - - @backstage/plugin-entity-feedback-backend@0.2.3 - - @backstage/plugin-permission-backend@0.5.29 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3 - - @backstage/plugin-permission-node@0.7.17 - - @backstage/plugin-proxy-backend@0.4.3 - - @backstage/plugin-todo-backend@0.3.4 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3 - - @backstage/plugin-permission-common@0.7.9 - -## 0.0.16-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-nomad-backend@0.1.8-next.2 - - @backstage/plugin-scaffolder-backend@1.18.0-next.2 - - @backstage/plugin-techdocs-backend@1.8.0-next.2 - - @backstage/plugin-auth-node@0.4.0-next.2 - - @backstage/plugin-catalog-backend@1.14.0-next.2 - - @backstage/plugin-kubernetes-backend@0.12.3-next.2 - - @backstage/plugin-jenkins-backend@0.2.9-next.2 - - @backstage/backend-defaults@0.2.6-next.2 - - @backstage/backend-tasks@0.5.11-next.2 - - @backstage/plugin-adr-backend@0.4.3-next.2 - - @backstage/plugin-app-backend@0.3.54-next.2 - - @backstage/plugin-azure-devops-backend@0.4.3-next.2 - - @backstage/plugin-badges-backend@0.3.3-next.2 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.3-next.2 - - @backstage/plugin-devtools-backend@0.2.3-next.2 - - @backstage/plugin-entity-feedback-backend@0.2.3-next.2 - - @backstage/plugin-lighthouse-backend@0.3.3-next.2 - - @backstage/plugin-linguist-backend@0.5.3-next.2 - - @backstage/plugin-permission-backend@0.5.29-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.3-next.2 - - @backstage/plugin-permission-node@0.7.17-next.2 - - @backstage/plugin-playlist-backend@0.3.10-next.2 - - @backstage/plugin-proxy-backend@0.4.3-next.2 - - @backstage/plugin-search-backend@1.4.6-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.10-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.10-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.10-next.2 - - @backstage/plugin-search-backend-node@1.2.10-next.2 - - @backstage/plugin-sonarqube-backend@0.2.8-next.2 - - @backstage/plugin-todo-backend@0.3.4-next.2 - - @backstage/backend-plugin-api@0.6.6-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.3-next.2 - - @backstage/plugin-permission-common@0.7.9-next.0 - -## 0.0.16-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.10-next.1 - - @backstage/plugin-catalog-backend@1.14.0-next.1 - - @backstage/plugin-scaffolder-backend@1.18.0-next.1 - - @backstage/plugin-badges-backend@0.3.2-next.1 - - @backstage/backend-plugin-api@0.6.5-next.1 - - @backstage/plugin-lighthouse-backend@0.3.2-next.1 - - @backstage/plugin-linguist-backend@0.5.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.9-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.9-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.1 - - @backstage/plugin-search-backend-node@1.2.9-next.1 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.1 - - @backstage/plugin-kubernetes-backend@0.12.2-next.1 - - @backstage/plugin-todo-backend@0.3.3-next.1 - - @backstage/backend-defaults@0.2.5-next.1 - - @backstage/plugin-adr-backend@0.4.2-next.1 - - @backstage/plugin-app-backend@0.3.53-next.1 - - @backstage/plugin-auth-node@0.3.2-next.1 - - @backstage/plugin-azure-devops-backend@0.4.2-next.1 - - @backstage/plugin-devtools-backend@0.2.2-next.1 - - @backstage/plugin-entity-feedback-backend@0.2.2-next.1 - - @backstage/plugin-permission-backend@0.5.28-next.1 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.1 - - @backstage/plugin-permission-node@0.7.16-next.1 - - @backstage/plugin-playlist-backend@0.3.9-next.1 - - @backstage/plugin-proxy-backend@0.4.2-next.1 - - @backstage/plugin-search-backend@1.4.5-next.1 - - @backstage/plugin-sonarqube-backend@0.2.7-next.1 - - @backstage/plugin-techdocs-backend@1.7.2-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.1 - - @backstage/plugin-permission-common@0.7.8 - -## 0.0.16-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-sonarqube-backend@0.2.7-next.0 - - @backstage/plugin-playlist-backend@0.3.9-next.0 - - @backstage/plugin-catalog-backend@1.14.0-next.0 - - @backstage/plugin-auth-node@0.3.2-next.0 - - @backstage/plugin-adr-backend@0.4.2-next.0 - - @backstage/plugin-scaffolder-backend@1.17.3-next.0 - - @backstage/plugin-techdocs-backend@1.7.2-next.0 - - @backstage/plugin-todo-backend@0.3.3-next.0 - - @backstage/backend-defaults@0.2.5-next.0 - - @backstage/backend-plugin-api@0.6.5-next.0 - - @backstage/backend-tasks@0.5.10-next.0 - - @backstage/plugin-app-backend@0.3.53-next.0 - - @backstage/plugin-azure-devops-backend@0.4.2-next.0 - - @backstage/plugin-badges-backend@0.3.2-next.0 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.2-next.0 - - @backstage/plugin-devtools-backend@0.2.2-next.0 - - @backstage/plugin-entity-feedback-backend@0.2.2-next.0 - - @backstage/plugin-kubernetes-backend@0.12.2-next.0 - - @backstage/plugin-lighthouse-backend@0.3.2-next.0 - - @backstage/plugin-linguist-backend@0.5.2-next.0 - - @backstage/plugin-permission-backend@0.5.28-next.0 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.2-next.0 - - @backstage/plugin-permission-common@0.7.8 - - @backstage/plugin-permission-node@0.7.16-next.0 - - @backstage/plugin-proxy-backend@0.4.2-next.0 - - @backstage/plugin-search-backend@1.4.5-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.9-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.9-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.9-next.0 - - @backstage/plugin-search-backend-node@1.2.9-next.0 - -## 0.0.15 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.13.0 - - @backstage/plugin-kubernetes-backend@0.12.0 - - @backstage/plugin-techdocs-backend@1.7.0 - - @backstage/plugin-proxy-backend@0.4.0 - - @backstage/plugin-adr-backend@0.4.0 - - @backstage/plugin-azure-devops-backend@0.4.0 - - @backstage/plugin-badges-backend@0.3.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0 - - @backstage/plugin-devtools-backend@0.2.0 - - @backstage/plugin-entity-feedback-backend@0.2.0 - - @backstage/plugin-lighthouse-backend@0.3.0 - - @backstage/plugin-linguist-backend@0.5.0 - - @backstage/plugin-todo-backend@0.3.0 - - @backstage/plugin-app-backend@0.3.51 - - @backstage/plugin-permission-backend@0.5.26 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0 - - @backstage/plugin-scaffolder-backend@1.17.0 - - @backstage/plugin-search-backend@1.4.3 - - @backstage/plugin-search-backend-module-catalog@0.1.7 - - @backstage/plugin-search-backend-module-explore@0.1.7 - - @backstage/plugin-search-backend-module-techdocs@0.1.7 - - @backstage/backend-tasks@0.5.8 - - @backstage/plugin-auth-node@0.3.0 - - @backstage/plugin-permission-common@0.7.8 - - @backstage/plugin-permission-node@0.7.14 - - @backstage/backend-plugin-api@0.6.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0 - - @backstage/backend-defaults@0.2.3 - - @backstage/plugin-search-backend-node@1.2.7 - -## 0.0.15-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-techdocs-backend@1.7.0-next.3 - - @backstage/plugin-proxy-backend@0.4.0-next.3 - - @backstage/plugin-adr-backend@0.4.0-next.3 - - @backstage/plugin-azure-devops-backend@0.4.0-next.3 - - @backstage/plugin-badges-backend@0.3.0-next.3 - - @backstage/plugin-catalog-backend-module-unprocessed@0.3.0-next.3 - - @backstage/plugin-devtools-backend@0.2.0-next.3 - - @backstage/plugin-entity-feedback-backend@0.2.0-next.3 - - @backstage/plugin-lighthouse-backend@0.3.0-next.3 - - @backstage/plugin-linguist-backend@0.5.0-next.3 - - @backstage/plugin-todo-backend@0.3.0-next.3 - - @backstage/plugin-app-backend@0.3.51-next.3 - - @backstage/plugin-catalog-backend@1.13.0-next.3 - - @backstage/plugin-kubernetes-backend@0.11.6-next.3 - - @backstage/plugin-permission-backend@0.5.26-next.3 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0-next.1 - - @backstage/plugin-scaffolder-backend@1.17.0-next.3 - - @backstage/plugin-search-backend@1.4.3-next.3 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.3 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.3 - - @backstage/plugin-permission-common@0.7.8-next.2 - - @backstage/plugin-permission-node@0.7.14-next.3 - - @backstage/backend-plugin-api@0.6.3-next.3 - - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.0-next.0 - - @backstage/backend-defaults@0.2.3-next.3 - - @backstage/backend-tasks@0.5.8-next.3 - - @backstage/plugin-auth-node@0.3.0-next.3 - - @backstage/plugin-search-backend-node@1.2.7-next.3 - -## 0.0.15-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.16.6-next.2 - - @backstage/plugin-permission-backend@0.5.26-next.2 - - @backstage/plugin-catalog-backend@1.13.0-next.2 - - @backstage/plugin-badges-backend@0.2.6-next.2 - - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.0-next.0 - - @backstage/backend-tasks@0.5.8-next.2 - - @backstage/backend-defaults@0.2.3-next.2 - - @backstage/plugin-app-backend@0.3.51-next.2 - - @backstage/plugin-auth-node@0.3.0-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.9-next.2 - - @backstage/plugin-kubernetes-backend@0.11.6-next.2 - - @backstage/plugin-linguist-backend@0.4.3-next.2 - - @backstage/plugin-permission-node@0.7.14-next.2 - - @backstage/plugin-proxy-backend@0.3.3-next.2 - - @backstage/plugin-search-backend@1.4.3-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.2 - - @backstage/plugin-techdocs-backend@1.7.0-next.2 - - @backstage/plugin-devtools-backend@0.1.6-next.2 - - @backstage/backend-plugin-api@0.6.3-next.2 - - @backstage/plugin-adr-backend@0.3.9-next.2 - - @backstage/plugin-azure-devops-backend@0.3.30-next.2 - - @backstage/plugin-lighthouse-backend@0.2.7-next.2 - - @backstage/plugin-permission-common@0.7.8-next.1 - - @backstage/plugin-search-backend-node@1.2.7-next.2 - - @backstage/plugin-todo-backend@0.2.3-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.2 - -## 0.0.15-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.6-next.1 - - @backstage/plugin-catalog-backend@1.13.0-next.1 - - @backstage/plugin-devtools-backend@0.1.6-next.1 - - @backstage/backend-tasks@0.5.8-next.1 - - @backstage/plugin-techdocs-backend@1.7.0-next.1 - - @backstage/plugin-scaffolder-backend@1.16.6-next.1 - - @backstage/backend-plugin-api@0.6.3-next.1 - - @backstage/plugin-adr-backend@0.3.9-next.1 - - @backstage/plugin-app-backend@0.3.51-next.1 - - @backstage/plugin-auth-node@0.3.0-next.1 - - @backstage/plugin-azure-devops-backend@0.3.30-next.1 - - @backstage/plugin-badges-backend@0.2.6-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.9-next.1 - - @backstage/plugin-lighthouse-backend@0.2.7-next.1 - - @backstage/plugin-linguist-backend@0.4.3-next.1 - - @backstage/plugin-permission-backend@0.5.26-next.1 - - @backstage/plugin-permission-common@0.7.8-next.0 - - @backstage/plugin-permission-node@0.7.14-next.1 - - @backstage/plugin-proxy-backend@0.3.3-next.1 - - @backstage/plugin-search-backend@1.4.3-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.7-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.7-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.7-next.1 - - @backstage/plugin-search-backend-node@1.2.7-next.1 - - @backstage/plugin-todo-backend@0.2.3-next.1 - - @backstage/backend-defaults@0.2.3-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.3-next.1 - -## 0.0.15-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.12.2-next.0 - - @backstage/plugin-scaffolder-backend@1.16.3-next.0 - - @backstage/plugin-auth-node@0.3.0-next.0 - - @backstage/plugin-linguist-backend@0.4.2-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.8-next.0 - - @backstage/backend-tasks@0.5.7-next.0 - - @backstage/plugin-app-backend@0.3.50-next.0 - - @backstage/backend-defaults@0.2.2-next.0 - - @backstage/backend-plugin-api@0.6.2-next.0 - - @backstage/plugin-adr-backend@0.3.8-next.0 - - @backstage/plugin-azure-devops-backend@0.3.29-next.0 - - @backstage/plugin-badges-backend@0.2.5-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.2-next.0 - - @backstage/plugin-devtools-backend@0.1.5-next.0 - - @backstage/plugin-kubernetes-backend@0.11.5-next.0 - - @backstage/plugin-lighthouse-backend@0.2.6-next.0 - - @backstage/plugin-permission-backend@0.5.25-next.0 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.13-next.0 - - @backstage/plugin-proxy-backend@0.3.2-next.0 - - @backstage/plugin-search-backend@1.4.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.6-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.6-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.6-next.0 - - @backstage/plugin-search-backend-node@1.2.6-next.0 - - @backstage/plugin-techdocs-backend@1.6.7-next.0 - - @backstage/plugin-todo-backend@0.2.2-next.0 - -## 0.0.14 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-techdocs@0.1.4 - - @backstage/plugin-search-backend-module-catalog@0.1.4 - - @backstage/plugin-search-backend-module-explore@0.1.4 - - @backstage/plugin-azure-devops-backend@0.3.27 - - @backstage/plugin-kubernetes-backend@0.11.3 - - @backstage/plugin-lighthouse-backend@0.2.4 - - @backstage/plugin-permission-backend@0.5.23 - - @backstage/plugin-scaffolder-backend@1.16.0 - - @backstage/backend-defaults@0.2.0 - - @backstage/plugin-devtools-backend@0.1.3 - - @backstage/plugin-techdocs-backend@1.6.5 - - @backstage/plugin-catalog-backend@1.12.0 - - @backstage/plugin-badges-backend@0.2.3 - - @backstage/plugin-search-backend@1.4.0 - - @backstage/plugin-proxy-backend@0.3.0 - - @backstage/plugin-todo-backend@0.2.0 - - @backstage/plugin-app-backend@0.3.48 - - @backstage/backend-plugin-api@0.6.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0 - - @backstage/plugin-entity-feedback-backend@0.1.6 - - @backstage/plugin-search-backend-node@1.2.4 - - @backstage/plugin-linguist-backend@0.4.0 - - @backstage/plugin-auth-node@0.2.17 - - @backstage/backend-tasks@0.5.5 - - @backstage/plugin-adr-backend@0.3.6 - - @backstage/plugin-permission-node@0.7.11 - - @backstage/plugin-permission-common@0.7.7 - -## 0.0.14-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.4-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.4-next.2 - - @backstage/plugin-scaffolder-backend@1.15.2-next.2 - - @backstage/plugin-catalog-backend@1.12.0-next.2 - - @backstage/backend-plugin-api@0.6.0-next.2 - - @backstage/plugin-proxy-backend@0.3.0-next.2 - - @backstage/backend-tasks@0.5.5-next.2 - - @backstage/plugin-app-backend@0.3.48-next.2 - - @backstage/plugin-linguist-backend@0.4.0-next.2 - - @backstage/plugin-techdocs-backend@1.6.5-next.2 - - @backstage/backend-defaults@0.2.0-next.2 - - @backstage/plugin-adr-backend@0.3.6-next.2 - - @backstage/plugin-azure-devops-backend@0.3.27-next.2 - - @backstage/plugin-badges-backend@0.2.3-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.2 - - @backstage/plugin-devtools-backend@0.1.3-next.2 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.2 - - @backstage/plugin-kubernetes-backend@0.11.3-next.2 - - @backstage/plugin-lighthouse-backend@0.2.4-next.2 - - @backstage/plugin-permission-backend@0.5.23-next.2 - - @backstage/plugin-permission-node@0.7.11-next.2 - - @backstage/plugin-search-backend@1.4.0-next.2 - - @backstage/plugin-search-backend-node@1.2.4-next.2 - - @backstage/plugin-todo-backend@0.2.0-next.2 - - @backstage/plugin-auth-node@0.2.17-next.2 - -## 0.0.14-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.4-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.4-next.1 - - @backstage/plugin-azure-devops-backend@0.3.27-next.1 - - @backstage/plugin-kubernetes-backend@0.11.3-next.1 - - @backstage/plugin-lighthouse-backend@0.2.4-next.1 - - @backstage/plugin-permission-backend@0.5.23-next.1 - - @backstage/plugin-scaffolder-backend@1.15.2-next.1 - - @backstage/backend-defaults@0.2.0-next.1 - - @backstage/plugin-devtools-backend@0.1.3-next.1 - - @backstage/plugin-techdocs-backend@1.6.5-next.1 - - @backstage/plugin-catalog-backend@1.12.0-next.1 - - @backstage/plugin-badges-backend@0.2.3-next.1 - - @backstage/plugin-search-backend@1.4.0-next.1 - - @backstage/plugin-todo-backend@0.2.0-next.1 - - @backstage/plugin-app-backend@0.3.48-next.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.1 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.1 - - @backstage/plugin-search-backend-node@1.2.4-next.1 - - @backstage/plugin-linguist-backend@0.3.2-next.1 - - @backstage/plugin-auth-node@0.2.17-next.1 - - @backstage/backend-tasks@0.5.5-next.1 - - @backstage/plugin-adr-backend@0.3.6-next.1 - - @backstage/plugin-permission-node@0.7.11-next.1 - - @backstage/plugin-permission-common@0.7.7 - -## 0.0.14-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-backend@0.3.2-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.0 - - @backstage/plugin-search-backend-node@1.2.4-next.0 - - @backstage/plugin-todo-backend@0.2.0-next.0 - - @backstage/plugin-catalog-backend@1.12.0-next.0 - - @backstage/plugin-search-backend@1.4.0-next.0 - - @backstage/backend-defaults@0.1.13-next.0 - - @backstage/backend-tasks@0.5.5-next.0 - - @backstage/plugin-adr-backend@0.3.6-next.0 - - @backstage/plugin-app-backend@0.3.48-next.0 - - @backstage/plugin-auth-node@0.2.17-next.0 - - @backstage/plugin-azure-devops-backend@0.3.27-next.0 - - @backstage/plugin-badges-backend@0.2.3-next.0 - - @backstage/plugin-devtools-backend@0.1.3-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.6-next.0 - - @backstage/plugin-kubernetes-backend@0.11.3-next.0 - - @backstage/plugin-lighthouse-backend@0.2.4-next.0 - - @backstage/plugin-permission-backend@0.5.23-next.0 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.11-next.0 - - @backstage/plugin-scaffolder-backend@1.15.2-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.4-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.4-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.0 - - @backstage/plugin-techdocs-backend@1.6.5-next.0 - -## 0.0.13 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.2 - - @backstage/plugin-badges-backend@0.2.2 - - @backstage/plugin-devtools-backend@0.1.2 - - @backstage/plugin-scaffolder-backend@1.15.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1 - - @backstage/plugin-azure-devops-backend@0.3.26 - - @backstage/plugin-linguist-backend@0.3.1 - - @backstage/plugin-adr-backend@0.3.5 - - @backstage/plugin-lighthouse-backend@0.2.3 - - @backstage/plugin-entity-feedback-backend@0.1.5 - - @backstage/plugin-catalog-backend@1.11.0 - - @backstage/backend-defaults@0.1.12 - - @backstage/backend-tasks@0.5.4 - - @backstage/plugin-app-backend@0.3.47 - - @backstage/plugin-auth-node@0.2.16 - - @backstage/plugin-permission-backend@0.5.22 - - @backstage/plugin-permission-common@0.7.7 - - @backstage/plugin-permission-node@0.7.10 - - @backstage/plugin-search-backend@1.3.3 - - @backstage/plugin-search-backend-module-catalog@0.1.3 - - @backstage/plugin-search-backend-module-explore@0.1.3 - - @backstage/plugin-search-backend-module-techdocs@0.1.3 - - @backstage/plugin-search-backend-node@1.2.3 - - @backstage/plugin-techdocs-backend@1.6.4 - - @backstage/plugin-todo-backend@0.1.44 - -## 0.0.13-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-devtools-backend@0.1.2-next.2 - - @backstage/plugin-scaffolder-backend@1.15.1-next.1 - - @backstage/plugin-kubernetes-backend@0.11.2-next.2 - - @backstage/plugin-adr-backend@0.3.5-next.1 - - @backstage/backend-defaults@0.1.12-next.0 - - @backstage/backend-tasks@0.5.4-next.0 - - @backstage/plugin-app-backend@0.3.47-next.0 - - @backstage/plugin-auth-node@0.2.16-next.0 - - @backstage/plugin-azure-devops-backend@0.3.26-next.1 - - @backstage/plugin-badges-backend@0.2.2-next.1 - - @backstage/plugin-catalog-backend@1.11.0-next.0 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 - - @backstage/plugin-linguist-backend@0.3.1-next.1 - - @backstage/plugin-permission-backend@0.5.22-next.0 - - @backstage/plugin-permission-common@0.7.7-next.0 - - @backstage/plugin-permission-node@0.7.10-next.0 - - @backstage/plugin-search-backend@1.3.3-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 - - @backstage/plugin-search-backend-node@1.2.3-next.0 - - @backstage/plugin-techdocs-backend@1.6.4-next.0 - - @backstage/plugin-todo-backend@0.1.44-next.0 - -## 0.0.13-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.2-next.1 - - @backstage/plugin-badges-backend@0.2.2-next.1 - - @backstage/plugin-azure-devops-backend@0.3.26-next.1 - - @backstage/plugin-devtools-backend@0.1.2-next.1 - - @backstage/plugin-linguist-backend@0.3.1-next.1 - -## 0.0.13-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 - - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 - - @backstage/plugin-catalog-backend@1.11.0-next.0 - - @backstage/plugin-kubernetes-backend@0.11.2-next.0 - - @backstage/backend-defaults@0.1.12-next.0 - - @backstage/plugin-app-backend@0.3.47-next.0 - - @backstage/plugin-auth-node@0.2.16-next.0 - - @backstage/plugin-permission-backend@0.5.22-next.0 - - @backstage/plugin-permission-common@0.7.7-next.0 - - @backstage/plugin-permission-node@0.7.10-next.0 - - @backstage/plugin-scaffolder-backend@1.15.1-next.0 - - @backstage/plugin-search-backend@1.3.3-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 - - @backstage/plugin-search-backend-node@1.2.3-next.0 - - @backstage/plugin-techdocs-backend@1.6.4-next.0 - - @backstage/plugin-todo-backend@0.1.44-next.0 - -## 0.0.12 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.15.0 - - @backstage/plugin-kubernetes-backend@0.11.1 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0 - - @backstage/plugin-catalog-backend@1.10.0 - - @backstage/plugin-search-backend@1.3.2 - - @backstage/plugin-search-backend-module-explore@0.1.2 - - @backstage/backend-defaults@0.1.11 - - @backstage/plugin-app-backend@0.3.46 - - @backstage/plugin-auth-node@0.2.15 - - @backstage/plugin-permission-backend@0.5.21 - - @backstage/plugin-permission-node@0.7.9 - - @backstage/plugin-search-backend-module-catalog@0.1.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.2 - - @backstage/plugin-search-backend-node@1.2.2 - - @backstage/plugin-techdocs-backend@1.6.3 - - @backstage/plugin-todo-backend@0.1.43 - - @backstage/plugin-permission-common@0.7.6 - -## 0.0.12-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.15.0-next.3 - - @backstage/plugin-kubernetes-backend@0.11.1-next.3 - - @backstage/plugin-catalog-backend@1.10.0-next.2 - - @backstage/backend-defaults@0.1.11-next.2 - - @backstage/plugin-app-backend@0.3.46-next.2 - - @backstage/plugin-auth-node@0.2.15-next.2 - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.1 - - @backstage/plugin-permission-backend@0.5.21-next.2 - - @backstage/plugin-permission-common@0.7.6-next.0 - - @backstage/plugin-permission-node@0.7.9-next.2 - - @backstage/plugin-search-backend@1.3.2-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.2-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.2-next.2 - - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.2 - - @backstage/plugin-search-backend-node@1.2.2-next.2 - - @backstage/plugin-techdocs-backend@1.6.3-next.2 - - @backstage/plugin-todo-backend@0.1.43-next.2 - -## 0.0.12-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.1-next.2 - - @backstage/plugin-scaffolder-backend@1.15.0-next.2 - -## 0.0.12-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.0 - - @backstage/plugin-catalog-backend@1.9.2-next.1 - - @backstage/plugin-scaffolder-backend@1.15.0-next.1 - - @backstage/backend-defaults@0.1.11-next.1 - - @backstage/plugin-app-backend@0.3.46-next.1 - - @backstage/plugin-auth-node@0.2.15-next.1 - - @backstage/plugin-kubernetes-backend@0.11.1-next.1 - - @backstage/plugin-permission-backend@0.5.21-next.1 - - @backstage/plugin-permission-node@0.7.9-next.1 - - @backstage/plugin-search-backend@1.3.2-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.2-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.2-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.1 - - @backstage/plugin-search-backend-node@1.2.2-next.1 - - @backstage/plugin-techdocs-backend@1.6.3-next.1 - - @backstage/plugin-todo-backend@0.1.43-next.1 - - @backstage/plugin-permission-common@0.7.6-next.0 - -## 0.0.12-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.14.1-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.2-next.0 - - @backstage/plugin-catalog-backend@1.9.2-next.0 - - @backstage/plugin-kubernetes-backend@0.11.1-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.2-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.0 - - @backstage/plugin-techdocs-backend@1.6.3-next.0 - - @backstage/plugin-todo-backend@0.1.43-next.0 - - @backstage/plugin-app-backend@0.3.46-next.0 - - @backstage/backend-defaults@0.1.11-next.0 - - @backstage/plugin-auth-node@0.2.15-next.0 - - @backstage/plugin-permission-backend@0.5.21-next.0 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-permission-node@0.7.9-next.0 - - @backstage/plugin-search-backend@1.3.2-next.0 - - @backstage/plugin-search-backend-node@1.2.2-next.0 - -## 0.0.11 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.14.0 - - @backstage/plugin-catalog-backend@1.9.1 - - @backstage/plugin-kubernetes-backend@0.11.0 - - @backstage/plugin-todo-backend@0.1.42 - - @backstage/plugin-permission-node@0.7.8 - - @backstage/plugin-search-backend@1.3.1 - - @backstage/backend-defaults@0.1.10 - - @backstage/plugin-app-backend@0.3.45 - - @backstage/plugin-auth-node@0.2.14 - - @backstage/plugin-search-backend-module-catalog@0.1.1 - - @backstage/plugin-search-backend-module-explore@0.1.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.1 - - @backstage/plugin-techdocs-backend@1.6.2 - - @backstage/plugin-permission-backend@0.5.20 - - @backstage/plugin-search-backend-node@1.2.1 - - @backstage/plugin-permission-common@0.7.5 - -## 0.0.11-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.9.1-next.2 - - @backstage/plugin-kubernetes-backend@0.11.0-next.2 - - @backstage/plugin-search-backend@1.3.1-next.2 - - @backstage/plugin-scaffolder-backend@1.13.2-next.2 - -## 0.0.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.11.0-next.1 - - @backstage/plugin-catalog-backend@1.9.1-next.1 - - @backstage/plugin-scaffolder-backend@1.13.2-next.1 - - @backstage/backend-defaults@0.1.10-next.1 - - @backstage/plugin-app-backend@0.3.45-next.1 - - @backstage/plugin-auth-node@0.2.14-next.1 - - @backstage/plugin-permission-backend@0.5.20-next.1 - - @backstage/plugin-permission-node@0.7.8-next.1 - - @backstage/plugin-search-backend@1.3.1-next.1 - - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 - - @backstage/plugin-search-backend-node@1.2.1-next.1 - - @backstage/plugin-techdocs-backend@1.6.2-next.1 - - @backstage/plugin-todo-backend@0.1.42-next.1 - -## 0.0.11-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-permission-node@0.7.8-next.0 - - @backstage/plugin-scaffolder-backend@1.13.2-next.0 - - @backstage/plugin-kubernetes-backend@0.11.0-next.0 - - @backstage/backend-defaults@0.1.10-next.0 - - @backstage/plugin-app-backend@0.3.45-next.0 - - @backstage/plugin-auth-node@0.2.14-next.0 - - @backstage/plugin-catalog-backend@1.9.1-next.0 - - @backstage/plugin-search-backend@1.3.1-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 - - @backstage/plugin-techdocs-backend@1.6.2-next.0 - - @backstage/plugin-permission-backend@0.5.20-next.0 - - @backstage/plugin-search-backend-node@1.2.1-next.0 - - @backstage/plugin-todo-backend@0.1.42-next.0 - - @backstage/plugin-permission-common@0.7.5 - -## 0.0.10 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.10.0 - - @backstage/plugin-scaffolder-backend@1.13.0 - - @backstage/plugin-catalog-backend@1.9.0 - - @backstage/plugin-permission-node@0.7.7 - - @backstage/plugin-permission-backend@0.5.19 - - @backstage/plugin-search-backend@1.3.0 - - @backstage/plugin-permission-common@0.7.5 - - @backstage/plugin-techdocs-backend@1.6.1 - - @backstage/plugin-search-backend-node@1.2.0 - - @backstage/plugin-search-backend-module-techdocs@0.1.0 - - @backstage/plugin-search-backend-module-catalog@0.1.0 - - @backstage/plugin-search-backend-module-explore@0.1.0 - - @backstage/backend-defaults@0.1.9 - - @backstage/plugin-app-backend@0.3.44 - - @backstage/plugin-auth-node@0.2.13 - - @backstage/plugin-todo-backend@0.1.41 - -## 0.0.10-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.10.0-next.3 - - @backstage/plugin-catalog-backend@1.9.0-next.3 - - @backstage/plugin-scaffolder-backend@1.13.0-next.3 - - @backstage/backend-defaults@0.1.9-next.2 - - @backstage/plugin-app-backend@0.3.44-next.2 - - @backstage/plugin-auth-node@0.2.13-next.2 - - @backstage/plugin-permission-backend@0.5.19-next.2 - - @backstage/plugin-permission-common@0.7.5-next.0 - - @backstage/plugin-permission-node@0.7.7-next.2 - - @backstage/plugin-search-backend@1.3.0-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.0-next.2 - - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.2 - - @backstage/plugin-search-backend-node@1.2.0-next.2 - - @backstage/plugin-techdocs-backend@1.6.1-next.3 - - @backstage/plugin-todo-backend@0.1.41-next.3 - -## 0.0.10-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-kubernetes-backend@0.10.0-next.2 - - @backstage/plugin-catalog-backend@1.8.1-next.2 - - @backstage/plugin-permission-node@0.7.7-next.2 - - @backstage/plugin-permission-backend@0.5.19-next.2 - - @backstage/plugin-scaffolder-backend@1.13.0-next.2 - - @backstage/backend-defaults@0.1.9-next.2 - - @backstage/plugin-app-backend@0.3.44-next.2 - - @backstage/plugin-auth-node@0.2.13-next.2 - - @backstage/plugin-permission-common@0.7.5-next.0 - - @backstage/plugin-search-backend@1.3.0-next.2 - - @backstage/plugin-search-backend-module-catalog@0.1.0-next.1 - - @backstage/plugin-search-backend-module-explore@0.1.0-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.1 - - @backstage/plugin-search-backend-node@1.2.0-next.2 - - @backstage/plugin-techdocs-backend@1.6.1-next.2 - - @backstage/plugin-todo-backend@0.1.41-next.2 - -## 0.0.10-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-search-backend@1.3.0-next.1 - - @backstage/plugin-scaffolder-backend@1.13.0-next.1 - - @backstage/plugin-catalog-backend@1.8.1-next.1 - - @backstage/plugin-kubernetes-backend@0.10.0-next.1 - - @backstage/plugin-techdocs-backend@1.6.1-next.1 - - @backstage/plugin-search-backend-node@1.2.0-next.1 - - @backstage/plugin-search-backend-module-techdocs@0.1.0-next.0 - - @backstage/plugin-search-backend-module-catalog@0.1.0-next.0 - - @backstage/plugin-search-backend-module-explore@0.1.0-next.0 - - @backstage/backend-defaults@0.1.9-next.1 - - @backstage/plugin-app-backend@0.3.44-next.1 - - @backstage/plugin-todo-backend@0.1.41-next.1 - -## 0.0.10-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.1-next.0 - - @backstage/plugin-catalog-backend@1.8.1-next.0 - - @backstage/backend-defaults@0.1.9-next.0 - - @backstage/plugin-app-backend@0.3.44-next.0 - - @backstage/plugin-techdocs-backend@1.6.1-next.0 - - @backstage/plugin-todo-backend@0.1.41-next.0 - -## 0.0.9 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0 - - @backstage/plugin-catalog-backend@1.8.0 - - @backstage/plugin-todo-backend@0.1.40 - - @backstage/plugin-techdocs-backend@1.6.0 - - @backstage/backend-defaults@0.1.8 - - @backstage/plugin-app-backend@0.3.43 - -## 0.0.9-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0-next.2 - - @backstage/backend-defaults@0.1.8-next.2 - - @backstage/plugin-app-backend@0.3.43-next.2 - - @backstage/plugin-catalog-backend@1.8.0-next.2 - - @backstage/plugin-todo-backend@0.1.40-next.2 - -## 0.0.9-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.12.0-next.1 - - @backstage/plugin-app-backend@0.3.43-next.1 - - @backstage/plugin-catalog-backend@1.8.0-next.1 - - @backstage/plugin-todo-backend@0.1.40-next.1 - - @backstage/backend-defaults@0.1.8-next.1 - -## 0.0.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-todo-backend@0.1.40-next.0 - - @backstage/plugin-scaffolder-backend@1.11.1-next.0 - - @backstage/plugin-catalog-backend@1.8.0-next.0 - - @backstage/backend-defaults@0.1.8-next.0 - - @backstage/plugin-app-backend@0.3.43-next.0 - -## 0.0.8 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.7.2 - - @backstage/plugin-scaffolder-backend@1.11.0 - - @backstage/plugin-app-backend@0.3.42 - - @backstage/backend-defaults@0.1.7 - -## 0.0.8-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.7.2-next.2 - - @backstage/plugin-scaffolder-backend@1.11.0-next.2 - - @backstage/plugin-app-backend@0.3.42-next.2 - - @backstage/backend-defaults@0.1.7-next.2 - -## 0.0.8-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.7.2-next.1 - - @backstage/plugin-scaffolder-backend@1.11.0-next.1 - - @backstage/backend-defaults@0.1.7-next.1 - - @backstage/plugin-app-backend@0.3.42-next.1 - -## 0.0.8-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.11.0-next.0 - - @backstage/backend-defaults@0.1.7-next.0 - - @backstage/plugin-app-backend@0.3.42-next.0 - - @backstage/plugin-catalog-backend@1.7.2-next.0 - -## 0.0.7 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.10.0 - - @backstage/backend-defaults@0.1.5 - - @backstage/plugin-app-backend@0.3.40 - - @backstage/plugin-catalog-backend@1.7.0 - -## 0.0.7-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.1.5-next.1 - - @backstage/plugin-scaffolder-backend@1.10.0-next.2 - - @backstage/plugin-catalog-backend@1.7.0-next.2 - - @backstage/plugin-app-backend@0.3.40-next.1 - -## 0.0.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-defaults@0.1.5-next.0 - - @backstage/plugin-scaffolder-backend@1.10.0-next.1 - - @backstage/plugin-app-backend@0.3.40-next.0 - - @backstage/plugin-catalog-backend@1.7.0-next.1 - -## 0.0.7-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.9.1-next.0 - - @backstage/plugin-catalog-backend@1.7.0-next.0 - - @backstage/backend-defaults@0.1.4 - - @backstage/plugin-app-backend@0.3.39 - -## 0.0.6 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.9.0 - - @backstage/plugin-catalog-backend@1.6.0 - - @backstage/plugin-app-backend@0.3.39 - - @backstage/backend-defaults@0.1.4 - -## 0.0.6-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.6.0-next.3 - - @backstage/plugin-scaffolder-backend@1.9.0-next.3 - - @backstage/backend-defaults@0.1.4-next.3 - - @backstage/plugin-app-backend@0.3.39-next.3 - -## 0.0.6-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.6.0-next.2 - - @backstage/plugin-app-backend@0.3.39-next.2 - - @backstage/plugin-scaffolder-backend@1.9.0-next.2 - - @backstage/backend-defaults@0.1.4-next.2 - -## 0.0.6-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.6.0-next.1 - - @backstage/plugin-scaffolder-backend@1.8.1-next.1 - - @backstage/plugin-app-backend@0.3.39-next.1 - - @backstage/backend-defaults@0.1.4-next.1 - -## 0.0.6-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.8.1-next.0 - - @backstage/plugin-catalog-backend@1.6.0-next.0 - - @backstage/plugin-app-backend@0.3.39-next.0 - - @backstage/backend-defaults@0.1.4-next.0 - -## 0.0.5 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.5.1 - - @backstage/plugin-scaffolder-backend@1.8.0 - - @backstage/plugin-app-backend@0.3.38 - - @backstage/backend-defaults@0.1.3 - -## 0.0.5-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.8.0-next.2 - - @backstage/plugin-app-backend@0.3.38-next.1 - - @backstage/plugin-catalog-backend@1.5.1-next.1 - - @backstage/backend-defaults@0.1.3-next.1 - -## 0.0.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.8.0-next.1 - -## 0.0.5-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.5.1-next.0 - - @backstage/plugin-scaffolder-backend@1.8.0-next.0 - - @backstage/plugin-app-backend@0.3.38-next.0 - - @backstage/backend-defaults@0.1.3-next.0 - -## 0.0.4 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.5.0 - - @backstage/plugin-scaffolder-backend@1.7.0 - - @backstage/backend-defaults@0.1.2 - - @backstage/plugin-app-backend@0.3.37 - -## 0.0.4-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.5.0-next.2 - - @backstage/plugin-scaffolder-backend@1.7.0-next.2 - - @backstage/plugin-app-backend@0.3.37-next.2 - - @backstage/backend-defaults@0.1.2-next.2 - -## 0.0.4-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.7.0-next.1 - - @backstage/backend-defaults@0.1.2-next.1 - - @backstage/plugin-app-backend@0.3.37-next.1 - - @backstage/plugin-catalog-backend@1.4.1-next.1 - -## 0.0.4-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.7.0-next.0 - - @backstage/backend-defaults@0.1.2-next.0 - - @backstage/plugin-catalog-backend@1.4.1-next.0 - - @backstage/plugin-app-backend@0.3.37-next.0 - -## 0.0.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.6.0 - - @backstage/plugin-catalog-backend@1.4.0 - - @backstage/backend-defaults@0.1.1 - -## 0.0.3-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.4.0-next.1 - - @backstage/plugin-scaffolder-backend@1.6.0-next.1 - -## 0.0.3-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.6.0-next.0 - - @backstage/plugin-catalog-backend@1.3.2-next.0 - - @backstage/backend-defaults@0.1.1-next.0 - -## 0.0.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.5.0 - - @backstage/backend-defaults@0.1.0 - - @backstage/plugin-catalog-backend@1.3.1 - -## 0.0.2-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-scaffolder-backend@1.5.0-next.0 - - @backstage/backend-app-api@0.1.1-next.0 - - @backstage/plugin-catalog-backend@1.3.1-next.0 - -## 0.0.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.3.0 - - @backstage/plugin-scaffolder-backend@1.4.0 - - @backstage/backend-app-api@0.1.0 - -## 0.0.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-backend@1.3.0-next.3 - - @backstage/plugin-scaffolder-backend@1.4.0-next.3 - - @backstage/backend-app-api@0.1.0-next.0 diff --git a/packages/backend-split/package.json b/packages/backend-split/package.json index cca4f9ebd0..78921b51a1 100644 --- a/packages/backend-split/package.json +++ b/packages/backend-split/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-split", - "version": "0.0.33-next.2", + "version": "0.0.1", "backstage": { "role": "backend" }, From 14d26be8b51c2fc840966de10b718d18540c1ab3 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 22:08:03 -0700 Subject: [PATCH 04/42] remove duplicate custom plugins Signed-off-by: aramissennyeydd --- .../src/experimental/features.http | 3 +- .../src/experimental/instanceMetadata.ts | 2 +- .../src/experimental/systemMetadata.ts | 4 +- packages/backend/package.json | 5 +- .../src/experimental/instanceMetadata.ts | 50 ---------- .../src/experimental/systemMetadata.ts | 93 ------------------- packages/backend/src/index.ts | 2 - 7 files changed, 7 insertions(+), 152 deletions(-) delete mode 100644 packages/backend/src/experimental/instanceMetadata.ts delete mode 100644 packages/backend/src/experimental/systemMetadata.ts diff --git a/packages/backend-split/src/experimental/features.http b/packages/backend-split/src/experimental/features.http index 41c07e99d4..34c8703bcd 100644 --- a/packages/backend-split/src/experimental/features.http +++ b/packages/backend-split/src/experimental/features.http @@ -1,4 +1,5 @@ -GET http://localhost:7007/.backstage/systemInfo/features/installed +// Not working yet, the metadata plugin HTTP APIs need to be moved to rootHttpRouter. +# GET http://localhost:7007/.backstage/systemInfo/features/installed ### diff --git a/packages/backend-split/src/experimental/instanceMetadata.ts b/packages/backend-split/src/experimental/instanceMetadata.ts index 370ec02325..abdb53dfeb 100644 --- a/packages/backend-split/src/experimental/instanceMetadata.ts +++ b/packages/backend-split/src/experimental/instanceMetadata.ts @@ -20,7 +20,7 @@ import { // Example usage of the instance metadata service to log the installed plugins. export default createBackendPlugin({ - pluginId: 'instance-metadata-logging', + pluginId: 'instance-metadata', register(env) { env.registerInit({ deps: { diff --git a/packages/backend-split/src/experimental/systemMetadata.ts b/packages/backend-split/src/experimental/systemMetadata.ts index 3b70059711..e567903356 100644 --- a/packages/backend-split/src/experimental/systemMetadata.ts +++ b/packages/backend-split/src/experimental/systemMetadata.ts @@ -23,9 +23,9 @@ import { } from '@backstage/backend-plugin-api/alpha'; import Router from 'express-promise-router'; -// Example usage of the instance metadata service to log the installed features. +// Example usage of the instance metadata service to log the list of instances and a small HTTP API. export default createBackendPlugin({ - pluginId: 'system-metadata-logging', + pluginId: 'system-metadata', register(env) { env.registerInit({ deps: { diff --git a/packages/backend/package.json b/packages/backend/package.json index 12eba46769..8fd42507dd 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -26,8 +26,8 @@ "clean": "backstage-cli package clean", "lint": "backstage-cli package lint", "start": "backstage-cli package start --require ./src/instrumentation.js", - "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", "start:prometheus": "docker run --mount type=bind,source=./prometheus.yml,destination=/etc/prometheus/prometheus.yml --publish published=9090,target=9090,protocol=tcp prom/prometheus", + "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", "test": "backstage-cli package test" }, "dependencies": { @@ -70,8 +70,7 @@ "@opentelemetry/auto-instrumentations-node": "^0.61.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "example-app": "link:../app", - "express-promise-router": "^4.1.0" + "example-app": "link:../app" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/packages/backend/src/experimental/instanceMetadata.ts b/packages/backend/src/experimental/instanceMetadata.ts deleted file mode 100644 index 09e2b0cae8..0000000000 --- a/packages/backend/src/experimental/instanceMetadata.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2024 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { instanceMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; -import Router from 'express-promise-router'; - -// Example usage of the instance metadata service to log the installed features. -export default createBackendPlugin({ - pluginId: 'instance-metadata-logging', - register(env) { - env.registerInit({ - deps: { - instanceMetadata: instanceMetadataServiceRef, - logger: coreServices.logger, - httpRouter: coreServices.rootHttpRouter, - }, - async init({ instanceMetadata, logger, httpRouter }) { - logger.info( - `Installed features on this instance: ${JSON.stringify( - instanceMetadata.getInstalledFeatures(), - )}`, - ); - - const router = Router(); - - router.get('/features/installed', (_, res) => { - res.json({ items: instanceMetadata.getInstalledFeatures() }); - }); - - httpRouter.use('/.backstage/instanceInfo', router); - }, - }); - }, -}); diff --git a/packages/backend/src/experimental/systemMetadata.ts b/packages/backend/src/experimental/systemMetadata.ts deleted file mode 100644 index 3b70059711..0000000000 --- a/packages/backend/src/experimental/systemMetadata.ts +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2024 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { - BackendFeatureMeta, - systemMetadataServiceRef, -} from '@backstage/backend-plugin-api/alpha'; -import Router from 'express-promise-router'; - -// Example usage of the instance metadata service to log the installed features. -export default createBackendPlugin({ - pluginId: 'system-metadata-logging', - register(env) { - env.registerInit({ - deps: { - systemMetadata: systemMetadataServiceRef, - logger: coreServices.logger, - httpRouter: coreServices.rootHttpRouter, - }, - async init({ systemMetadata, logger, httpRouter }) { - logger.info( - `Instances in this system: ${JSON.stringify( - await systemMetadata.listInstances(), - )}`, - ); - - const router = Router(); - - router.get('/instances', async (_, res) => { - res.json(await systemMetadata.listInstances()); - }); - - router.get('/features/installed', async (_, res) => { - const instances = await systemMetadata.listInstances(); - const featurePromises = await Promise.allSettled( - instances.map(async instance => { - const response = await fetch( - `${instance.url}/.backstage/instanceInfo/features/installed`, - ); - if (response.ok) { - return { instance, response: await response.json() }; - } - throw new Error( - `Failed to fetch installed features from ${instance.url}`, - ); - }), - ); - const pluginByInstance: Record = {}; - for (const result of featurePromises) { - if (result.status !== 'fulfilled') { - logger.error( - `Failed to fetch installed features: ${result.reason}`, - ); - continue; - } - const instance = result.value.instance; - const installedFeatures = result.value.response - .items as BackendFeatureMeta[]; - for (const feature of installedFeatures) { - if (feature.type === 'plugin') { - if (!pluginByInstance[feature.pluginId]) { - pluginByInstance[feature.pluginId] = []; - } - pluginByInstance[feature.pluginId].push( - `${instance.url}/api/${feature.pluginId}`, - ); - } - } - } - res.json(pluginByInstance); - }); - - httpRouter.use('/.backstage/systemInfo', router); - }, - }); - }, -}); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 2728068ab5..87abbdcc93 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -70,8 +70,6 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); -backend.add(import('./experimental/instanceMetadata')); -backend.add(import('./experimental/systemMetadata')); backend.add(systemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); From f4dbb5acb0890a84e6ad32246501a65d9d8ccea8 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 22:10:49 -0700 Subject: [PATCH 05/42] remove unused deps Signed-off-by: aramissennyeydd --- packages/backend-split/package.json | 20 -------------------- yarn.lock | 21 --------------------- 2 files changed, 41 deletions(-) diff --git a/packages/backend-split/package.json b/packages/backend-split/package.json index 78921b51a1..c791187a76 100644 --- a/packages/backend-split/package.json +++ b/packages/backend-split/package.json @@ -32,35 +32,15 @@ "@backstage/backend-defaults": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-model": "workspace:^", - "@backstage/plugin-app-backend": "workspace:^", - "@backstage/plugin-auth-backend": "workspace:^", - "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", - "@backstage/plugin-auth-backend-module-guest-provider": "workspace:^", - "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^", "@backstage/plugin-catalog-backend-module-openapi": "workspace:^", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", - "@backstage/plugin-devtools-backend": "workspace:^", - "@backstage/plugin-events-backend": "workspace:^", - "@backstage/plugin-kubernetes-backend": "workspace:^", - "@backstage/plugin-notifications-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", - "@backstage/plugin-proxy-backend": "workspace:^", - "@backstage/plugin-scaffolder-backend": "workspace:^", - "@backstage/plugin-scaffolder-backend-module-github": "workspace:^", - "@backstage/plugin-scaffolder-backend-module-notifications": "workspace:^", - "@backstage/plugin-search-backend": "workspace:^", - "@backstage/plugin-search-backend-module-catalog": "workspace:^", - "@backstage/plugin-search-backend-module-explore": "workspace:^", - "@backstage/plugin-search-backend-module-techdocs": "workspace:^", - "@backstage/plugin-search-backend-node": "workspace:^", - "@backstage/plugin-signals-backend": "workspace:^", - "@backstage/plugin-techdocs-backend": "workspace:^", "@opentelemetry/auto-instrumentations-node": "^0.54.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", diff --git a/yarn.lock b/yarn.lock index fdafe26f05..ac53d6c016 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30314,35 +30314,15 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/plugin-app-backend": "workspace:^" - "@backstage/plugin-auth-backend": "workspace:^" - "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" - "@backstage/plugin-auth-backend-module-guest-provider": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^" "@backstage/plugin-catalog-backend-module-openapi": "workspace:^" "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" - "@backstage/plugin-devtools-backend": "workspace:^" - "@backstage/plugin-events-backend": "workspace:^" - "@backstage/plugin-kubernetes-backend": "workspace:^" - "@backstage/plugin-notifications-backend": "workspace:^" "@backstage/plugin-permission-backend": "workspace:^" "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" - "@backstage/plugin-proxy-backend": "workspace:^" - "@backstage/plugin-scaffolder-backend": "workspace:^" - "@backstage/plugin-scaffolder-backend-module-github": "workspace:^" - "@backstage/plugin-scaffolder-backend-module-notifications": "workspace:^" - "@backstage/plugin-search-backend": "workspace:^" - "@backstage/plugin-search-backend-module-catalog": "workspace:^" - "@backstage/plugin-search-backend-module-explore": "workspace:^" - "@backstage/plugin-search-backend-module-techdocs": "workspace:^" - "@backstage/plugin-search-backend-node": "workspace:^" - "@backstage/plugin-signals-backend": "workspace:^" - "@backstage/plugin-techdocs-backend": "workspace:^" "@opentelemetry/auto-instrumentations-node": "npm:^0.54.0" "@opentelemetry/exporter-prometheus": "npm:^0.54.0" "@opentelemetry/sdk-node": "npm:^0.54.0" @@ -30396,7 +30376,6 @@ __metadata: "@opentelemetry/exporter-prometheus": "npm:^0.54.0" "@opentelemetry/sdk-node": "npm:^0.54.0" example-app: "link:../app" - express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft From 8999766fc46a8267e1adee965880dbda8c3efd49 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 22:11:55 -0700 Subject: [PATCH 06/42] remove more unused files Signed-off-by: aramissennyeydd --- packages/backend-split/knip-report.md | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 packages/backend-split/knip-report.md diff --git a/packages/backend-split/knip-report.md b/packages/backend-split/knip-report.md deleted file mode 100644 index a26b412ee9..0000000000 --- a/packages/backend-split/knip-report.md +++ /dev/null @@ -1,12 +0,0 @@ -# Knip report - -## Unused dependencies (5) - -| Name | Location | Severity | -| :----------------------------------------------- | :----------- | :------- | -| @backstage/plugin-catalog-backend-module-openapi | package.json | error | -| @backstage/plugin-search-backend-node | package.json | error | -| @backstage/plugin-permission-common | package.json | error | -| @backstage/plugin-permission-node | package.json | error | -| @backstage/backend-tasks | package.json | error | - From 54e7bd9a3570448f4c4d8fab13247d6500c5a4dc Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 12 Dec 2024 22:21:37 -0700 Subject: [PATCH 07/42] yarn fix Signed-off-by: aramissennyeydd --- packages/backend-split/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-split/package.json b/packages/backend-split/package.json index c791187a76..a517a8b49e 100644 --- a/packages/backend-split/package.json +++ b/packages/backend-split/package.json @@ -12,7 +12,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "packages/backend" + "directory": "packages/backend-split" }, "license": "Apache-2.0", "main": "dist/index.cjs.js", From e6b480badc05d26cd95a51e93aa682523bc6327b Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Thu, 26 Dec 2024 13:51:24 -0700 Subject: [PATCH 08/42] fix api report Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 6 ++--- packages/backend-defaults/report-alpha.api.md | 23 +++++++++++++++++++ .../backend-defaults/src/entrypoints/alpha.ts | 16 +++++++++++++ .../lib/DefaultSystemMetadataService.ts | 3 +++ .../definitions/SystemMetadataService.ts | 7 ++++++ packages/backend-split/src/index.ts | 2 +- packages/backend/src/index.ts | 2 +- 7 files changed, 54 insertions(+), 5 deletions(-) create mode 100644 packages/backend-defaults/src/entrypoints/alpha.ts diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 27a3d0529a..bae8dbf04f 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -21,7 +21,7 @@ "exports": { ".": "./src/index.ts", "./auditor": "./src/entrypoints/auditor/index.ts", - "./alpha/systemMetadata": "./src/entrypoints/systemMetadata/index.ts", + "./alpha": "./src/entrypoints/alpha.ts", "./auth": "./src/entrypoints/auth/index.ts", "./cache": "./src/entrypoints/cache/index.ts", "./database": "./src/entrypoints/database/index.ts", @@ -50,8 +50,8 @@ "auditor": [ "src/entrypoints/auditor/index.ts" ], - "alpha/systemMetadata": [ - "src/entrypoints/systemMetadata/index.ts" + "alpha": [ + "src/entrypoints/alpha.ts" ], "auth": [ "src/entrypoints/auth/index.ts" diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 58277b5e1e..e20c6c0b95 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -17,6 +17,29 @@ export const actionsRegistryServiceFactory: ServiceFactory< // @public (undocumented) export const actionsServiceFactory: ServiceFactory< ActionsService, +import { BackstageInstance } from '@backstage/backend-plugin-api/alpha'; +import { LoggerService } from '@backstage/backend-plugin-api'; +import { RootConfigService } from '@backstage/backend-plugin-api'; +import { ServiceFactory } from '@backstage/backend-plugin-api'; +import { SystemMetadataService } from '@backstage/backend-plugin-api/alpha'; + +// Warning: (ae-missing-release-tag) "DefaultSystemMetadataService" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class DefaultSystemMetadataService implements SystemMetadataService { + constructor(options: { logger: LoggerService; config: RootConfigService }); + // (undocumented) + static create(pluginEnv: { + logger: LoggerService; + config: RootConfigService; + }): DefaultSystemMetadataService; + // (undocumented) + listInstances(): Promise; +} + +// @alpha +export const systemMetadataServiceFactory: ServiceFactory< + SystemMetadataService, 'plugin', 'singleton' >; diff --git a/packages/backend-defaults/src/entrypoints/alpha.ts b/packages/backend-defaults/src/entrypoints/alpha.ts new file mode 100644 index 0000000000..a26522c228 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/alpha.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2024 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. + */ +export * from './systemMetadata'; diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 77030f2e43..1de37c3b42 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -23,6 +23,9 @@ import { SystemMetadataService, } from '@backstage/backend-plugin-api/alpha'; +/** + * @alpha + */ export class DefaultSystemMetadataService implements SystemMetadataService { private readonly logger: LoggerService; private readonly config: RootConfigService; diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index 9d85412beb..0f0fe2156d 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -14,12 +14,19 @@ * limitations under the License. */ +/** @internal */ type Target = string | { internal: string; external: string }; +/** + * @alpha + */ export interface BackstageInstance { url: Target; } +/** + * @alpha + */ export interface SystemMetadataService { listInstances(): Promise; } diff --git a/packages/backend-split/src/index.ts b/packages/backend-split/src/index.ts index ca5fcd93e8..52b7559867 100644 --- a/packages/backend-split/src/index.ts +++ b/packages/backend-split/src/index.ts @@ -15,7 +15,7 @@ */ import { createBackend } from '@backstage/backend-defaults'; -import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha/systemMetadata'; +import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha'; const backend = createBackend(); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 87abbdcc93..a6f9b7b3e9 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -19,7 +19,7 @@ import { coreServices, createBackendFeatureLoader, } from '@backstage/backend-plugin-api'; -import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha/systemMetadata'; +import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha'; const backend = createBackend(); From 248c391112eda508209b154231b4eeef1fb78033 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Fri, 3 Jan 2025 22:56:35 -0700 Subject: [PATCH 09/42] fix api report Signed-off-by: aramissennyeydd --- packages/backend-plugin-api/src/alpha/index.ts | 5 +++++ .../src/services/definitions/SystemMetadataService.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index 3302b978b6..14bb24ecfe 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -26,6 +26,10 @@ export { actionsRegistryServiceRef, actionsServiceRef } from './refs'; import { createServiceRef } from '@backstage/backend-plugin-api'; +/** + * EXPERIMENTAL: System metadata service. + * @alpha + */ export const systemMetadataServiceRef = createServiceRef< import('./services/definitions/SystemMetadataService').SystemMetadataService >({ @@ -35,4 +39,5 @@ export const systemMetadataServiceRef = createServiceRef< export type { BackstageInstance, SystemMetadataService, + Target, } from './services/definitions/SystemMetadataService'; diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index 0f0fe2156d..58ab02b000 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -/** @internal */ -type Target = string | { internal: string; external: string }; +/** @alpha */ +export type Target = string | { internal: string; external: string }; /** * @alpha From c6f1ee8b434d4dc77d1c2ef90c23e3c85f6616b2 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Fri, 3 Jan 2025 23:15:32 -0700 Subject: [PATCH 10/42] fix api report again Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-alpha.api.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index e20c6c0b95..043072da87 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -23,9 +23,7 @@ import { RootConfigService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { SystemMetadataService } from '@backstage/backend-plugin-api/alpha'; -// Warning: (ae-missing-release-tag) "DefaultSystemMetadataService" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// -// @public (undocumented) +// @alpha (undocumented) export class DefaultSystemMetadataService implements SystemMetadataService { constructor(options: { logger: LoggerService; config: RootConfigService }); // (undocumented) From fcc38f1b01b666dcbef7faf8367b744647a27932 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Fri, 17 Jan 2025 17:43:12 -0500 Subject: [PATCH 11/42] address PR feedback Signed-off-by: aramissennyeydd --- .../lib/DefaultSystemMetadataService.ts | 23 ++--- .../lib/createSystemMetadataRouter.ts | 78 ++++++++++++++++ .../systemMetadataServiceFactory.ts | 13 ++- .../backend-plugin-api/src/alpha/index.ts | 1 + .../src/experimental/features.http | 7 +- .../src/experimental/instanceMetadata.ts | 48 ---------- .../src/experimental/systemMetadata.ts | 93 ------------------- packages/backend-split/src/index.ts | 2 - 8 files changed, 99 insertions(+), 166 deletions(-) create mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts delete mode 100644 packages/backend-split/src/experimental/instanceMetadata.ts delete mode 100644 packages/backend-split/src/experimental/systemMetadata.ts diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 1de37c3b42..96fa8b1820 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -27,12 +27,9 @@ import { * @alpha */ export class DefaultSystemMetadataService implements SystemMetadataService { - private readonly logger: LoggerService; - private readonly config: RootConfigService; - constructor(options: { logger: LoggerService; config: RootConfigService }) { - this.logger = options.logger; - this.config = options.config; - } + constructor( + private options: { logger: LoggerService; config: RootConfigService }, + ) {} public static create(pluginEnv: { logger: LoggerService; @@ -41,24 +38,16 @@ export class DefaultSystemMetadataService implements SystemMetadataService { return new DefaultSystemMetadataService(pluginEnv); } - listInstances() { + async listInstances() { const endpoints = - this.config.getOptionalConfigArray('discovery.instances') ?? []; + this.options.config.getOptionalConfigArray('discovery.instances') ?? []; const instances: BackstageInstance[] = []; for (const endpoint of endpoints) { const baseUrl = endpoint.getOptionalString('baseUrl'); if (baseUrl) { - this.logger.info(`Found instance at ${baseUrl}`); instances.push({ url: baseUrl }); - } else { - this.logger.warn( - `Instance ${endpoint.get( - 'target', - )} is missing a 'baseUrl' property. This is required for the system metadata service.`, - ); } } - this.logger.info(`Found ${instances.length} instances.`); - return Promise.resolve(instances); + return instances; } } diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts new file mode 100644 index 0000000000..4750ed07db --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts @@ -0,0 +1,78 @@ +/* + * Copyright 2025 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 { LoggerService } from '@backstage/backend-plugin-api'; +import { + BackendFeatureMeta, + SystemMetadataService, +} from '@backstage/backend-plugin-api/alpha'; +import Router from 'express-promise-router'; + +export async function createSystemMetadataRouter(options: { + logger: LoggerService; + systemMetadata: SystemMetadataService; +}) { + const { logger, systemMetadata } = options; + logger.info( + `Instances in this system: ${JSON.stringify( + await systemMetadata.listInstances(), + )}`, + ); + + const router = Router(); + + router.get('/instances', async (_, res) => { + res.json(await systemMetadata.listInstances()); + }); + + router.get('/features/installed', async (_, res) => { + const instances = await systemMetadata.listInstances(); + const featurePromises = await Promise.allSettled( + instances.map(async instance => { + const response = await fetch( + `${instance.url}/.backstage/instanceMetadata/v1/features/installed`, + ); + if (response.ok) { + return { instance, response: await response.json() }; + } + throw new Error( + `Failed to fetch installed features from ${instance.url}`, + ); + }), + ); + const pluginByInstance: Record = {}; + for (const result of featurePromises) { + if (result.status !== 'fulfilled') { + logger.error(`Failed to fetch installed features: ${result.reason}`); + continue; + } + const instance = result.value.instance; + const installedFeatures = result.value.response + .items as BackendFeatureMeta[]; + for (const feature of installedFeatures) { + if (feature.type === 'plugin') { + if (!pluginByInstance[feature.pluginId]) { + pluginByInstance[feature.pluginId] = []; + } + pluginByInstance[feature.pluginId].push(instance.url); + } + } + } + res.json(pluginByInstance); + }); + + return router; +} diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts index 59ff9f4253..2eaec11caa 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts @@ -20,6 +20,7 @@ import { } from '@backstage/backend-plugin-api'; import { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; import { systemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; +import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; /** * Metadata about an entire Backstage system, a collection of Backstage instances. @@ -29,13 +30,19 @@ import { systemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; export const systemMetadataServiceFactory = createServiceFactory({ service: systemMetadataServiceRef, deps: { - logger: coreServices.logger, + logger: coreServices.rootLogger, config: coreServices.rootConfig, + httpRouter: coreServices.rootHttpRouter, }, - async factory({ logger, config }) { - return DefaultSystemMetadataService.create({ + async factory({ logger, config, httpRouter }) { + const systemMetadata = DefaultSystemMetadataService.create({ logger, config, }); + + const router = await createSystemMetadataRouter({ systemMetadata, logger }); + + httpRouter.use('/.backstage/systemMetadata/v1', router); + return systemMetadata; }, }); diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index 14bb24ecfe..2262c5a3f1 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -34,6 +34,7 @@ export const systemMetadataServiceRef = createServiceRef< import('./services/definitions/SystemMetadataService').SystemMetadataService >({ id: 'core.systemMetadata', + scope: 'root', }); export type { diff --git a/packages/backend-split/src/experimental/features.http b/packages/backend-split/src/experimental/features.http index 34c8703bcd..bb9287f61c 100644 --- a/packages/backend-split/src/experimental/features.http +++ b/packages/backend-split/src/experimental/features.http @@ -1,6 +1,7 @@ -// Not working yet, the metadata plugin HTTP APIs need to be moved to rootHttpRouter. -# GET http://localhost:7007/.backstage/systemInfo/features/installed +// Test requests for the split backend to test the system metadata service :) +// The 2 below requests should return the same data. +GET http://localhost:7007/.backstage/systemMetadata/v1/features/installed ### -GET http://localhost:7008/.backstage/systemInfo/features/installed \ No newline at end of file +GET http://localhost:7008/.backstage/systemMetadata/v1/features/installed \ No newline at end of file diff --git a/packages/backend-split/src/experimental/instanceMetadata.ts b/packages/backend-split/src/experimental/instanceMetadata.ts deleted file mode 100644 index abdb53dfeb..0000000000 --- a/packages/backend-split/src/experimental/instanceMetadata.ts +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright 2024 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; - -// Example usage of the instance metadata service to log the installed plugins. -export default createBackendPlugin({ - pluginId: 'instance-metadata', - register(env) { - env.registerInit({ - deps: { - instanceMetadata: coreServices.rootInstanceMetadata, - logger: coreServices.logger, - httpRouter: coreServices.rootHttpRouter, - }, - async init({ instanceMetadata, logger, httpRouter }) { - logger.info( - `Installed plugins on this instance: ${plugins - .map(e => e.pluginId) - .join(', ')}`, - ); - - const router = Router(); - - router.get('/features/installed', (_, res) => { - res.json({ items: instanceMetadata.getInstalledFeatures() }); - }); - - httpRouter.use('/.backstage/instanceInfo', router); - }, - }); - }, -}); diff --git a/packages/backend-split/src/experimental/systemMetadata.ts b/packages/backend-split/src/experimental/systemMetadata.ts deleted file mode 100644 index e567903356..0000000000 --- a/packages/backend-split/src/experimental/systemMetadata.ts +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2024 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { - BackendFeatureMeta, - systemMetadataServiceRef, -} from '@backstage/backend-plugin-api/alpha'; -import Router from 'express-promise-router'; - -// Example usage of the instance metadata service to log the list of instances and a small HTTP API. -export default createBackendPlugin({ - pluginId: 'system-metadata', - register(env) { - env.registerInit({ - deps: { - systemMetadata: systemMetadataServiceRef, - logger: coreServices.logger, - httpRouter: coreServices.rootHttpRouter, - }, - async init({ systemMetadata, logger, httpRouter }) { - logger.info( - `Instances in this system: ${JSON.stringify( - await systemMetadata.listInstances(), - )}`, - ); - - const router = Router(); - - router.get('/instances', async (_, res) => { - res.json(await systemMetadata.listInstances()); - }); - - router.get('/features/installed', async (_, res) => { - const instances = await systemMetadata.listInstances(); - const featurePromises = await Promise.allSettled( - instances.map(async instance => { - const response = await fetch( - `${instance.url}/.backstage/instanceInfo/features/installed`, - ); - if (response.ok) { - return { instance, response: await response.json() }; - } - throw new Error( - `Failed to fetch installed features from ${instance.url}`, - ); - }), - ); - const pluginByInstance: Record = {}; - for (const result of featurePromises) { - if (result.status !== 'fulfilled') { - logger.error( - `Failed to fetch installed features: ${result.reason}`, - ); - continue; - } - const instance = result.value.instance; - const installedFeatures = result.value.response - .items as BackendFeatureMeta[]; - for (const feature of installedFeatures) { - if (feature.type === 'plugin') { - if (!pluginByInstance[feature.pluginId]) { - pluginByInstance[feature.pluginId] = []; - } - pluginByInstance[feature.pluginId].push( - `${instance.url}/api/${feature.pluginId}`, - ); - } - } - } - res.json(pluginByInstance); - }); - - httpRouter.use('/.backstage/systemInfo', router); - }, - }); - }, -}); diff --git a/packages/backend-split/src/index.ts b/packages/backend-split/src/index.ts index 52b7559867..2238713ffe 100644 --- a/packages/backend-split/src/index.ts +++ b/packages/backend-split/src/index.ts @@ -30,8 +30,6 @@ backend.add( ); backend.add(import('@backstage/plugin-permission-backend')); -backend.add(import('./experimental/instanceMetadata')); -backend.add(import('./experimental/systemMetadata')); backend.add(systemMetadataServiceFactory); backend.start(); From ff2c41bff55d74fcaebc070f1b4138e411aee42c Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Fri, 17 Jan 2025 18:11:02 -0500 Subject: [PATCH 12/42] update config handling to support internal/external split and adjust types Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-alpha.api.md | 2 +- .../lib/DefaultSystemMetadataService.ts | 48 ++++++++++++++----- .../lib/createSystemMetadataRouter.ts | 11 +++-- .../backend-plugin-api/src/alpha/index.ts | 1 - .../definitions/SystemMetadataService.ts | 6 +-- packages/backend/app-config.split.yaml | 4 +- 6 files changed, 50 insertions(+), 22 deletions(-) diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 043072da87..7e7cccc007 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -38,7 +38,7 @@ export class DefaultSystemMetadataService implements SystemMetadataService { // @alpha export const systemMetadataServiceFactory: ServiceFactory< SystemMetadataService, - 'plugin', + 'root', 'singleton' >; diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 96fa8b1820..0d1583a113 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -22,14 +22,49 @@ import { BackstageInstance, SystemMetadataService, } from '@backstage/backend-plugin-api/alpha'; +import z from 'zod'; + +const targetObjectSchema = z.object({ + internal: z.string(), + external: z.string(), +}); /** * @alpha */ export class DefaultSystemMetadataService implements SystemMetadataService { + private instances: BackstageInstance[]; constructor( private options: { logger: LoggerService; config: RootConfigService }, - ) {} + ) { + const getInstances = () => { + const endpoints = + options.config.getOptionalConfigArray('discovery.instances') ?? []; + const instances: BackstageInstance[] = []; + for (const endpoint of endpoints) { + const baseUrl = endpoint.getOptional('baseUrl'); + if (baseUrl) { + if (typeof baseUrl === 'string') { + instances.push({ internalUrl: baseUrl, externalUrl: baseUrl }); + } else { + const parseAttempt = targetObjectSchema.safeParse(baseUrl); + if (parseAttempt.success) { + const { internal, external } = parseAttempt.data; + instances.push({ + internalUrl: internal, + externalUrl: external, + }); + } + } + } + } + return instances; + }; + this.instances = getInstances(); + this.options.config.subscribe?.(() => { + this.instances = getInstances(); + }); + } public static create(pluginEnv: { logger: LoggerService; @@ -39,15 +74,6 @@ export class DefaultSystemMetadataService implements SystemMetadataService { } async listInstances() { - const endpoints = - this.options.config.getOptionalConfigArray('discovery.instances') ?? []; - const instances: BackstageInstance[] = []; - for (const endpoint of endpoints) { - const baseUrl = endpoint.getOptionalString('baseUrl'); - if (baseUrl) { - instances.push({ url: baseUrl }); - } - } - return instances; + return this.instances; } } diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts index 4750ed07db..66e1759213 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts @@ -43,17 +43,20 @@ export async function createSystemMetadataRouter(options: { const featurePromises = await Promise.allSettled( instances.map(async instance => { const response = await fetch( - `${instance.url}/.backstage/instanceMetadata/v1/features/installed`, + `${instance.internalUrl}/.backstage/instanceMetadata/v1/features/installed`, ); if (response.ok) { return { instance, response: await response.json() }; } throw new Error( - `Failed to fetch installed features from ${instance.url}`, + `Failed to fetch installed features from ${instance.internalUrl}`, ); }), ); - const pluginByInstance: Record = {}; + const pluginByInstance: Record< + string, + { internalUrl: string; externalUrl: string }[] + > = {}; for (const result of featurePromises) { if (result.status !== 'fulfilled') { logger.error(`Failed to fetch installed features: ${result.reason}`); @@ -67,7 +70,7 @@ export async function createSystemMetadataRouter(options: { if (!pluginByInstance[feature.pluginId]) { pluginByInstance[feature.pluginId] = []; } - pluginByInstance[feature.pluginId].push(instance.url); + pluginByInstance[feature.pluginId].push(instance); } } } diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index 2262c5a3f1..be5cb882fc 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -40,5 +40,4 @@ export const systemMetadataServiceRef = createServiceRef< export type { BackstageInstance, SystemMetadataService, - Target, } from './services/definitions/SystemMetadataService'; diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index 58ab02b000..20ce759679 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -14,14 +14,12 @@ * limitations under the License. */ -/** @alpha */ -export type Target = string | { internal: string; external: string }; - /** * @alpha */ export interface BackstageInstance { - url: Target; + internalUrl: string; + externalUrl: string; } /** diff --git a/packages/backend/app-config.split.yaml b/packages/backend/app-config.split.yaml index d1a7cf76f1..0eadc9f091 100644 --- a/packages/backend/app-config.split.yaml +++ b/packages/backend/app-config.split.yaml @@ -6,4 +6,6 @@ discovery: plugins: [catalog] instances: - baseUrl: http://localhost:7007 - - baseUrl: http://localhost:7008 + - baseUrl: + internal: http://localhost:7008 + external: http://127.0.0.1:7008 From 34f0025677b1502dee1f4618a723b2807b1a8fd9 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Fri, 17 Jan 2025 18:31:05 -0500 Subject: [PATCH 13/42] add to config Signed-off-by: aramissennyeydd --- packages/backend-defaults/config.d.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/backend-defaults/config.d.ts b/packages/backend-defaults/config.d.ts index f0632a37bb..d578a4c510 100644 --- a/packages/backend-defaults/config.d.ts +++ b/packages/backend-defaults/config.d.ts @@ -1249,5 +1249,15 @@ export interface Config { */ plugins: string[]; }>; + + /** + * A list of deployed Backstage instances that can be crawled for discovery. + */ + instances: Array<{ + /** + * The base URL of the instance. All /.backstage/ routes should be accessible. + */ + baseUrl: string | { internal: string; external: string }; + }>; }; } From 073b6ec37d56889abaa1fe83d6ac86ed4a03d38c Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 28 Jan 2025 20:14:15 -0500 Subject: [PATCH 14/42] fix test cases Signed-off-by: aramissennyeydd --- .../src/wiring/BackendInitializer.test.ts | 12 +++++++++--- .../src/manager/plugin-manager.test.ts | 7 ++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts index 1c0bf5a0ef..c954fc4f8f 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts @@ -33,6 +33,9 @@ const baseFactories = [ mockServices.lifecycle.factory(), mockServices.rootLogger.factory(), mockServices.logger.factory(), + mockServices.rootConfig.factory(), + mockServices.rootHttpRouter.mock().factory, + mockServices.rootHealth.factory(), ]; function mkNoopFactory(ref: ServiceRef<{}, 'plugin'>) { @@ -808,7 +811,7 @@ describe('BackendInitializer', () => { }); it('should forward errors when modules fail to start', async () => { - const init = new BackendInitializer([]); + const init = new BackendInitializer(baseFactories); init.add(testPlugin); init.add( createBackendModule({ @@ -830,7 +833,7 @@ describe('BackendInitializer', () => { }); it('should reject duplicate plugins', async () => { - const init = new BackendInitializer([]); + const init = new BackendInitializer(baseFactories); init.add( createBackendPlugin({ pluginId: 'test', @@ -859,7 +862,7 @@ describe('BackendInitializer', () => { }); it('should reject duplicate modules', async () => { - const init = new BackendInitializer([]); + const init = new BackendInitializer(baseFactories); init.add(testPlugin); init.add( createBackendModule({ @@ -896,6 +899,9 @@ describe('BackendInitializer', () => { const init = new BackendInitializer([ mockServices.rootLifecycle.factory(), mockServices.rootLogger.factory(), + mockServices.rootHttpRouter.mock().factory, + mockServices.rootHealth.factory(), + mockServices.rootConfig.factory(), ]); init.add(testPlugin); init.add( diff --git a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts index 8d8fd13151..394762d6e5 100644 --- a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts +++ b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts @@ -39,7 +39,10 @@ import { ConfigSources } from '@backstage/config-loader'; import { Logs, MockedLogger, LogContent } from '../__testUtils__/testUtils'; import { PluginScanner } from '../scanner/plugin-scanner'; import { findPaths } from '@backstage/cli-common'; -import { createMockDirectory } from '@backstage/backend-test-utils'; +import { + createMockDirectory, + mockServices, +} from '@backstage/backend-test-utils'; import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle'; import { BackstagePackageJson, PackageRole } from '@backstage/cli-node'; @@ -997,6 +1000,8 @@ describe('backend-dynamic-feature-service', () => { const backend = createSpecializedBackend({ defaultServiceFactories: [ + mockServices.rootHealth.factory(), + mockServices.rootHttpRouter.mock().factory, rootLifecycleServiceFactory, createServiceFactory({ service: coreServices.rootConfig, From a651e04a4e8e7cd3c228d09007d4406a4ed4b500 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 28 Jan 2025 20:42:57 -0500 Subject: [PATCH 15/42] add test case Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 5 +- .../SystemMetadataService.test.ts | 139 ++++++++++++++++++ yarn.lock | 1 + 3 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index bae8dbf04f..042b9497b9 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -21,7 +21,6 @@ "exports": { ".": "./src/index.ts", "./auditor": "./src/entrypoints/auditor/index.ts", - "./alpha": "./src/entrypoints/alpha.ts", "./auth": "./src/entrypoints/auth/index.ts", "./cache": "./src/entrypoints/cache/index.ts", "./database": "./src/entrypoints/database/index.ts", @@ -50,9 +49,6 @@ "auditor": [ "src/entrypoints/auditor/index.ts" ], - "alpha": [ - "src/entrypoints/alpha.ts" - ], "auth": [ "src/entrypoints/auth/index.ts" ], @@ -218,6 +214,7 @@ "@types/yauzl": "^2.10.0", "aws-sdk-client-mock": "^4.0.0", "better-sqlite3": "^12.0.0", + "get-port": "^5.1.1", "http-errors": "^2.0.0", "msw": "^1.0.0", "node-mocks-http": "^1.0.0", diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts new file mode 100644 index 0000000000..93b0d2dfb5 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts @@ -0,0 +1,139 @@ +/* + * Copyright 2025 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 { createSpecializedBackend } from '@backstage/backend-app-api'; +import { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; +import { mockServices } from '@backstage/backend-test-utils'; +import getPort from 'get-port'; +import { createBackendPlugin } from '@backstage/backend-plugin-api'; + +const baseFactories = [ + mockServices.rootHealth.factory(), + mockServices.rootLogger.factory(), + mockServices.rootLifecycle.factory(), + mockServices.rootHttpRouter.factory(), + mockServices.lifecycle.factory(), + mockServices.logger.factory(), +]; + +describe('SystemMetadataService', () => { + it('should list plugins across instances', async () => { + const instance1HttpPort = await getPort(); + const instance2HttpPort = await getPort(); + const instance1 = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port: instance1HttpPort, + }, + }, + discovery: { + instances: [ + { + baseUrl: `http://localhost:${instance1HttpPort}`, + }, + { + baseUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }, + }, + }), + ], + }); + + const instance2 = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port: instance2HttpPort, + }, + }, + discovery: { + instances: [ + { + baseUrl: `http://localhost:${instance1HttpPort}`, + }, + { + baseUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }, + }, + }), + ], + }); + + instance1.add( + createBackendPlugin({ + pluginId: 'test', + register(reg) { + reg.registerInit({ + deps: {}, + async init() { + // do nothing + }, + }); + }, + }), + ); + + instance2.add( + createBackendPlugin({ + pluginId: 'test-other', + register(reg) { + reg.registerInit({ + deps: {}, + async init() { + // do nothing + }, + }); + }, + }), + ); + + await instance1.start(); + await instance2.start(); + + const installedFeatures = await fetch( + `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/features/installed`, + ); + + expect(installedFeatures.status).toBe(200); + + await expect(installedFeatures.json()).resolves.toMatchObject({ + test: [ + { + externalUrl: `http://localhost:${instance1HttpPort}`, + internalUrl: `http://localhost:${instance1HttpPort}`, + }, + ], + 'test-other': [ + { + externalUrl: `http://localhost:${instance2HttpPort}`, + internalUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }); + }); +}); diff --git a/yarn.lock b/yarn.lock index ac53d6c016..eec211526d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2915,6 +2915,7 @@ __metadata: express-promise-router: "npm:^4.1.0" express-rate-limit: "npm:^7.5.0" fs-extra: "npm:^11.2.0" + get-port: "npm:^5.1.1" git-url-parse: "npm:^15.0.0" helmet: "npm:^6.0.0" http-errors: "npm:^2.0.0" From 8154b1d111f2d5b8bb67651f655b917e98634137 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 13 May 2025 17:42:44 -0400 Subject: [PATCH 16/42] clean up PR following review Signed-off-by: aramissennyeydd --- .../lib/DefaultSystemMetadataService.ts | 6 ++- .../lib/createSystemMetadataRouter.ts | 14 +++-- .../systemMetadataServiceFactory.ts | 3 +- .../backend-plugin-api/src/alpha/index.ts | 11 ---- .../definitions/SystemMetadataService.ts | 2 +- .../src/services/definitions/coreServices.ts | 11 ++++ packages/backend-split/.eslintrc.js | 1 - packages/backend-split/README.md | 8 --- packages/backend-split/app-config.split.yaml | 14 ----- packages/backend-split/catalog-info.yaml | 9 ---- packages/backend-split/package.json | 53 ------------------- .../src/experimental/features.http | 7 --- packages/backend-split/src/index.ts | 35 ------------ packages/backend-split/src/instrumentation.js | 34 ------------ packages/backend/app-config.split.yaml | 11 ---- packages/backend/package.json | 1 - yarn.lock | 31 ----------- 17 files changed, 26 insertions(+), 225 deletions(-) delete mode 100644 packages/backend-split/.eslintrc.js delete mode 100644 packages/backend-split/README.md delete mode 100644 packages/backend-split/app-config.split.yaml delete mode 100644 packages/backend-split/catalog-info.yaml delete mode 100644 packages/backend-split/package.json delete mode 100644 packages/backend-split/src/experimental/features.http delete mode 100644 packages/backend-split/src/index.ts delete mode 100644 packages/backend-split/src/instrumentation.js delete mode 100644 packages/backend/app-config.split.yaml diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 0d1583a113..41fd4aa0a2 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -73,7 +73,9 @@ export class DefaultSystemMetadataService implements SystemMetadataService { return new DefaultSystemMetadataService(pluginEnv); } - async listInstances() { - return this.instances; + async introspect() { + return { + instances: this.instances, + }; } } diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts index 66e1759213..6da27958c0 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts @@ -26,20 +26,24 @@ export async function createSystemMetadataRouter(options: { systemMetadata: SystemMetadataService; }) { const { logger, systemMetadata } = options; + + async function getInstances() { + const instances = await systemMetadata.introspect(); + return instances.instances; + } + logger.info( - `Instances in this system: ${JSON.stringify( - await systemMetadata.listInstances(), - )}`, + `Instances in this system: ${JSON.stringify(await getInstances())}`, ); const router = Router(); router.get('/instances', async (_, res) => { - res.json(await systemMetadata.listInstances()); + res.json(await getInstances()); }); router.get('/features/installed', async (_, res) => { - const instances = await systemMetadata.listInstances(); + const instances = await getInstances(); const featurePromises = await Promise.allSettled( instances.map(async instance => { const response = await fetch( diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts index 2eaec11caa..929ea569d1 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts @@ -19,7 +19,6 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; -import { systemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; /** @@ -28,7 +27,7 @@ import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; * @alpha */ export const systemMetadataServiceFactory = createServiceFactory({ - service: systemMetadataServiceRef, + service: coreServices.systemMetadataServiceRef, deps: { logger: coreServices.rootLogger, config: coreServices.rootConfig, diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index be5cb882fc..815b0ac8f9 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -26,17 +26,6 @@ export { actionsRegistryServiceRef, actionsServiceRef } from './refs'; import { createServiceRef } from '@backstage/backend-plugin-api'; -/** - * EXPERIMENTAL: System metadata service. - * @alpha - */ -export const systemMetadataServiceRef = createServiceRef< - import('./services/definitions/SystemMetadataService').SystemMetadataService ->({ - id: 'core.systemMetadata', - scope: 'root', -}); - export type { BackstageInstance, SystemMetadataService, diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index 20ce759679..ebbb07b25a 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -26,5 +26,5 @@ export interface BackstageInstance { * @alpha */ export interface SystemMetadataService { - listInstances(): Promise; + introspect(): Promise<{ instances: BackstageInstance[] }>; } diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index 887b05ee4e..ab3c4406d4 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -289,4 +289,15 @@ export namespace coreServices { id: 'core.rootInstanceMetadata', scope: 'root', }); + + /** + * Read information about your current Backstage deployment. + * @alpha + */ + export const systemMetadataServiceRef = createServiceRef< + import('./SystemMetadataService').SystemMetadataService + >({ + id: 'core.systemMetadata', + scope: 'root', + }); } diff --git a/packages/backend-split/.eslintrc.js b/packages/backend-split/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/packages/backend-split/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/packages/backend-split/README.md b/packages/backend-split/README.md deleted file mode 100644 index d5d2abe027..0000000000 --- a/packages/backend-split/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# example-backend - -This package is an EXAMPLE of a Backstage backend using the [new backend system](https://backstage.io/docs/backend-system/). - -The main purpose of this package is to provide a test bed for Backstage split deployment work. You can deploy both this package and the main `packages/backend` together by running the `start:split` command in both packages. This will run the following backends: - -1. `packages/backend` running on `:7007` with the default plugins installed. -2. `packages/backend-split` running on `:7008` with a subset of plugins installed for testing. diff --git a/packages/backend-split/app-config.split.yaml b/packages/backend-split/app-config.split.yaml deleted file mode 100644 index 80d77aaa3d..0000000000 --- a/packages/backend-split/app-config.split.yaml +++ /dev/null @@ -1,14 +0,0 @@ -backend: - baseUrl: http://localhost:7008 - listen: - port: 7008 - -discovery: - endpoints: - - target: http://localhost:7007/api/{{pluginId}} - plugins: [proxy] - - target: http://localhost:7008/api/{{pluginId}} - plugins: [catalog] - instances: - - baseUrl: http://localhost:7007 - - baseUrl: http://localhost:7008 diff --git a/packages/backend-split/catalog-info.yaml b/packages/backend-split/catalog-info.yaml deleted file mode 100644 index 8c81e9d5e9..0000000000 --- a/packages/backend-split/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: example-backend-split - title: example-backend-split -spec: - lifecycle: experimental - type: backstage-backend - owner: maintainers diff --git a/packages/backend-split/package.json b/packages/backend-split/package.json deleted file mode 100644 index a517a8b49e..0000000000 --- a/packages/backend-split/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "example-backend-split", - "version": "0.0.1", - "backstage": { - "role": "backend" - }, - "private": true, - "keywords": [ - "backstage" - ], - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "packages/backend-split" - }, - "license": "Apache-2.0", - "main": "dist/index.cjs.js", - "types": "src/index.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "start": "backstage-cli package start --require ./src/instrumentation.js", - "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/backend-defaults": "workspace:^", - "@backstage/backend-plugin-api": "workspace:^", - "@backstage/catalog-model": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^", - "@backstage/plugin-catalog-backend-module-openapi": "workspace:^", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", - "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", - "@backstage/plugin-permission-backend": "workspace:^", - "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^", - "@backstage/plugin-permission-common": "workspace:^", - "@backstage/plugin-permission-node": "workspace:^", - "@opentelemetry/auto-instrumentations-node": "^0.54.0", - "@opentelemetry/exporter-prometheus": "^0.54.0", - "@opentelemetry/sdk-node": "^0.54.0", - "example-app": "link:../app", - "express-promise-router": "^4.1.0" - }, - "devDependencies": { - "@backstage/cli": "workspace:^" - } -} diff --git a/packages/backend-split/src/experimental/features.http b/packages/backend-split/src/experimental/features.http deleted file mode 100644 index bb9287f61c..0000000000 --- a/packages/backend-split/src/experimental/features.http +++ /dev/null @@ -1,7 +0,0 @@ -// Test requests for the split backend to test the system metadata service :) -// The 2 below requests should return the same data. -GET http://localhost:7007/.backstage/systemMetadata/v1/features/installed - -### - -GET http://localhost:7008/.backstage/systemMetadata/v1/features/installed \ No newline at end of file diff --git a/packages/backend-split/src/index.ts b/packages/backend-split/src/index.ts deleted file mode 100644 index 2238713ffe..0000000000 --- a/packages/backend-split/src/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2022 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 { createBackend } from '@backstage/backend-defaults'; -import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha'; - -const backend = createBackend(); - -backend.add(import('@backstage/plugin-catalog-backend-module-unprocessed')); -backend.add( - import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), -); -backend.add(import('@backstage/plugin-catalog-backend')); - -backend.add( - import('@backstage/plugin-permission-backend-module-allow-all-policy'), -); -backend.add(import('@backstage/plugin-permission-backend')); - -backend.add(systemMetadataServiceFactory); - -backend.start(); diff --git a/packages/backend-split/src/instrumentation.js b/packages/backend-split/src/instrumentation.js deleted file mode 100644 index e3725632c1..0000000000 --- a/packages/backend-split/src/instrumentation.js +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2024 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. - */ - -const { NodeSDK } = require('@opentelemetry/sdk-node'); -const { - getNodeAutoInstrumentations, -} = require('@opentelemetry/auto-instrumentations-node'); -const { PrometheusExporter } = require('@opentelemetry/exporter-prometheus'); - -// Expose opentelemetry metrics using a Prometheus exporter on -// http://localhost:9464/metrics. See packages/backend/prometheus.yml for -// more information on how to scrape it. -const prometheus = new PrometheusExporter(); - -const sdk = new NodeSDK({ - // traceExporter: ..., - metricReader: prometheus, - instrumentations: [getNodeAutoInstrumentations()], -}); - -sdk.start(); diff --git a/packages/backend/app-config.split.yaml b/packages/backend/app-config.split.yaml deleted file mode 100644 index 0eadc9f091..0000000000 --- a/packages/backend/app-config.split.yaml +++ /dev/null @@ -1,11 +0,0 @@ -discovery: - endpoints: - - target: http://localhost:7007/api/{{pluginId}} - plugins: [proxy] - - target: http://localhost:7008/api/{{pluginId}} - plugins: [catalog] - instances: - - baseUrl: http://localhost:7007 - - baseUrl: - internal: http://localhost:7008 - external: http://127.0.0.1:7008 diff --git a/packages/backend/package.json b/packages/backend/package.json index 8fd42507dd..2af36b8077 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -27,7 +27,6 @@ "lint": "backstage-cli package lint", "start": "backstage-cli package start --require ./src/instrumentation.js", "start:prometheus": "docker run --mount type=bind,source=./prometheus.yml,destination=/etc/prometheus/prometheus.yml --publish published=9090,target=9090,protocol=tcp prom/prometheus", - "start:split": "backstage-cli package start --require ./src/instrumentation.js --config ../../app-config.yaml --config app-config.split.yaml", "test": "backstage-cli package test" }, "dependencies": { diff --git a/yarn.lock b/yarn.lock index eec211526d..98c89bb0ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30233,12 +30233,6 @@ __metadata: languageName: node linkType: soft -"example-app@link:../app::locator=example-backend-split%40workspace%3Apackages%2Fbackend-split": - version: 0.0.0-use.local - resolution: "example-app@link:../app::locator=example-backend-split%40workspace%3Apackages%2Fbackend-split" - languageName: node - linkType: soft - "example-app@workspace:packages/app": version: 0.0.0-use.local resolution: "example-app@workspace:packages/app" @@ -30307,31 +30301,6 @@ __metadata: languageName: unknown linkType: soft -"example-backend-split@workspace:packages/backend-split": - version: 0.0.0-use.local - resolution: "example-backend-split@workspace:packages/backend-split" - dependencies: - "@backstage/backend-defaults": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" - "@backstage/plugin-catalog-backend-module-backstage-openapi": "workspace:^" - "@backstage/plugin-catalog-backend-module-openapi": "workspace:^" - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" - "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" - "@backstage/plugin-permission-backend": "workspace:^" - "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-node": "workspace:^" - "@opentelemetry/auto-instrumentations-node": "npm:^0.54.0" - "@opentelemetry/exporter-prometheus": "npm:^0.54.0" - "@opentelemetry/sdk-node": "npm:^0.54.0" - example-app: "link:../app" - express-promise-router: "npm:^4.1.0" - languageName: unknown - linkType: soft - "example-backend@workspace:packages/backend": version: 0.0.0-use.local resolution: "example-backend@workspace:packages/backend" From d9e63b6450daf8e943528dba49643def099ba932 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 13 May 2025 17:46:39 -0400 Subject: [PATCH 17/42] fix api reports Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-alpha.api.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 7e7cccc007..52a9947afb 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -32,7 +32,9 @@ export class DefaultSystemMetadataService implements SystemMetadataService { config: RootConfigService; }): DefaultSystemMetadataService; // (undocumented) - listInstances(): Promise; + introspect(): Promise<{ + instances: BackstageInstance[]; + }>; } // @alpha From 3049109f4f74c5ea8ecefa845e7893c0922c54b2 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 13 May 2025 17:54:55 -0400 Subject: [PATCH 18/42] fix api reports for realz Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 4 ++++ .../backend-defaults/src/entrypoints/alpha.ts | 16 -------------- .../lib/DefaultSystemMetadataService.ts | 2 +- .../lib/createSystemMetadataRouter.ts | 6 ++--- packages/backend-plugin-api/report.api.md | 22 +++++++++++++++++++ .../definitions/SystemMetadataService.ts | 4 ++-- .../src/services/definitions/index.ts | 4 ++++ 7 files changed, 35 insertions(+), 23 deletions(-) delete mode 100644 packages/backend-defaults/src/entrypoints/alpha.ts diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 042b9497b9..3e9c5f57cb 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -37,6 +37,7 @@ "./rootLifecycle": "./src/entrypoints/rootLifecycle/index.ts", "./rootLogger": "./src/entrypoints/rootLogger/index.ts", "./scheduler": "./src/entrypoints/scheduler/index.ts", + "./systemMetadata": "./src/entrypoints/systemMetadata/index.ts", "./urlReader": "./src/entrypoints/urlReader/index.ts", "./userInfo": "./src/entrypoints/userInfo/index.ts", "./alpha": "./src/alpha/index.ts", @@ -97,6 +98,9 @@ "scheduler": [ "src/entrypoints/scheduler/index.ts" ], + "systemMetadata": [ + "src/entrypoints/systemMetadata/index.ts" + ], "urlReader": [ "src/entrypoints/urlReader/index.ts" ], diff --git a/packages/backend-defaults/src/entrypoints/alpha.ts b/packages/backend-defaults/src/entrypoints/alpha.ts deleted file mode 100644 index a26522c228..0000000000 --- a/packages/backend-defaults/src/entrypoints/alpha.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2024 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. - */ -export * from './systemMetadata'; diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 41fd4aa0a2..5277e05cae 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -21,7 +21,7 @@ import { import { BackstageInstance, SystemMetadataService, -} from '@backstage/backend-plugin-api/alpha'; +} from '@backstage/backend-plugin-api'; import z from 'zod'; const targetObjectSchema = z.object({ diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts index 6da27958c0..fb7add8ed6 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts @@ -15,10 +15,8 @@ */ import { LoggerService } from '@backstage/backend-plugin-api'; -import { - BackendFeatureMeta, - SystemMetadataService, -} from '@backstage/backend-plugin-api/alpha'; +import { BackendFeatureMeta } from '@backstage/backend-plugin-api/alpha'; +import type { SystemMetadataService } from '@backstage/backend-plugin-api'; import Router from 'express-promise-router'; export async function createSystemMetadataRouter(options: { diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index c46ed254c8..17e52caf63 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -137,6 +137,14 @@ export type BackstageCredentials = { principal: TPrincipal; }; +// @public (undocumented) +export interface BackstageInstance { + // (undocumented) + externalUrl: string; + // (undocumented) + internalUrl: string; +} + // @public export type BackstageNonePrincipal = { type: 'none'; @@ -237,6 +245,12 @@ export namespace coreServices { 'root', 'singleton' >; + const // @alpha + systemMetadataServiceRef: ServiceRef< + SystemMetadataService, + 'root', + 'singleton' + >; } // @public @@ -744,6 +758,14 @@ export interface ServiceRefOptions< scope?: TScope; } +// @public (undocumented) +export interface SystemMetadataService { + // (undocumented) + introspect(): Promise<{ + instances: BackstageInstance[]; + }>; +} + // @public export interface UrlReaderService { readTree( diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index ebbb07b25a..83066225fe 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -15,7 +15,7 @@ */ /** - * @alpha + * @public */ export interface BackstageInstance { internalUrl: string; @@ -23,7 +23,7 @@ export interface BackstageInstance { } /** - * @alpha + * @public */ export interface SystemMetadataService { introspect(): Promise<{ instances: BackstageInstance[] }>; diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 6bcee4b043..4e01553a76 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -72,6 +72,10 @@ export type { SchedulerServiceTaskScheduleDefinition, SchedulerServiceTaskScheduleDefinitionConfig, } from './SchedulerService'; +export type { + BackstageInstance, + SystemMetadataService, +} from './SystemMetadataService'; export type { UrlReaderService, UrlReaderServiceReadTreeOptions, From 59c9103181bdfbc6a0109172b12762107a4f5dde Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 13 May 2025 18:12:49 -0400 Subject: [PATCH 19/42] fix CI Signed-off-by: aramissennyeydd --- packages/backend-app-api/package.json | 3 ++- .../{report-alpha.api.md => report-systemMetadata.api.md} | 2 +- yarn.lock | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) rename packages/backend-defaults/{report-alpha.api.md => report-systemMetadata.api.md} (99%) diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index ade61d87b1..9bc6abab79 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -48,7 +48,8 @@ "dependencies": { "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^" + "@backstage/errors": "workspace:^", + "express-promise-router": "^4.1.0" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-systemMetadata.api.md similarity index 99% rename from packages/backend-defaults/report-alpha.api.md rename to packages/backend-defaults/report-systemMetadata.api.md index 52a9947afb..c9231900dd 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-systemMetadata.api.md @@ -21,7 +21,7 @@ import { BackstageInstance } from '@backstage/backend-plugin-api/alpha'; import { LoggerService } from '@backstage/backend-plugin-api'; import { RootConfigService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; -import { SystemMetadataService } from '@backstage/backend-plugin-api/alpha'; +import { SystemMetadataService } from '@backstage/backend-plugin-api'; // @alpha (undocumented) export class DefaultSystemMetadataService implements SystemMetadataService { diff --git a/yarn.lock b/yarn.lock index 98c89bb0ae..d359ca5cbb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2854,6 +2854,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" + express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft From 3a49851ae37d1a931dca08e2dba24e37afcb2001 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 9 Jun 2025 17:53:30 -0400 Subject: [PATCH 20/42] fix 1 test case Signed-off-by: aramissennyeydd --- .../systemMetadataServiceFactory.ts | 2 +- .../src/services/definitions/coreServices.ts | 2 +- .../src/services/mockServices.ts | 16 ++++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts index 929ea569d1..bc417df898 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts @@ -27,7 +27,7 @@ import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; * @alpha */ export const systemMetadataServiceFactory = createServiceFactory({ - service: coreServices.systemMetadataServiceRef, + service: coreServices.systemMetadata, deps: { logger: coreServices.rootLogger, config: coreServices.rootConfig, diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index ab3c4406d4..d14cc9264d 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -294,7 +294,7 @@ export namespace coreServices { * Read information about your current Backstage deployment. * @alpha */ - export const systemMetadataServiceRef = createServiceRef< + export const systemMetadata = createServiceRef< import('./SystemMetadataService').SystemMetadataService >({ id: 'core.systemMetadata', diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 9e941db3bb..6047f8ea1c 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -27,6 +27,7 @@ import { rootHealthServiceFactory } from '@backstage/backend-defaults/rootHealth import { rootHttpRouterServiceFactory } from '@backstage/backend-defaults/rootHttpRouter'; import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle'; import { urlReaderServiceFactory } from '@backstage/backend-defaults/urlReader'; +import { systemMetadataServiceFactory } from '@backstage/backend-defaults/systemMetadata'; import { AuthService, BackstageCredentials, @@ -573,4 +574,19 @@ export namespace mockServices { rootInstanceMetadata, ); } + export namespace systemMetadata { + /** + * Creates a functional mock factory for the + * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. + */ + export const factory = () => systemMetadataServiceFactory; + /** + * Creates a mock of the + * {@link @backstage/backend-events-node#systemMetadata}, optionally + * with some given method implementations. + */ + export const mock = simpleMock(coreServices.systemMetadata, () => ({ + introspect: jest.fn(), + })); + } } From c7d652c5f25567675f457268e5ed8326b25f01e3 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 10 Jun 2025 10:53:37 -0400 Subject: [PATCH 21/42] fix API report Signed-off-by: aramissennyeydd --- packages/backend-plugin-api/report.api.md | 1 + .../src/services/definitions/coreServices.ts | 2 +- packages/backend-test-utils/report.api.md | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index 17e52caf63..5bb80fd6a7 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -251,6 +251,7 @@ export namespace coreServices { 'root', 'singleton' >; + const systemMetadata: ServiceRef; } // @public diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index d14cc9264d..0f38c0093c 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -292,7 +292,7 @@ export namespace coreServices { /** * Read information about your current Backstage deployment. - * @alpha + * @public */ export const systemMetadata = createServiceRef< import('./SystemMetadataService').SystemMetadataService diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index da5002275b..6892086505 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -41,6 +41,7 @@ import { RootLoggerService } from '@backstage/backend-plugin-api'; import { SchedulerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceRef } from '@backstage/backend-plugin-api'; +import { SystemMetadataService } from '@backstage/backend-plugin-api'; import { UrlReaderService } from '@backstage/backend-plugin-api'; import { UserInfoService } from '@backstage/backend-plugin-api'; @@ -397,6 +398,17 @@ export namespace mockServices { ) => ServiceMock; } // (undocumented) + export namespace systemMetadata { + const factory: () => ServiceFactory< + SystemMetadataService, + 'root', + 'singleton' + >; + const mock: ( + partialImpl?: Partial | undefined, + ) => ServiceMock; + } + // (undocumented) export namespace urlReader { const // (undocumented) factory: () => ServiceFactory; From 59ba9274df5a9a0ca053feeed69082a153d5d07d Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 1 Jul 2025 11:38:53 -0400 Subject: [PATCH 22/42] fix api reports Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-alpha.api.md | 25 +++++++++++++++++++ .../report-systemMetadata.api.md | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 packages/backend-defaults/report-alpha.api.md diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md new file mode 100644 index 0000000000..58277b5e1e --- /dev/null +++ b/packages/backend-defaults/report-alpha.api.md @@ -0,0 +1,25 @@ +## API Report File for "@backstage/backend-defaults" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha'; +import { ActionsService } from '@backstage/backend-plugin-api/alpha'; +import { ServiceFactory } from '@backstage/backend-plugin-api'; + +// @public (undocumented) +export const actionsRegistryServiceFactory: ServiceFactory< + ActionsRegistryService, + 'plugin', + 'singleton' +>; + +// @public (undocumented) +export const actionsServiceFactory: ServiceFactory< + ActionsService, + 'plugin', + 'singleton' +>; + +// (No @packageDocumentation comment for this package) +``` diff --git a/packages/backend-defaults/report-systemMetadata.api.md b/packages/backend-defaults/report-systemMetadata.api.md index c9231900dd..bd28437f2e 100644 --- a/packages/backend-defaults/report-systemMetadata.api.md +++ b/packages/backend-defaults/report-systemMetadata.api.md @@ -17,7 +17,7 @@ export const actionsRegistryServiceFactory: ServiceFactory< // @public (undocumented) export const actionsServiceFactory: ServiceFactory< ActionsService, -import { BackstageInstance } from '@backstage/backend-plugin-api/alpha'; +import { BackstageInstance } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { RootConfigService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; From a0d9373c3f04426a8727b00f69dfbc4df5aeaed6 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 19 Aug 2025 17:09:54 -0700 Subject: [PATCH 23/42] update system metadata service to be observable-first Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 1 + .../report-systemMetadata.api.md | 5 +- .../SystemMetadataService.test.ts | 244 +++++++++++------- .../lib/DefaultSystemMetadataService.ts | 120 ++++++++- .../lib/createSystemMetadataRouter.ts | 22 +- packages/backend-plugin-api/report.api.md | 5 +- .../definitions/SystemMetadataService.ts | 4 +- packages/backend-test-utils/package.json | 1 + packages/backend-test-utils/report.api.md | 10 +- .../src/services/MockObservable.ts | 25 ++ .../MockSystemMetadataService.test.ts | 34 +++ .../src/services/MockSystemMetadataService.ts | 44 ++++ .../src/services/mockServices.ts | 23 +- .../src/services/simpleMock.ts | 1 + yarn.lock | 2 + 15 files changed, 420 insertions(+), 121 deletions(-) create mode 100644 packages/backend-test-utils/src/services/MockObservable.ts create mode 100644 packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts create mode 100644 packages/backend-test-utils/src/services/MockSystemMetadataService.ts diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 3e9c5f57cb..5586289e5f 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -198,6 +198,7 @@ "winston-transport": "^4.5.0", "yauzl": "^3.0.0", "yn": "^4.0.0", + "zen-observable": "^0.10.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.20.4" }, diff --git a/packages/backend-defaults/report-systemMetadata.api.md b/packages/backend-defaults/report-systemMetadata.api.md index bd28437f2e..6f0f106039 100644 --- a/packages/backend-defaults/report-systemMetadata.api.md +++ b/packages/backend-defaults/report-systemMetadata.api.md @@ -19,6 +19,7 @@ export const actionsServiceFactory: ServiceFactory< ActionsService, import { BackstageInstance } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; +import { Observable } from '@backstage/types'; import { RootConfigService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { SystemMetadataService } from '@backstage/backend-plugin-api'; @@ -32,9 +33,7 @@ export class DefaultSystemMetadataService implements SystemMetadataService { config: RootConfigService; }): DefaultSystemMetadataService; // (undocumented) - introspect(): Promise<{ - instances: BackstageInstance[]; - }>; + instances(): Observable; } // @alpha diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts index 93b0d2dfb5..6bb0ab6fdc 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { createSpecializedBackend } from '@backstage/backend-app-api'; +import { Backend, createSpecializedBackend } from '@backstage/backend-app-api'; import { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; import { mockServices } from '@backstage/backend-test-utils'; import getPort from 'get-port'; @@ -29,111 +29,171 @@ const baseFactories = [ ]; describe('SystemMetadataService', () => { - it('should list plugins across instances', async () => { - const instance1HttpPort = await getPort(); - const instance2HttpPort = await getPort(); - const instance1 = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - systemMetadataServiceFactory, - mockServices.rootConfig.factory({ - data: { - backend: { - listen: { - port: instance1HttpPort, - }, - }, - discovery: { - instances: [ - { - baseUrl: `http://localhost:${instance1HttpPort}`, - }, - { - baseUrl: `http://localhost:${instance2HttpPort}`, - }, - ], + describe('multiple backends testing', () => { + let instance1: Backend; + let instance2: Backend; + let instance1HttpPort: number; + let instance2HttpPort: number; + + const configFactory = (port: number) => + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port, }, }, - }), - ], + discovery: { + instances: [ + { + baseUrl: `http://localhost:${instance1HttpPort}`, + }, + { + baseUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }, + }, + }); + beforeEach(async () => { + instance1HttpPort = await getPort(); + instance2HttpPort = await getPort(); + // Setup code for multiple backend instances + instance1 = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + configFactory(instance1HttpPort), + ], + }); + + instance2 = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + configFactory(instance2HttpPort), + ], + }); }); - const instance2 = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - systemMetadataServiceFactory, - mockServices.rootConfig.factory({ - data: { - backend: { - listen: { - port: instance2HttpPort, + it('should list plugins across instances', async () => { + instance1.add( + createBackendPlugin({ + pluginId: 'test', + register(reg) { + reg.registerInit({ + deps: {}, + async init() { + // do nothing }, - }, - discovery: { - instances: [ - { - baseUrl: `http://localhost:${instance1HttpPort}`, - }, - { - baseUrl: `http://localhost:${instance2HttpPort}`, - }, - ], - }, + }); }, }), - ], + ); + + instance2.add( + createBackendPlugin({ + pluginId: 'test-other', + register(reg) { + reg.registerInit({ + deps: {}, + async init() { + // do nothing + }, + }); + }, + }), + ); + + await instance1.start(); + await instance2.start(); + + const instance1Response = await fetch( + `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/features/installed`, + ); + + expect(instance1Response.status).toBe(200); + await expect(instance1Response.json()).resolves.toMatchObject({ + test: [ + { + externalUrl: `http://localhost:${instance1HttpPort}`, + internalUrl: `http://localhost:${instance1HttpPort}`, + }, + ], + 'test-other': [ + { + externalUrl: `http://localhost:${instance2HttpPort}`, + internalUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }); + + const instance2Response = await fetch( + `http://localhost:${instance2HttpPort}/.backstage/systemMetadata/v1/features/installed`, + ); + + expect(instance2Response.status).toBe(200); + + await expect(instance2Response.json()).resolves.toMatchObject({ + test: [ + { + externalUrl: `http://localhost:${instance1HttpPort}`, + internalUrl: `http://localhost:${instance1HttpPort}`, + }, + ], + 'test-other': [ + { + externalUrl: `http://localhost:${instance2HttpPort}`, + internalUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }); }); - instance1.add( - createBackendPlugin({ - pluginId: 'test', - register(reg) { - reg.registerInit({ - deps: {}, - async init() { - // do nothing - }, - }); - }, - }), - ); + it('should list all known instances', async () => { + await instance1.start(); + await instance2.start(); - instance2.add( - createBackendPlugin({ - pluginId: 'test-other', - register(reg) { - reg.registerInit({ - deps: {}, - async init() { - // do nothing - }, - }); - }, - }), - ); + const instance1Response = await fetch( + `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/instances`, + ); - await instance1.start(); - await instance2.start(); + expect(instance1Response.status).toBe(200); + await expect(instance1Response.json()).resolves.toMatchObject({ + items: [ + { + externalUrl: `http://localhost:${instance1HttpPort}`, + internalUrl: `http://localhost:${instance1HttpPort}`, + }, + { + externalUrl: `http://localhost:${instance2HttpPort}`, + internalUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }); - const installedFeatures = await fetch( - `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/features/installed`, - ); + const instance2Response = await fetch( + `http://localhost:${instance2HttpPort}/.backstage/systemMetadata/v1/instances`, + ); - expect(installedFeatures.status).toBe(200); + expect(instance2Response.status).toBe(200); + await expect(instance2Response.json()).resolves.toMatchObject({ + items: [ + { + externalUrl: `http://localhost:${instance1HttpPort}`, + internalUrl: `http://localhost:${instance1HttpPort}`, + }, + { + externalUrl: `http://localhost:${instance2HttpPort}`, + internalUrl: `http://localhost:${instance2HttpPort}`, + }, + ], + }); + }); - await expect(installedFeatures.json()).resolves.toMatchObject({ - test: [ - { - externalUrl: `http://localhost:${instance1HttpPort}`, - internalUrl: `http://localhost:${instance1HttpPort}`, - }, - ], - 'test-other': [ - { - externalUrl: `http://localhost:${instance2HttpPort}`, - internalUrl: `http://localhost:${instance2HttpPort}`, - }, - ], + afterEach(async () => { + await instance1.stop(); + await instance2.stop(); }); }); }); diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts index 5277e05cae..0ce468e2be 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts @@ -22,18 +22,126 @@ import { BackstageInstance, SystemMetadataService, } from '@backstage/backend-plugin-api'; +import { Observable } from '@backstage/types'; import z from 'zod'; +import ObservableImpl from 'zen-observable'; const targetObjectSchema = z.object({ internal: z.string(), external: z.string(), }); +/** + * A basic implementation of ReactiveX behavior subjects. + * + * A subject is a convenient way to create an observable when you want + * to fan out a single value to all subscribers. + * + * The BehaviorSubject will emit the most recently emitted value or error + * whenever a new observer subscribes to the subject. + * + * See http://reactivex.io/documentation/subject.html + * + * FORKED FROM core-app-api - where should this live? + */ + +export class BehaviorSubject + implements Observable, ZenObservable.SubscriptionObserver +{ + private isClosed: boolean; + private currentValue: T; + private terminatingError: Error | undefined; + private readonly observable: Observable; + + constructor(value: T) { + this.isClosed = false; + this.currentValue = value; + this.terminatingError = undefined; + this.observable = new ObservableImpl(subscriber => { + if (this.isClosed) { + if (this.terminatingError) { + subscriber.error(this.terminatingError); + } else { + subscriber.complete(); + } + return () => {}; + } + + subscriber.next(this.currentValue); + + this.subscribers.add(subscriber); + return () => { + this.subscribers.delete(subscriber); + }; + }); + } + + private readonly subscribers = new Set< + ZenObservable.SubscriptionObserver + >(); + + [Symbol.observable]() { + return this; + } + + get closed() { + return this.isClosed; + } + + next(value: T) { + if (this.isClosed) { + throw new Error('BehaviorSubject is closed'); + } + this.currentValue = value; + this.subscribers.forEach(subscriber => subscriber.next(value)); + } + + error(error: Error) { + if (this.isClosed) { + throw new Error('BehaviorSubject is closed'); + } + this.isClosed = true; + this.terminatingError = error; + this.subscribers.forEach(subscriber => subscriber.error(error)); + } + + complete() { + if (this.isClosed) { + throw new Error('BehaviorSubject is closed'); + } + this.isClosed = true; + this.subscribers.forEach(subscriber => subscriber.complete()); + } + + subscribe(observer: ZenObservable.Observer): ZenObservable.Subscription; + subscribe( + onNext: (value: T) => void, + onError?: (error: any) => void, + onComplete?: () => void, + ): ZenObservable.Subscription; + subscribe( + onNext: ZenObservable.Observer | ((value: T) => void), + onError?: (error: any) => void, + onComplete?: () => void, + ): ZenObservable.Subscription { + const observer = + typeof onNext === 'function' + ? { + next: onNext, + error: onError, + complete: onComplete, + } + : onNext; + + return this.observable.subscribe(observer); + } +} + /** * @alpha */ export class DefaultSystemMetadataService implements SystemMetadataService { - private instances: BackstageInstance[]; + private instance$: BehaviorSubject; constructor( private options: { logger: LoggerService; config: RootConfigService }, ) { @@ -60,9 +168,9 @@ export class DefaultSystemMetadataService implements SystemMetadataService { } return instances; }; - this.instances = getInstances(); + this.instance$ = new BehaviorSubject(getInstances()); this.options.config.subscribe?.(() => { - this.instances = getInstances(); + this.instance$.next(getInstances()); }); } @@ -73,9 +181,7 @@ export class DefaultSystemMetadataService implements SystemMetadataService { return new DefaultSystemMetadataService(pluginEnv); } - async introspect() { - return { - instances: this.instances, - }; + instances(): Observable { + return this.instance$; } } diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts index fb7add8ed6..e24870f7d0 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts @@ -16,7 +16,10 @@ import { LoggerService } from '@backstage/backend-plugin-api'; import { BackendFeatureMeta } from '@backstage/backend-plugin-api/alpha'; -import type { SystemMetadataService } from '@backstage/backend-plugin-api'; +import type { + BackstageInstance, + SystemMetadataService, +} from '@backstage/backend-plugin-api'; import Router from 'express-promise-router'; export async function createSystemMetadataRouter(options: { @@ -25,23 +28,22 @@ export async function createSystemMetadataRouter(options: { }) { const { logger, systemMetadata } = options; - async function getInstances() { - const instances = await systemMetadata.introspect(); - return instances.instances; - } + let instances: BackstageInstance[] = []; + systemMetadata.instances().subscribe({ + next: value => { + instances = value; + }, + }); - logger.info( - `Instances in this system: ${JSON.stringify(await getInstances())}`, - ); + logger.info(`Instances in this system: ${JSON.stringify(instances)}`); const router = Router(); router.get('/instances', async (_, res) => { - res.json(await getInstances()); + res.json({ items: instances }); }); router.get('/features/installed', async (_, res) => { - const instances = await getInstances(); const featurePromises = await Promise.allSettled( instances.map(async instance => { const response = await fetch( diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index 5bb80fd6a7..abb20539db 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -14,6 +14,7 @@ import { isChildPath } from '@backstage/cli-common'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { Knex } from 'knex'; +import { Observable } from '@backstage/types'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAttributes } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; @@ -762,9 +763,7 @@ export interface ServiceRefOptions< // @public (undocumented) export interface SystemMetadataService { // (undocumented) - introspect(): Promise<{ - instances: BackstageInstance[]; - }>; + instances(): Observable; } // @public diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts index 83066225fe..36ab1ff0e9 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { Observable } from '@backstage/types'; + /** * @public */ @@ -26,5 +28,5 @@ export interface BackstageInstance { * @public */ export interface SystemMetadataService { - introspect(): Promise<{ instances: BackstageInstance[] }>; + instances(): Observable; } diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index cd4f68ead0..a771b9513f 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -79,6 +79,7 @@ "text-extensions": "^2.4.0", "uuid": "^11.0.0", "yn": "^4.0.0", + "zen-observable": "^0.10.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.20.4" }, diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index 6892086505..08e6979928 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -9,6 +9,7 @@ import { AuthService } from '@backstage/backend-plugin-api'; import { Backend } from '@backstage/backend-app-api'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { BackstageCredentials } from '@backstage/backend-plugin-api'; +import { BackstageInstance } from '@backstage/backend-plugin-api'; import { BackstageNonePrincipal } from '@backstage/backend-plugin-api'; import { BackstagePrincipalAccessRestrictions } from '@backstage/backend-plugin-api'; import { BackstageServicePrincipal } from '@backstage/backend-plugin-api'; @@ -397,12 +398,17 @@ export namespace mockServices { partialImpl?: Partial | undefined, ) => ServiceMock; } + export function systemMetadata(options: { + instances: BackstageInstance[]; + }): SystemMetadataService; // (undocumented) export namespace systemMetadata { - const factory: () => ServiceFactory< + const factory: (options: { + instances: BackstageInstance[]; + }) => ServiceFactory< SystemMetadataService, 'root', - 'singleton' + 'singleton' | 'multiton' >; const mock: ( partialImpl?: Partial | undefined, diff --git a/packages/backend-test-utils/src/services/MockObservable.ts b/packages/backend-test-utils/src/services/MockObservable.ts new file mode 100644 index 0000000000..765b6ccb53 --- /dev/null +++ b/packages/backend-test-utils/src/services/MockObservable.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2025 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 { Observable } from '@backstage/types'; +import ObservableImpl from 'zen-observable'; + +export function createMockObservable(value: T): Observable { + return new ObservableImpl(observer => { + observer.next(value); + observer.complete(); + }); +} diff --git a/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts b/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts new file mode 100644 index 0000000000..8f78ec7567 --- /dev/null +++ b/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2025 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 { BackstageInstance } from '@backstage/backend-plugin-api'; +import { MockSystemMetadataService } from './MockSystemMetadataService'; + +describe('MockSystemMetadataService', () => { + it('should return the passed in instances', () => { + expect.assertions(1); + const instances: BackstageInstance[] = [ + { internalUrl: 'localhost:7007', externalUrl: 'external.url' }, + { internalUrl: 'localhost:7008', externalUrl: 'other.external.url' }, + ]; + const service = MockSystemMetadataService.create({ instances }); + service.instances().subscribe({ + next: value => { + expect(value).toEqual(instances); + }, + }); + }); +}); diff --git a/packages/backend-test-utils/src/services/MockSystemMetadataService.ts b/packages/backend-test-utils/src/services/MockSystemMetadataService.ts new file mode 100644 index 0000000000..eb8b39daf1 --- /dev/null +++ b/packages/backend-test-utils/src/services/MockSystemMetadataService.ts @@ -0,0 +1,44 @@ +/* + * Copyright 2025 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 { + BackstageInstance, + SystemMetadataService, +} from '@backstage/backend-plugin-api'; +import { Observable } from '@backstage/types'; +import ObservableImpl from 'zen-observable'; + +/** + * @public + */ +export class MockSystemMetadataService implements SystemMetadataService { + #instances: BackstageInstance[]; + + constructor(instances: BackstageInstance[]) { + this.#instances = instances; + } + + public static create(options: { instances: BackstageInstance[] }) { + return new MockSystemMetadataService(options.instances); + } + + instances(): Observable { + return new ObservableImpl(subscriber => { + subscriber.next(this.#instances); + subscriber.complete(); + }); + } +} diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 6047f8ea1c..4f89d62971 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -27,10 +27,10 @@ import { rootHealthServiceFactory } from '@backstage/backend-defaults/rootHealth import { rootHttpRouterServiceFactory } from '@backstage/backend-defaults/rootHttpRouter'; import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle'; import { urlReaderServiceFactory } from '@backstage/backend-defaults/urlReader'; -import { systemMetadataServiceFactory } from '@backstage/backend-defaults/systemMetadata'; import { AuthService, BackstageCredentials, + BackstageInstance, BackstageUserInfo, DatabaseService, DiscoveryService, @@ -41,6 +41,7 @@ import { SchedulerService, ServiceFactory, ServiceRef, + SystemMetadataService, UserInfoService, coreServices, createServiceFactory, @@ -62,6 +63,8 @@ import { simpleMock } from './simpleMock'; import { MockSchedulerService } from './MockSchedulerService'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { ObservableConfigProxy } from '../../../config-loader/src/sources/ObservableConfigProxy'; +import { MockSystemMetadataService } from './MockSystemMetadataService'; +import { createMockObservable } from './MockObservable'; /** @internal */ function createLoggerMock() { @@ -574,19 +577,33 @@ export namespace mockServices { rootInstanceMetadata, ); } + /** + * Creates a functional mock implementation for the + * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. + */ + export function systemMetadata(options: { + instances: BackstageInstance[]; + }): SystemMetadataService { + return MockSystemMetadataService.create(options); + } export namespace systemMetadata { /** * Creates a functional mock factory for the * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. */ - export const factory = () => systemMetadataServiceFactory; + export const factory = simpleFactoryWithOptions( + coreServices.systemMetadata, + systemMetadata, + ); /** * Creates a mock of the * {@link @backstage/backend-events-node#systemMetadata}, optionally * with some given method implementations. */ export const mock = simpleMock(coreServices.systemMetadata, () => ({ - introspect: jest.fn(), + instances: jest + .fn() + .mockReturnValue(createMockObservable([])), })); } } diff --git a/packages/backend-test-utils/src/services/simpleMock.ts b/packages/backend-test-utils/src/services/simpleMock.ts index 484969f235..137c1cba66 100644 --- a/packages/backend-test-utils/src/services/simpleMock.ts +++ b/packages/backend-test-utils/src/services/simpleMock.ts @@ -39,6 +39,7 @@ export function simpleMock( const mock = mockFactory(); if (partialImpl) { for (const [key, impl] of Object.entries(partialImpl)) { + console.log(key, impl, mock); if (typeof impl === 'function') { (mock as any)[key].mockImplementation(impl); } else { diff --git a/yarn.lock b/yarn.lock index d359ca5cbb..1d7fcf655e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2951,6 +2951,7 @@ __metadata: winston-transport: "npm:^4.5.0" yauzl: "npm:^3.0.0" yn: "npm:^4.0.0" + zen-observable: "npm:^0.10.0" zod: "npm:^3.22.4" zod-to-json-schema: "npm:^3.20.4" peerDependencies: @@ -3103,6 +3104,7 @@ __metadata: text-extensions: "npm:^2.4.0" uuid: "npm:^11.0.0" yn: "npm:^4.0.0" + zen-observable: "npm:^0.10.0" zod: "npm:^3.22.4" zod-to-json-schema: "npm:^3.20.4" languageName: unknown From 979f9f66794c13b0fe7992e3ad89374e267dee8d Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 20 Aug 2025 10:55:21 -0700 Subject: [PATCH 24/42] fix tests Signed-off-by: aramissennyeydd --- .../SystemMetadataService.test.ts | 135 +++++++++++++++--- 1 file changed, 115 insertions(+), 20 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts index 6bb0ab6fdc..a273dc87ba 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts @@ -17,7 +17,11 @@ import { Backend, createSpecializedBackend } from '@backstage/backend-app-api'; import { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; import { mockServices } from '@backstage/backend-test-utils'; import getPort from 'get-port'; -import { createBackendPlugin } from '@backstage/backend-plugin-api'; +import { + coreServices, + createBackendPlugin, + createServiceFactory, +} from '@backstage/backend-plugin-api'; const baseFactories = [ mockServices.rootHealth.factory(), @@ -150,50 +154,141 @@ describe('SystemMetadataService', () => { }); }); + afterEach(async () => { + await instance1.stop(); + await instance2.stop(); + }); + }); + + describe('single backend test', () => { + let port: number; + let instance: Backend; + beforeEach(async () => { + port = await getPort(); + + instance = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port, + }, + }, + discovery: { + instances: [ + { + baseUrl: `http://localhost:${port}`, + }, + ], + }, + }, + }), + ], + }); + }); + it('should list all known instances', async () => { - await instance1.start(); - await instance2.start(); + await instance.start(); + + const instanceResponse = await fetch( + `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, + ); + + expect(instanceResponse.status).toBe(200); + await expect(instanceResponse.json()).resolves.toMatchObject({ + items: [ + { + externalUrl: `http://localhost:${port}`, + internalUrl: `http://localhost:${port}`, + }, + ], + }); + }); + + it('should react to config updates', async () => { + const config = mockServices.rootConfig({ + data: { + backend: { + listen: { + port, + }, + }, + discovery: { + instances: [ + { + baseUrl: `http://localhost:${port}`, + }, + { + baseUrl: `not-a-real-host`, + }, + ], + }, + }, + }); + const configFactory = createServiceFactory({ + service: coreServices.rootConfig, + deps: {}, + factory: () => config, + }); + instance = createSpecializedBackend({ + defaultServiceFactories: [ + ...baseFactories, + systemMetadataServiceFactory, + configFactory, + ], + }); + await instance.start(); const instance1Response = await fetch( - `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/instances`, + `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, ); expect(instance1Response.status).toBe(200); await expect(instance1Response.json()).resolves.toMatchObject({ items: [ { - externalUrl: `http://localhost:${instance1HttpPort}`, - internalUrl: `http://localhost:${instance1HttpPort}`, + externalUrl: `http://localhost:${port}`, + internalUrl: `http://localhost:${port}`, }, { - externalUrl: `http://localhost:${instance2HttpPort}`, - internalUrl: `http://localhost:${instance2HttpPort}`, + externalUrl: `not-a-real-host`, + internalUrl: `not-a-real-host`, }, ], }); - const instance2Response = await fetch( - `http://localhost:${instance2HttpPort}/.backstage/systemMetadata/v1/instances`, + config.update({ + data: { + discovery: { + instances: [ + { + baseUrl: `http://localhost:${port}`, + }, + ], + }, + }, + }); + + const responseAfterUpdate = await fetch( + `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, ); - expect(instance2Response.status).toBe(200); - await expect(instance2Response.json()).resolves.toMatchObject({ + expect(responseAfterUpdate.status).toBe(200); + await expect(responseAfterUpdate.json()).resolves.toMatchObject({ items: [ { - externalUrl: `http://localhost:${instance1HttpPort}`, - internalUrl: `http://localhost:${instance1HttpPort}`, - }, - { - externalUrl: `http://localhost:${instance2HttpPort}`, - internalUrl: `http://localhost:${instance2HttpPort}`, + externalUrl: `http://localhost:${port}`, + internalUrl: `http://localhost:${port}`, }, ], }); }); afterEach(async () => { - await instance1.stop(); - await instance2.stop(); + await instance.stop(); }); }); }); From e3508b0e67a16429fbf3ff7a73e400c67f638b0a Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Sun, 9 Nov 2025 18:46:03 -0500 Subject: [PATCH 25/42] update to just config reading-based Signed-off-by: aramissennyeydd --- packages/backend-app-api/package.json | 3 +- .../src/wiring/BackendInitializer.test.ts | 12 +- packages/backend-defaults/config.d.ts | 10 - packages/backend-defaults/package.json | 9 +- packages/backend-defaults/report-alpha.api.md | 8 + .../entrypoints/discovery/HostDiscovery.ts | 63 +++++- .../RootSystemMetadataService.test.ts} | 10 +- .../index.ts | 4 +- .../lib/DefaultRootSystemMetadataService.ts | 96 +++++++++ .../lib/createSystemMetadataRouter.ts | 39 ++++ .../rootSystemMetadataServiceFactory.ts} | 12 +- .../lib/DefaultSystemMetadataService.ts | 187 ------------------ .../lib/createSystemMetadataRouter.ts | 85 -------- ...ervice.ts => RootSystemMetadataService.ts} | 26 +-- .../src/services/definitions/coreServices.ts | 8 +- .../src/services/definitions/index.ts | 6 +- .../MockSystemMetadataService.test.ts | 34 ---- .../src/services/MockSystemMetadataService.ts | 44 ----- .../src/services/mockServices.ts | 26 +-- packages/backend/src/index.ts | 4 +- 20 files changed, 250 insertions(+), 436 deletions(-) rename packages/backend-defaults/src/entrypoints/{systemMetadata/SystemMetadataService.test.ts => rootSystemMetadata/RootSystemMetadataService.test.ts} (96%) rename packages/backend-defaults/src/entrypoints/{systemMetadata => rootSystemMetadata}/index.ts (77%) create mode 100644 packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts create mode 100644 packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts rename packages/backend-defaults/src/entrypoints/{systemMetadata/systemMetadataServiceFactory.ts => rootSystemMetadata/rootSystemMetadataServiceFactory.ts} (74%) delete mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts delete mode 100644 packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts rename packages/backend-plugin-api/src/services/definitions/{SystemMetadataService.ts => RootSystemMetadataService.ts} (58%) delete mode 100644 packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts delete mode 100644 packages/backend-test-utils/src/services/MockSystemMetadataService.ts diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 9bc6abab79..ade61d87b1 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -48,8 +48,7 @@ "dependencies": { "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", - "express-promise-router": "^4.1.0" + "@backstage/errors": "workspace:^" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts index c954fc4f8f..1c0bf5a0ef 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.test.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.test.ts @@ -33,9 +33,6 @@ const baseFactories = [ mockServices.lifecycle.factory(), mockServices.rootLogger.factory(), mockServices.logger.factory(), - mockServices.rootConfig.factory(), - mockServices.rootHttpRouter.mock().factory, - mockServices.rootHealth.factory(), ]; function mkNoopFactory(ref: ServiceRef<{}, 'plugin'>) { @@ -811,7 +808,7 @@ describe('BackendInitializer', () => { }); it('should forward errors when modules fail to start', async () => { - const init = new BackendInitializer(baseFactories); + const init = new BackendInitializer([]); init.add(testPlugin); init.add( createBackendModule({ @@ -833,7 +830,7 @@ describe('BackendInitializer', () => { }); it('should reject duplicate plugins', async () => { - const init = new BackendInitializer(baseFactories); + const init = new BackendInitializer([]); init.add( createBackendPlugin({ pluginId: 'test', @@ -862,7 +859,7 @@ describe('BackendInitializer', () => { }); it('should reject duplicate modules', async () => { - const init = new BackendInitializer(baseFactories); + const init = new BackendInitializer([]); init.add(testPlugin); init.add( createBackendModule({ @@ -899,9 +896,6 @@ describe('BackendInitializer', () => { const init = new BackendInitializer([ mockServices.rootLifecycle.factory(), mockServices.rootLogger.factory(), - mockServices.rootHttpRouter.mock().factory, - mockServices.rootHealth.factory(), - mockServices.rootConfig.factory(), ]); init.add(testPlugin); init.add( diff --git a/packages/backend-defaults/config.d.ts b/packages/backend-defaults/config.d.ts index d578a4c510..f0632a37bb 100644 --- a/packages/backend-defaults/config.d.ts +++ b/packages/backend-defaults/config.d.ts @@ -1249,15 +1249,5 @@ export interface Config { */ plugins: string[]; }>; - - /** - * A list of deployed Backstage instances that can be crawled for discovery. - */ - instances: Array<{ - /** - * The base URL of the instance. All /.backstage/ routes should be accessible. - */ - baseUrl: string | { internal: string; external: string }; - }>; }; } diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 5586289e5f..7107b80d7e 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -33,11 +33,11 @@ "./permissions": "./src/entrypoints/permissions/index.ts", "./rootConfig": "./src/entrypoints/rootConfig/index.ts", "./rootHealth": "./src/entrypoints/rootHealth/index.ts", + "./rootSystemMetadata": "./src/entrypoints/rootSystemMetadata/index.ts", "./rootHttpRouter": "./src/entrypoints/rootHttpRouter/index.ts", "./rootLifecycle": "./src/entrypoints/rootLifecycle/index.ts", "./rootLogger": "./src/entrypoints/rootLogger/index.ts", "./scheduler": "./src/entrypoints/scheduler/index.ts", - "./systemMetadata": "./src/entrypoints/systemMetadata/index.ts", "./urlReader": "./src/entrypoints/urlReader/index.ts", "./userInfo": "./src/entrypoints/userInfo/index.ts", "./alpha": "./src/alpha/index.ts", @@ -92,15 +92,15 @@ "rootLifecycle": [ "src/entrypoints/rootLifecycle/index.ts" ], + "rootSystemMetadata": [ + "src/entrypoints/rootSystemMetadata/index.ts" + ], "rootLogger": [ "src/entrypoints/rootLogger/index.ts" ], "scheduler": [ "src/entrypoints/scheduler/index.ts" ], - "systemMetadata": [ - "src/entrypoints/systemMetadata/index.ts" - ], "urlReader": [ "src/entrypoints/urlReader/index.ts" ], @@ -198,7 +198,6 @@ "winston-transport": "^4.5.0", "yauzl": "^3.0.0", "yn": "^4.0.0", - "zen-observable": "^0.10.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.20.4" }, diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 58277b5e1e..2ca3525946 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -5,6 +5,7 @@ ```ts import { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha'; import { ActionsService } from '@backstage/backend-plugin-api/alpha'; +import { InstanceMetadataService } from '@backstage/backend-plugin-api/alpha'; import { ServiceFactory } from '@backstage/backend-plugin-api'; // @public (undocumented) @@ -21,5 +22,12 @@ export const actionsServiceFactory: ServiceFactory< 'singleton' >; +// @alpha @deprecated (undocumented) +export const instanceMetadataServiceFactory: ServiceFactory< + InstanceMetadataService, + 'plugin', + 'singleton' +>; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts index 5a4631283e..bb2e002b0d 100644 --- a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts +++ b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts @@ -150,6 +150,11 @@ export class HostDiscovery implements DiscoveryService { throw new Error('Not initialized'); }; + #resolutions: Map< + string, + Set<{ hash: string; target: { internal?: string; external?: string } }> + > = new Map(); + static fromConfig(config: RootConfigService, options?: HostDiscoveryOptions) { const discovery = new HostDiscovery(new SrvResolvers()); @@ -193,12 +198,23 @@ export class HostDiscovery implements DiscoveryService { return await resolver(pluginId); } - #updateResolvers(config: Config, defaultEndpoints?: HostDiscoveryEndpoint[]) { - this.#updateFallbackResolvers(config); - this.#updatePluginResolvers(config, defaultEndpoints); + async listResolutions() { + const _targets: Map = + new Map(); + for (const [pluginId, targets] of this.#resolutions.entries()) { + const currentTargets = [...targets.values()].map(({ target }) => ({ + ...target, + })); + if (_targets.has(pluginId)) { + _targets.set(pluginId, [..._targets.get(pluginId)!, ...currentTargets]); + } else { + _targets.set(pluginId, currentTargets); + } + } + return _targets; } - #updateFallbackResolvers(config: Config) { + getInstanceAddress(config: Config) { const backendBaseUrl = trimEnd(config.getString('backend.baseUrl'), '/'); const { @@ -220,12 +236,26 @@ export class HostDiscovery implements DiscoveryService { host = `[${host}]`; } + return { + internal: `${protocol}://${host}:${listenPort}`, + external: backendBaseUrl, + }; + } + + #updateResolvers(config: Config, defaultEndpoints?: HostDiscoveryEndpoint[]) { + this.#updateFallbackResolvers(config); + this.#updatePluginResolvers(config, defaultEndpoints); + } + + #updateFallbackResolvers(config: Config) { + const { internal, external } = this.getInstanceAddress(config); + this.#internalFallbackResolver = this.#makeResolver( - `${protocol}://${host}:${listenPort}/api/{{pluginId}}`, + `${internal}/api/{{pluginId}}`, false, ); this.#externalFallbackResolver = this.#makeResolver( - `${backendBaseUrl}/api/{{pluginId}}`, + `${external}/api/{{pluginId}}`, false, ); } @@ -264,6 +294,7 @@ export class HostDiscovery implements DiscoveryService { for (const { target, plugins } of endpoints) { let internalResolver: Resolver | undefined; let externalResolver: Resolver | undefined; + this.#addResolution(target, plugins); if (typeof target === 'string') { internalResolver = externalResolver = this.#makeResolver(target, false); @@ -293,6 +324,26 @@ export class HostDiscovery implements DiscoveryService { this.#externalResolvers = externalResolvers; } + #addResolution( + target: string | { internal?: string; external?: string }, + plugins: string[], + ) { + for (const pluginId of plugins) { + if (!this.#resolutions.has(pluginId)) { + this.#resolutions.set(pluginId, new Set()); + } + const standardizedTarget = + typeof target === 'string' + ? { external: target, internal: target } + : target; + const matchingResolution = this.#resolutions.get(pluginId)!; + const hash = JSON.stringify(standardizedTarget); + if (![...matchingResolution.values()].some(e => e.hash === hash)) { + matchingResolution.add({ target: standardizedTarget, hash }); + } + } + } + #makeResolver(urlPattern: string, allowSrv: boolean): Resolver { const withPluginId = (pluginId: string, url: string) => { return url.replace( diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts similarity index 96% rename from packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts rename to packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index a273dc87ba..c6c6d6bc65 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/SystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { Backend, createSpecializedBackend } from '@backstage/backend-app-api'; -import { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; +import { rootSystemMetadataServiceFactory } from './rootSystemMetadataServiceFactory'; import { mockServices } from '@backstage/backend-test-utils'; import getPort from 'get-port'; import { @@ -66,7 +66,7 @@ describe('SystemMetadataService', () => { instance1 = createSpecializedBackend({ defaultServiceFactories: [ ...baseFactories, - systemMetadataServiceFactory, + rootSystemMetadataServiceFactory, configFactory(instance1HttpPort), ], }); @@ -74,7 +74,7 @@ describe('SystemMetadataService', () => { instance2 = createSpecializedBackend({ defaultServiceFactories: [ ...baseFactories, - systemMetadataServiceFactory, + rootSystemMetadataServiceFactory, configFactory(instance2HttpPort), ], }); @@ -169,7 +169,7 @@ describe('SystemMetadataService', () => { instance = createSpecializedBackend({ defaultServiceFactories: [ ...baseFactories, - systemMetadataServiceFactory, + rootSystemMetadataServiceFactory, mockServices.rootConfig.factory({ data: { backend: { @@ -236,7 +236,7 @@ describe('SystemMetadataService', () => { instance = createSpecializedBackend({ defaultServiceFactories: [ ...baseFactories, - systemMetadataServiceFactory, + rootSystemMetadataServiceFactory, configFactory, ], }); diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/index.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/index.ts similarity index 77% rename from packages/backend-defaults/src/entrypoints/systemMetadata/index.ts rename to packages/backend-defaults/src/entrypoints/rootSystemMetadata/index.ts index 502a217e48..cff4eccdbe 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/index.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/index.ts @@ -13,5 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { systemMetadataServiceFactory } from './systemMetadataServiceFactory'; -export { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; +export { rootSystemMetadataServiceFactory } from './rootSystemMetadataServiceFactory'; +export { DefaultRootSystemMetadataService } from './lib/DefaultRootSystemMetadataService'; diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts new file mode 100644 index 0000000000..e8cdb43a08 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2024 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 { + LoggerService, + RootConfigService, + RootInstanceMetadataService, + RootSystemMetadataService, + RootSystemMetadataServicePluginInfo, +} from '@backstage/backend-plugin-api'; +import { HostDiscovery } from '../../discovery'; +import {} from '@backstage/backend-plugin-api'; + +/** + * @alpha + */ +export class DefaultRootSystemMetadataService + implements RootSystemMetadataService +{ + #hostDiscovery: HostDiscovery; + #instanceMetadata: RootInstanceMetadataService; + #config: RootConfigService; + constructor(options: { + logger: LoggerService; + config: RootConfigService; + instanceMetadata: RootInstanceMetadataService; + }) { + this.#hostDiscovery = HostDiscovery.fromConfig(options.config, { + logger: options.logger, + }); + options.config.subscribe?.(() => { + this.#hostDiscovery = HostDiscovery.fromConfig(options.config, { + logger: options.logger, + }); + }); + this.#instanceMetadata = options.instanceMetadata; + this.#config = options.config; + } + + public static create(pluginEnv: { + logger: LoggerService; + config: RootConfigService; + instanceMetadata: RootInstanceMetadataService; + }) { + return new DefaultRootSystemMetadataService(pluginEnv); + } + + public async getInstalledPlugins(): Promise< + RootSystemMetadataServicePluginInfo[] + > { + const resolutions = await this.#hostDiscovery.listResolutions(); + const instanceAddress = this.#hostDiscovery.getInstanceAddress( + this.#config, + ); + const currentInstance = await this.#instanceMetadata.getInstalledPlugins(); + for (const plugin of currentInstance) { + if (!resolutions.has(plugin.pluginId)) { + resolutions.set(plugin.pluginId, []); + } + resolutions.get(plugin.pluginId)?.push(instanceAddress); + } + return Array.from(resolutions.entries()).map(([pluginId, targets]) => ({ + pluginId, + hosts: Array.from(targets).filter( + (target): target is { external: string; internal: string } => + Object.keys(target).length > 0, + ), + })); + } + + public async getHosts(): Promise< + ReadonlyArray + > { + const resolutions = await this.#hostDiscovery.listResolutions(); + const hosts = new Set(); + for (const [_, targets] of resolutions.entries()) { + for (const target of targets) { + hosts.add(target as string | { external: string; internal: string }); + } + } + return Array.from(hosts); + } +} diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts new file mode 100644 index 0000000000..eb8b835b16 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts @@ -0,0 +1,39 @@ +/* + * Copyright 2025 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 { LoggerService } from '@backstage/backend-plugin-api'; +import type { RootSystemMetadataService } from '@backstage/backend-plugin-api'; +import Router from 'express-promise-router'; + +export async function createSystemMetadataRouter(options: { + logger: LoggerService; + systemMetadata: RootSystemMetadataService; +}) { + const { systemMetadata } = options; + + const router = Router(); + + router.get('/hosts', async (_, res) => { + const hosts = await systemMetadata.getHosts(); + res.json({ items: hosts }); + }); + + router.get('/plugins/installed', async (_, res) => { + res.json(await systemMetadata.getInstalledPlugins()); + }); + + return router; +} diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts similarity index 74% rename from packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts rename to packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts index bc417df898..0baa41be07 100644 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/systemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts @@ -18,7 +18,7 @@ import { coreServices, createServiceFactory, } from '@backstage/backend-plugin-api'; -import { DefaultSystemMetadataService } from './lib/DefaultSystemMetadataService'; +import { DefaultRootSystemMetadataService } from './lib/DefaultRootSystemMetadataService'; import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; /** @@ -26,17 +26,19 @@ import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; * * @alpha */ -export const systemMetadataServiceFactory = createServiceFactory({ - service: coreServices.systemMetadata, +export const rootSystemMetadataServiceFactory = createServiceFactory({ + service: coreServices.rootSystemMetadata, deps: { logger: coreServices.rootLogger, config: coreServices.rootConfig, httpRouter: coreServices.rootHttpRouter, + instanceMetadata: coreServices.rootInstanceMetadata, }, - async factory({ logger, config, httpRouter }) { - const systemMetadata = DefaultSystemMetadataService.create({ + async factory({ logger, config, httpRouter, instanceMetadata }) { + const systemMetadata = DefaultRootSystemMetadataService.create({ logger, config, + instanceMetadata, }); const router = await createSystemMetadataRouter({ systemMetadata, logger }); diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts deleted file mode 100644 index 0ce468e2be..0000000000 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/DefaultSystemMetadataService.ts +++ /dev/null @@ -1,187 +0,0 @@ -/* - * Copyright 2024 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 { - LoggerService, - RootConfigService, -} from '@backstage/backend-plugin-api'; -import { - BackstageInstance, - SystemMetadataService, -} from '@backstage/backend-plugin-api'; -import { Observable } from '@backstage/types'; -import z from 'zod'; -import ObservableImpl from 'zen-observable'; - -const targetObjectSchema = z.object({ - internal: z.string(), - external: z.string(), -}); - -/** - * A basic implementation of ReactiveX behavior subjects. - * - * A subject is a convenient way to create an observable when you want - * to fan out a single value to all subscribers. - * - * The BehaviorSubject will emit the most recently emitted value or error - * whenever a new observer subscribes to the subject. - * - * See http://reactivex.io/documentation/subject.html - * - * FORKED FROM core-app-api - where should this live? - */ - -export class BehaviorSubject - implements Observable, ZenObservable.SubscriptionObserver -{ - private isClosed: boolean; - private currentValue: T; - private terminatingError: Error | undefined; - private readonly observable: Observable; - - constructor(value: T) { - this.isClosed = false; - this.currentValue = value; - this.terminatingError = undefined; - this.observable = new ObservableImpl(subscriber => { - if (this.isClosed) { - if (this.terminatingError) { - subscriber.error(this.terminatingError); - } else { - subscriber.complete(); - } - return () => {}; - } - - subscriber.next(this.currentValue); - - this.subscribers.add(subscriber); - return () => { - this.subscribers.delete(subscriber); - }; - }); - } - - private readonly subscribers = new Set< - ZenObservable.SubscriptionObserver - >(); - - [Symbol.observable]() { - return this; - } - - get closed() { - return this.isClosed; - } - - next(value: T) { - if (this.isClosed) { - throw new Error('BehaviorSubject is closed'); - } - this.currentValue = value; - this.subscribers.forEach(subscriber => subscriber.next(value)); - } - - error(error: Error) { - if (this.isClosed) { - throw new Error('BehaviorSubject is closed'); - } - this.isClosed = true; - this.terminatingError = error; - this.subscribers.forEach(subscriber => subscriber.error(error)); - } - - complete() { - if (this.isClosed) { - throw new Error('BehaviorSubject is closed'); - } - this.isClosed = true; - this.subscribers.forEach(subscriber => subscriber.complete()); - } - - subscribe(observer: ZenObservable.Observer): ZenObservable.Subscription; - subscribe( - onNext: (value: T) => void, - onError?: (error: any) => void, - onComplete?: () => void, - ): ZenObservable.Subscription; - subscribe( - onNext: ZenObservable.Observer | ((value: T) => void), - onError?: (error: any) => void, - onComplete?: () => void, - ): ZenObservable.Subscription { - const observer = - typeof onNext === 'function' - ? { - next: onNext, - error: onError, - complete: onComplete, - } - : onNext; - - return this.observable.subscribe(observer); - } -} - -/** - * @alpha - */ -export class DefaultSystemMetadataService implements SystemMetadataService { - private instance$: BehaviorSubject; - constructor( - private options: { logger: LoggerService; config: RootConfigService }, - ) { - const getInstances = () => { - const endpoints = - options.config.getOptionalConfigArray('discovery.instances') ?? []; - const instances: BackstageInstance[] = []; - for (const endpoint of endpoints) { - const baseUrl = endpoint.getOptional('baseUrl'); - if (baseUrl) { - if (typeof baseUrl === 'string') { - instances.push({ internalUrl: baseUrl, externalUrl: baseUrl }); - } else { - const parseAttempt = targetObjectSchema.safeParse(baseUrl); - if (parseAttempt.success) { - const { internal, external } = parseAttempt.data; - instances.push({ - internalUrl: internal, - externalUrl: external, - }); - } - } - } - } - return instances; - }; - this.instance$ = new BehaviorSubject(getInstances()); - this.options.config.subscribe?.(() => { - this.instance$.next(getInstances()); - }); - } - - public static create(pluginEnv: { - logger: LoggerService; - config: RootConfigService; - }) { - return new DefaultSystemMetadataService(pluginEnv); - } - - instances(): Observable { - return this.instance$; - } -} diff --git a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts deleted file mode 100644 index e24870f7d0..0000000000 --- a/packages/backend-defaults/src/entrypoints/systemMetadata/lib/createSystemMetadataRouter.ts +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2025 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 { LoggerService } from '@backstage/backend-plugin-api'; -import { BackendFeatureMeta } from '@backstage/backend-plugin-api/alpha'; -import type { - BackstageInstance, - SystemMetadataService, -} from '@backstage/backend-plugin-api'; -import Router from 'express-promise-router'; - -export async function createSystemMetadataRouter(options: { - logger: LoggerService; - systemMetadata: SystemMetadataService; -}) { - const { logger, systemMetadata } = options; - - let instances: BackstageInstance[] = []; - systemMetadata.instances().subscribe({ - next: value => { - instances = value; - }, - }); - - logger.info(`Instances in this system: ${JSON.stringify(instances)}`); - - const router = Router(); - - router.get('/instances', async (_, res) => { - res.json({ items: instances }); - }); - - router.get('/features/installed', async (_, res) => { - const featurePromises = await Promise.allSettled( - instances.map(async instance => { - const response = await fetch( - `${instance.internalUrl}/.backstage/instanceMetadata/v1/features/installed`, - ); - if (response.ok) { - return { instance, response: await response.json() }; - } - throw new Error( - `Failed to fetch installed features from ${instance.internalUrl}`, - ); - }), - ); - const pluginByInstance: Record< - string, - { internalUrl: string; externalUrl: string }[] - > = {}; - for (const result of featurePromises) { - if (result.status !== 'fulfilled') { - logger.error(`Failed to fetch installed features: ${result.reason}`); - continue; - } - const instance = result.value.instance; - const installedFeatures = result.value.response - .items as BackendFeatureMeta[]; - for (const feature of installedFeatures) { - if (feature.type === 'plugin') { - if (!pluginByInstance[feature.pluginId]) { - pluginByInstance[feature.pluginId] = []; - } - pluginByInstance[feature.pluginId].push(instance); - } - } - } - res.json(pluginByInstance); - }); - - return router; -} diff --git a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts similarity index 58% rename from packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts rename to packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts index 36ab1ff0e9..ded76ec65a 100644 --- a/packages/backend-plugin-api/src/services/definitions/SystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts @@ -14,19 +14,19 @@ * limitations under the License. */ -import { Observable } from '@backstage/types'; - -/** - * @public - */ -export interface BackstageInstance { - internalUrl: string; - externalUrl: string; +/** @public */ +export interface RootSystemMetadataServicePluginInfo { + readonly pluginId: string; + readonly hosts: (string | { external: string; internal: string })[]; } -/** - * @public - */ -export interface SystemMetadataService { - instances(): Observable; +/** @public */ +export interface RootSystemMetadataService { + getInstalledPlugins: () => Promise< + ReadonlyArray + >; + + getHosts: () => Promise< + ReadonlyArray + >; } diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index 0f38c0093c..e5ad69e871 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -289,15 +289,15 @@ export namespace coreServices { id: 'core.rootInstanceMetadata', scope: 'root', }); - + /** * Read information about your current Backstage deployment. * @public */ - export const systemMetadata = createServiceRef< - import('./SystemMetadataService').SystemMetadataService + export const rootSystemMetadata = createServiceRef< + import('./RootSystemMetadataService').RootSystemMetadataService >({ - id: 'core.systemMetadata', + id: 'core.rootSystemMetadata', scope: 'root', }); } diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 4e01553a76..d12395b636 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -73,9 +73,9 @@ export type { SchedulerServiceTaskScheduleDefinitionConfig, } from './SchedulerService'; export type { - BackstageInstance, - SystemMetadataService, -} from './SystemMetadataService'; + RootSystemMetadataServicePluginInfo, + RootSystemMetadataService, +} from './RootSystemMetadataService'; export type { UrlReaderService, UrlReaderServiceReadTreeOptions, diff --git a/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts b/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts deleted file mode 100644 index 8f78ec7567..0000000000 --- a/packages/backend-test-utils/src/services/MockSystemMetadataService.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2025 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 { BackstageInstance } from '@backstage/backend-plugin-api'; -import { MockSystemMetadataService } from './MockSystemMetadataService'; - -describe('MockSystemMetadataService', () => { - it('should return the passed in instances', () => { - expect.assertions(1); - const instances: BackstageInstance[] = [ - { internalUrl: 'localhost:7007', externalUrl: 'external.url' }, - { internalUrl: 'localhost:7008', externalUrl: 'other.external.url' }, - ]; - const service = MockSystemMetadataService.create({ instances }); - service.instances().subscribe({ - next: value => { - expect(value).toEqual(instances); - }, - }); - }); -}); diff --git a/packages/backend-test-utils/src/services/MockSystemMetadataService.ts b/packages/backend-test-utils/src/services/MockSystemMetadataService.ts deleted file mode 100644 index eb8b39daf1..0000000000 --- a/packages/backend-test-utils/src/services/MockSystemMetadataService.ts +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2025 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 { - BackstageInstance, - SystemMetadataService, -} from '@backstage/backend-plugin-api'; -import { Observable } from '@backstage/types'; -import ObservableImpl from 'zen-observable'; - -/** - * @public - */ -export class MockSystemMetadataService implements SystemMetadataService { - #instances: BackstageInstance[]; - - constructor(instances: BackstageInstance[]) { - this.#instances = instances; - } - - public static create(options: { instances: BackstageInstance[] }) { - return new MockSystemMetadataService(options.instances); - } - - instances(): Observable { - return new ObservableImpl(subscriber => { - subscriber.next(this.#instances); - subscriber.complete(); - }); - } -} diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 4f89d62971..de034aae07 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -30,7 +30,6 @@ import { urlReaderServiceFactory } from '@backstage/backend-defaults/urlReader'; import { AuthService, BackstageCredentials, - BackstageInstance, BackstageUserInfo, DatabaseService, DiscoveryService, @@ -41,7 +40,6 @@ import { SchedulerService, ServiceFactory, ServiceRef, - SystemMetadataService, UserInfoService, coreServices, createServiceFactory, @@ -63,8 +61,6 @@ import { simpleMock } from './simpleMock'; import { MockSchedulerService } from './MockSchedulerService'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { ObservableConfigProxy } from '../../../config-loader/src/sources/ObservableConfigProxy'; -import { MockSystemMetadataService } from './MockSystemMetadataService'; -import { createMockObservable } from './MockObservable'; /** @internal */ function createLoggerMock() { @@ -577,33 +573,23 @@ export namespace mockServices { rootInstanceMetadata, ); } - /** - * Creates a functional mock implementation for the - * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. - */ - export function systemMetadata(options: { - instances: BackstageInstance[]; - }): SystemMetadataService { - return MockSystemMetadataService.create(options); - } - export namespace systemMetadata { + export namespace rootSystemMetadata { /** * Creates a functional mock factory for the * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. */ export const factory = simpleFactoryWithOptions( - coreServices.systemMetadata, - systemMetadata, + coreServices.rootSystemMetadata, + rootSystemMetadata, ); /** * Creates a mock of the * {@link @backstage/backend-events-node#systemMetadata}, optionally * with some given method implementations. */ - export const mock = simpleMock(coreServices.systemMetadata, () => ({ - instances: jest - .fn() - .mockReturnValue(createMockObservable([])), + export const mock = simpleMock(coreServices.rootSystemMetadata, () => ({ + getInstalledPlugins: jest.fn(), + getHosts: jest.fn(), })); } } diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index a6f9b7b3e9..f5a14e150a 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -19,7 +19,7 @@ import { coreServices, createBackendFeatureLoader, } from '@backstage/backend-plugin-api'; -import { systemMetadataServiceFactory } from '@backstage/backend-defaults/alpha'; +import { rootSystemMetadataServiceFactory } from '@backstage/backend-defaults/rootSystemMetadata'; const backend = createBackend(); @@ -70,7 +70,7 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); -backend.add(systemMetadataServiceFactory); +backend.add(rootSystemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); backend.add(import('@backstage/plugin-mcp-actions-backend')); From bc862fea964ca6f17cf8f501c90b8ffc78b1a2ec Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 09:42:42 -0500 Subject: [PATCH 26/42] more cleanup Signed-off-by: aramissennyeydd --- .../backend-defaults/src/CreateBackend.ts | 2 + .../RootSystemMetadataService.test.ts | 302 +++++------------- .../lib/DefaultRootSystemMetadataService.ts | 14 - .../lib/createSystemMetadataRouter.ts | 5 - .../src/manager/plugin-manager.test.ts | 7 +- .../definitions/RootSystemMetadataService.ts | 4 - packages/backend-test-utils/package.json | 1 - .../src/services/MockObservable.ts | 25 -- .../src/services/simpleMock.ts | 1 - packages/backend/src/index.ts | 2 - yarn.lock | 3 - 11 files changed, 88 insertions(+), 278 deletions(-) delete mode 100644 packages/backend-test-utils/src/services/MockObservable.ts diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 9f8116a996..4b85464640 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -40,6 +40,7 @@ import { actionsServiceFactory, } from '@backstage/backend-defaults/alpha'; import { instanceMetadataServiceFactory } from './alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory'; +import { rootSystemMetadataServiceFactory } from './entrypoints/rootSystemMetadata'; export const defaultServiceFactories = [ auditorServiceFactory, @@ -62,6 +63,7 @@ export const defaultServiceFactories = [ userInfoServiceFactory, urlReaderServiceFactory, eventsServiceFactory, + rootSystemMetadataServiceFactory, // alpha services actionsRegistryServiceFactory, diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index c6c6d6bc65..12f1cc586a 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -13,199 +13,66 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Backend, createSpecializedBackend } from '@backstage/backend-app-api'; -import { rootSystemMetadataServiceFactory } from './rootSystemMetadataServiceFactory'; + import { mockServices } from '@backstage/backend-test-utils'; -import getPort from 'get-port'; +import { default as getPort } from 'get-port'; import { coreServices, createBackendPlugin, createServiceFactory, } from '@backstage/backend-plugin-api'; - -const baseFactories = [ - mockServices.rootHealth.factory(), - mockServices.rootLogger.factory(), - mockServices.rootLifecycle.factory(), - mockServices.rootHttpRouter.factory(), - mockServices.lifecycle.factory(), - mockServices.logger.factory(), -]; +import { createBackend } from '../../CreateBackend'; describe('SystemMetadataService', () => { - describe('multiple backends testing', () => { - let instance1: Backend; - let instance2: Backend; - let instance1HttpPort: number; - let instance2HttpPort: number; - - const configFactory = (port: number) => - mockServices.rootConfig.factory({ - data: { - backend: { - listen: { - port, - }, - }, - discovery: { - instances: [ - { - baseUrl: `http://localhost:${instance1HttpPort}`, - }, - { - baseUrl: `http://localhost:${instance2HttpPort}`, - }, - ], - }, - }, - }); - beforeEach(async () => { - instance1HttpPort = await getPort(); - instance2HttpPort = await getPort(); - // Setup code for multiple backend instances - instance1 = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - rootSystemMetadataServiceFactory, - configFactory(instance1HttpPort), - ], - }); - - instance2 = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - rootSystemMetadataServiceFactory, - configFactory(instance2HttpPort), - ], - }); - }); - - it('should list plugins across instances', async () => { - instance1.add( - createBackendPlugin({ - pluginId: 'test', - register(reg) { - reg.registerInit({ - deps: {}, - async init() { - // do nothing - }, - }); - }, - }), - ); - - instance2.add( - createBackendPlugin({ - pluginId: 'test-other', - register(reg) { - reg.registerInit({ - deps: {}, - async init() { - // do nothing - }, - }); - }, - }), - ); - - await instance1.start(); - await instance2.start(); - - const instance1Response = await fetch( - `http://localhost:${instance1HttpPort}/.backstage/systemMetadata/v1/features/installed`, - ); - - expect(instance1Response.status).toBe(200); - await expect(instance1Response.json()).resolves.toMatchObject({ - test: [ - { - externalUrl: `http://localhost:${instance1HttpPort}`, - internalUrl: `http://localhost:${instance1HttpPort}`, - }, - ], - 'test-other': [ - { - externalUrl: `http://localhost:${instance2HttpPort}`, - internalUrl: `http://localhost:${instance2HttpPort}`, - }, - ], - }); - - const instance2Response = await fetch( - `http://localhost:${instance2HttpPort}/.backstage/systemMetadata/v1/features/installed`, - ); - - expect(instance2Response.status).toBe(200); - - await expect(instance2Response.json()).resolves.toMatchObject({ - test: [ - { - externalUrl: `http://localhost:${instance1HttpPort}`, - internalUrl: `http://localhost:${instance1HttpPort}`, - }, - ], - 'test-other': [ - { - externalUrl: `http://localhost:${instance2HttpPort}`, - internalUrl: `http://localhost:${instance2HttpPort}`, - }, - ], - }); - }); - - afterEach(async () => { - await instance1.stop(); - await instance2.stop(); - }); - }); - - describe('single backend test', () => { + describe('returns plugins from config', () => { let port: number; - let instance: Backend; + let testPlugin: ReturnType; beforeEach(async () => { port = await getPort(); - - instance = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - rootSystemMetadataServiceFactory, - mockServices.rootConfig.factory({ - data: { - backend: { - listen: { - port, - }, - }, - discovery: { - instances: [ - { - baseUrl: `http://localhost:${port}`, - }, - ], - }, - }, - }), - ], + testPlugin = createBackendPlugin({ + pluginId: 'test-plugin', + register(reg) { + reg.registerInit({ + deps: {}, + init: async () => {}, + }); + }, }); }); it('should list all known instances', async () => { + const instance = createBackend(); + instance.add( + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port, + }, + baseUrl: `http://localhost:${port}`, + }, + }, + }), + ); + instance.add(testPlugin); await instance.start(); const instanceResponse = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, + `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, ); expect(instanceResponse.status).toBe(200); - await expect(instanceResponse.json()).resolves.toMatchObject({ - items: [ - { - externalUrl: `http://localhost:${port}`, - internalUrl: `http://localhost:${port}`, - }, - ], - }); + await expect(instanceResponse.json()).resolves.toMatchObject([ + { + hosts: [ + { + external: `http://localhost:${port}`, + internal: `http://localhost:${port}`, + }, + ], + pluginId: 'test-plugin', + }, + ]); }); it('should react to config updates', async () => { @@ -215,16 +82,7 @@ describe('SystemMetadataService', () => { listen: { port, }, - }, - discovery: { - instances: [ - { - baseUrl: `http://localhost:${port}`, - }, - { - baseUrl: `not-a-real-host`, - }, - ], + baseUrl: `http://localhost:${port}`, }, }, }); @@ -233,39 +91,41 @@ describe('SystemMetadataService', () => { deps: {}, factory: () => config, }); - instance = createSpecializedBackend({ - defaultServiceFactories: [ - ...baseFactories, - rootSystemMetadataServiceFactory, - configFactory, - ], - }); + const instance = createBackend(); + instance.add(configFactory); + instance.add(testPlugin); await instance.start(); const instance1Response = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, + `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, ); expect(instance1Response.status).toBe(200); - await expect(instance1Response.json()).resolves.toMatchObject({ - items: [ - { - externalUrl: `http://localhost:${port}`, - internalUrl: `http://localhost:${port}`, - }, - { - externalUrl: `not-a-real-host`, - internalUrl: `not-a-real-host`, - }, - ], - }); + await expect(instance1Response.json()).resolves.toMatchObject([ + { + hosts: [ + { + external: `http://localhost:${port}`, + internal: `http://localhost:${port}`, + }, + ], + pluginId: 'test-plugin', + }, + ]); config.update({ data: { + backend: { + listen: { + port, + }, + baseUrl: `http://localhost:${port}`, + }, discovery: { - instances: [ + endpoints: [ { - baseUrl: `http://localhost:${port}`, + target: `http://test.internal`, + plugins: ['your-new-plugin'], }, ], }, @@ -273,22 +133,30 @@ describe('SystemMetadataService', () => { }); const responseAfterUpdate = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/instances`, + `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, ); expect(responseAfterUpdate.status).toBe(200); - await expect(responseAfterUpdate.json()).resolves.toMatchObject({ - items: [ - { - externalUrl: `http://localhost:${port}`, - internalUrl: `http://localhost:${port}`, - }, - ], - }); - }); - - afterEach(async () => { - await instance.stop(); + await expect(responseAfterUpdate.json()).resolves.toMatchObject([ + { + hosts: [ + { + external: 'http://test.internal', + internal: 'http://test.internal', + }, + ], + pluginId: 'your-new-plugin', + }, + { + hosts: [ + { + external: `http://localhost:${port}`, + internal: `http://localhost:${port}`, + }, + ], + pluginId: 'test-plugin', + }, + ]); }); }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts index e8cdb43a08..4300cc94d3 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts @@ -22,7 +22,6 @@ import { RootSystemMetadataServicePluginInfo, } from '@backstage/backend-plugin-api'; import { HostDiscovery } from '../../discovery'; -import {} from '@backstage/backend-plugin-api'; /** * @alpha @@ -80,17 +79,4 @@ export class DefaultRootSystemMetadataService ), })); } - - public async getHosts(): Promise< - ReadonlyArray - > { - const resolutions = await this.#hostDiscovery.listResolutions(); - const hosts = new Set(); - for (const [_, targets] of resolutions.entries()) { - for (const target of targets) { - hosts.add(target as string | { external: string; internal: string }); - } - } - return Array.from(hosts); - } } diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts index eb8b835b16..6ef87309f7 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts @@ -26,11 +26,6 @@ export async function createSystemMetadataRouter(options: { const router = Router(); - router.get('/hosts', async (_, res) => { - const hosts = await systemMetadata.getHosts(); - res.json({ items: hosts }); - }); - router.get('/plugins/installed', async (_, res) => { res.json(await systemMetadata.getInstalledPlugins()); }); diff --git a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts index 394762d6e5..8d8fd13151 100644 --- a/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts +++ b/packages/backend-dynamic-feature-service/src/manager/plugin-manager.test.ts @@ -39,10 +39,7 @@ import { ConfigSources } from '@backstage/config-loader'; import { Logs, MockedLogger, LogContent } from '../__testUtils__/testUtils'; import { PluginScanner } from '../scanner/plugin-scanner'; import { findPaths } from '@backstage/cli-common'; -import { - createMockDirectory, - mockServices, -} from '@backstage/backend-test-utils'; +import { createMockDirectory } from '@backstage/backend-test-utils'; import { rootLifecycleServiceFactory } from '@backstage/backend-defaults/rootLifecycle'; import { BackstagePackageJson, PackageRole } from '@backstage/cli-node'; @@ -1000,8 +997,6 @@ describe('backend-dynamic-feature-service', () => { const backend = createSpecializedBackend({ defaultServiceFactories: [ - mockServices.rootHealth.factory(), - mockServices.rootHttpRouter.mock().factory, rootLifecycleServiceFactory, createServiceFactory({ service: coreServices.rootConfig, diff --git a/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts index ded76ec65a..4e174a2c59 100644 --- a/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts @@ -25,8 +25,4 @@ export interface RootSystemMetadataService { getInstalledPlugins: () => Promise< ReadonlyArray >; - - getHosts: () => Promise< - ReadonlyArray - >; } diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index a771b9513f..cd4f68ead0 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -79,7 +79,6 @@ "text-extensions": "^2.4.0", "uuid": "^11.0.0", "yn": "^4.0.0", - "zen-observable": "^0.10.0", "zod": "^3.22.4", "zod-to-json-schema": "^3.20.4" }, diff --git a/packages/backend-test-utils/src/services/MockObservable.ts b/packages/backend-test-utils/src/services/MockObservable.ts deleted file mode 100644 index 765b6ccb53..0000000000 --- a/packages/backend-test-utils/src/services/MockObservable.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2025 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 { Observable } from '@backstage/types'; -import ObservableImpl from 'zen-observable'; - -export function createMockObservable(value: T): Observable { - return new ObservableImpl(observer => { - observer.next(value); - observer.complete(); - }); -} diff --git a/packages/backend-test-utils/src/services/simpleMock.ts b/packages/backend-test-utils/src/services/simpleMock.ts index 137c1cba66..484969f235 100644 --- a/packages/backend-test-utils/src/services/simpleMock.ts +++ b/packages/backend-test-utils/src/services/simpleMock.ts @@ -39,7 +39,6 @@ export function simpleMock( const mock = mockFactory(); if (partialImpl) { for (const [key, impl] of Object.entries(partialImpl)) { - console.log(key, impl, mock); if (typeof impl === 'function') { (mock as any)[key].mockImplementation(impl); } else { diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index f5a14e150a..9282c51f22 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -19,7 +19,6 @@ import { coreServices, createBackendFeatureLoader, } from '@backstage/backend-plugin-api'; -import { rootSystemMetadataServiceFactory } from '@backstage/backend-defaults/rootSystemMetadata'; const backend = createBackend(); @@ -70,7 +69,6 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); -backend.add(rootSystemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); backend.add(import('@backstage/plugin-mcp-actions-backend')); diff --git a/yarn.lock b/yarn.lock index 1d7fcf655e..98c89bb0ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2854,7 +2854,6 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" - express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft @@ -2951,7 +2950,6 @@ __metadata: winston-transport: "npm:^4.5.0" yauzl: "npm:^3.0.0" yn: "npm:^4.0.0" - zen-observable: "npm:^0.10.0" zod: "npm:^3.22.4" zod-to-json-schema: "npm:^3.20.4" peerDependencies: @@ -3104,7 +3102,6 @@ __metadata: text-extensions: "npm:^2.4.0" uuid: "npm:^11.0.0" yn: "npm:^4.0.0" - zen-observable: "npm:^0.10.0" zod: "npm:^3.22.4" zod-to-json-schema: "npm:^3.20.4" languageName: unknown From 95fc28931dcd7dbc60690cd0fe2a0830c21280f7 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 09:50:07 -0500 Subject: [PATCH 27/42] remove http interface Signed-off-by: aramissennyeydd --- .../RootSystemMetadataService.test.ts | 48 ++++++++++++------- .../lib/createSystemMetadataRouter.ts | 34 ------------- .../rootSystemMetadataServiceFactory.ts | 11 +---- 3 files changed, 33 insertions(+), 60 deletions(-) delete mode 100644 packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index 12f1cc586a..b2d7b52083 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -22,26 +22,39 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { createBackend } from '../../CreateBackend'; +import { Backend } from '@backstage/backend-app-api'; +import Router from 'express-promise-router'; describe('SystemMetadataService', () => { describe('returns plugins from config', () => { let port: number; - let testPlugin: ReturnType; + let instance: Backend; beforeEach(async () => { port = await getPort(); - testPlugin = createBackendPlugin({ - pluginId: 'test-plugin', - register(reg) { - reg.registerInit({ - deps: {}, - init: async () => {}, - }); - }, - }); + instance = createBackend(); + instance.add( + createBackendPlugin({ + pluginId: 'test-plugin', + register(reg) { + reg.registerInit({ + deps: { + systemMetadata: coreServices.rootSystemMetadata, + rootHttpRouter: coreServices.rootHttpRouter, + }, + init: async ({ systemMetadata, rootHttpRouter }) => { + const router = Router(); + router.use('/plugins', async (_, res) => { + res.json(await systemMetadata.getInstalledPlugins()); + }); + rootHttpRouter.use('/systemMetadata', router); + }, + }); + }, + }), + ); }); it('should list all known instances', async () => { - const instance = createBackend(); instance.add( mockServices.rootConfig.factory({ data: { @@ -54,11 +67,10 @@ describe('SystemMetadataService', () => { }, }), ); - instance.add(testPlugin); await instance.start(); const instanceResponse = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, + `http://localhost:${port}/systemMetadata/plugins`, ); expect(instanceResponse.status).toBe(200); @@ -91,13 +103,11 @@ describe('SystemMetadataService', () => { deps: {}, factory: () => config, }); - const instance = createBackend(); instance.add(configFactory); - instance.add(testPlugin); await instance.start(); const instance1Response = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, + `http://localhost:${port}/systemMetadata/plugins`, ); expect(instance1Response.status).toBe(200); @@ -133,7 +143,7 @@ describe('SystemMetadataService', () => { }); const responseAfterUpdate = await fetch( - `http://localhost:${port}/.backstage/systemMetadata/v1/plugins/installed`, + `http://localhost:${port}/systemMetadata/plugins`, ); expect(responseAfterUpdate.status).toBe(200); @@ -158,5 +168,9 @@ describe('SystemMetadataService', () => { }, ]); }); + + afterEach(async () => { + await instance.stop(); + }); }); }); diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts deleted file mode 100644 index 6ef87309f7..0000000000 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/createSystemMetadataRouter.ts +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2025 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 { LoggerService } from '@backstage/backend-plugin-api'; -import type { RootSystemMetadataService } from '@backstage/backend-plugin-api'; -import Router from 'express-promise-router'; - -export async function createSystemMetadataRouter(options: { - logger: LoggerService; - systemMetadata: RootSystemMetadataService; -}) { - const { systemMetadata } = options; - - const router = Router(); - - router.get('/plugins/installed', async (_, res) => { - res.json(await systemMetadata.getInstalledPlugins()); - }); - - return router; -} diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts index 0baa41be07..62cd8bf3bc 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts @@ -19,7 +19,6 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { DefaultRootSystemMetadataService } from './lib/DefaultRootSystemMetadataService'; -import { createSystemMetadataRouter } from './lib/createSystemMetadataRouter'; /** * Metadata about an entire Backstage system, a collection of Backstage instances. @@ -31,19 +30,13 @@ export const rootSystemMetadataServiceFactory = createServiceFactory({ deps: { logger: coreServices.rootLogger, config: coreServices.rootConfig, - httpRouter: coreServices.rootHttpRouter, instanceMetadata: coreServices.rootInstanceMetadata, }, - async factory({ logger, config, httpRouter, instanceMetadata }) { - const systemMetadata = DefaultRootSystemMetadataService.create({ + async factory({ logger, config, instanceMetadata }) { + return DefaultRootSystemMetadataService.create({ logger, config, instanceMetadata, }); - - const router = await createSystemMetadataRouter({ systemMetadata, logger }); - - httpRouter.use('/.backstage/systemMetadata/v1', router); - return systemMetadata; }, }); From 9a5833c99ad06d6e07b0585f5071156fbed8a278 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 09:58:06 -0500 Subject: [PATCH 28/42] fixes Signed-off-by: aramissennyeydd --- packages/backend-defaults/package.json | 6 +-- packages/backend-defaults/report-alpha.api.md | 2 +- .../backend-defaults/report-discovery.api.md | 16 ++++++ .../report-rootSystemMetadata.api.md | 40 +++++++++++++++ .../report-systemMetadata.api.md | 47 ------------------ packages/backend-plugin-api/report.api.md | 49 ++++++++++--------- packages/backend-test-utils/report.api.md | 34 ++++++------- .../src/services/mockServices.ts | 8 ++- 8 files changed, 109 insertions(+), 93 deletions(-) create mode 100644 packages/backend-defaults/report-rootSystemMetadata.api.md delete mode 100644 packages/backend-defaults/report-systemMetadata.api.md diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 7107b80d7e..1ebd5de801 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -86,15 +86,15 @@ "rootHealth": [ "src/entrypoints/rootHealth/index.ts" ], + "rootSystemMetadata": [ + "src/entrypoints/rootSystemMetadata/index.ts" + ], "rootHttpRouter": [ "src/entrypoints/rootHttpRouter/index.ts" ], "rootLifecycle": [ "src/entrypoints/rootLifecycle/index.ts" ], - "rootSystemMetadata": [ - "src/entrypoints/rootSystemMetadata/index.ts" - ], "rootLogger": [ "src/entrypoints/rootLogger/index.ts" ], diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 2ca3525946..34f2d1066b 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -25,7 +25,7 @@ export const actionsServiceFactory: ServiceFactory< // @alpha @deprecated (undocumented) export const instanceMetadataServiceFactory: ServiceFactory< InstanceMetadataService, - 'plugin', + 'root', 'singleton' >; diff --git a/packages/backend-defaults/report-discovery.api.md b/packages/backend-defaults/report-discovery.api.md index ddbbd9d025..260e04a8a3 100644 --- a/packages/backend-defaults/report-discovery.api.md +++ b/packages/backend-defaults/report-discovery.api.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { Config } from '@backstage/config'; import { DiscoveryService } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { RootConfigService } from '@backstage/backend-plugin-api'; @@ -26,6 +27,21 @@ export class HostDiscovery implements DiscoveryService { getBaseUrl(pluginId: string): Promise; // (undocumented) getExternalBaseUrl(pluginId: string): Promise; + // (undocumented) + getInstanceAddress(config: Config): { + internal: string; + external: string; + }; + // (undocumented) + listResolutions(): Promise< + Map< + string, + { + internal?: string; + external?: string; + }[] + > + >; } // @public diff --git a/packages/backend-defaults/report-rootSystemMetadata.api.md b/packages/backend-defaults/report-rootSystemMetadata.api.md new file mode 100644 index 0000000000..f871282826 --- /dev/null +++ b/packages/backend-defaults/report-rootSystemMetadata.api.md @@ -0,0 +1,40 @@ +## API Report File for "@backstage/backend-defaults" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { LoggerService } from '@backstage/backend-plugin-api'; +import { RootConfigService } from '@backstage/backend-plugin-api'; +import { RootInstanceMetadataService } from '@backstage/backend-plugin-api'; +import { RootSystemMetadataService } from '@backstage/backend-plugin-api'; +import { RootSystemMetadataServicePluginInfo } from '@backstage/backend-plugin-api'; +import { ServiceFactory } from '@backstage/backend-plugin-api'; + +// @alpha (undocumented) +export class DefaultRootSystemMetadataService + implements RootSystemMetadataService +{ + constructor(options: { + logger: LoggerService; + config: RootConfigService; + instanceMetadata: RootInstanceMetadataService; + }); + // (undocumented) + static create(pluginEnv: { + logger: LoggerService; + config: RootConfigService; + instanceMetadata: RootInstanceMetadataService; + }): DefaultRootSystemMetadataService; + // (undocumented) + getInstalledPlugins(): Promise; +} + +// @alpha +export const rootSystemMetadataServiceFactory: ServiceFactory< + RootSystemMetadataService, + 'root', + 'singleton' +>; + +// (No @packageDocumentation comment for this package) +``` diff --git a/packages/backend-defaults/report-systemMetadata.api.md b/packages/backend-defaults/report-systemMetadata.api.md deleted file mode 100644 index 6f0f106039..0000000000 --- a/packages/backend-defaults/report-systemMetadata.api.md +++ /dev/null @@ -1,47 +0,0 @@ -## API Report File for "@backstage/backend-defaults" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha'; -import { ActionsService } from '@backstage/backend-plugin-api/alpha'; -import { ServiceFactory } from '@backstage/backend-plugin-api'; - -// @public (undocumented) -export const actionsRegistryServiceFactory: ServiceFactory< - ActionsRegistryService, - 'plugin', - 'singleton' ->; - -// @public (undocumented) -export const actionsServiceFactory: ServiceFactory< - ActionsService, -import { BackstageInstance } from '@backstage/backend-plugin-api'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import { Observable } from '@backstage/types'; -import { RootConfigService } from '@backstage/backend-plugin-api'; -import { ServiceFactory } from '@backstage/backend-plugin-api'; -import { SystemMetadataService } from '@backstage/backend-plugin-api'; - -// @alpha (undocumented) -export class DefaultSystemMetadataService implements SystemMetadataService { - constructor(options: { logger: LoggerService; config: RootConfigService }); - // (undocumented) - static create(pluginEnv: { - logger: LoggerService; - config: RootConfigService; - }): DefaultSystemMetadataService; - // (undocumented) - instances(): Observable; -} - -// @alpha -export const systemMetadataServiceFactory: ServiceFactory< - SystemMetadataService, - 'root', - 'singleton' ->; - -// (No @packageDocumentation comment for this package) -``` diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index abb20539db..fdca63ec6b 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -14,7 +14,6 @@ import { isChildPath } from '@backstage/cli-common'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { Knex } from 'knex'; -import { Observable } from '@backstage/types'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAttributes } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; @@ -138,14 +137,6 @@ export type BackstageCredentials = { principal: TPrincipal; }; -// @public (undocumented) -export interface BackstageInstance { - // (undocumented) - externalUrl: string; - // (undocumented) - internalUrl: string; -} - // @public export type BackstageNonePrincipal = { type: 'none'; @@ -246,13 +237,11 @@ export namespace coreServices { 'root', 'singleton' >; - const // @alpha - systemMetadataServiceRef: ServiceRef< - SystemMetadataService, - 'root', - 'singleton' - >; - const systemMetadata: ServiceRef; + const rootSystemMetadata: ServiceRef< + RootSystemMetadataService, + 'root', + 'singleton' + >; } // @public @@ -644,6 +633,28 @@ export interface RootServiceFactoryOptions< service: ServiceRef; } +// @public (undocumented) +export interface RootSystemMetadataService { + // (undocumented) + getInstalledPlugins: () => Promise< + ReadonlyArray + >; +} + +// @public (undocumented) +export interface RootSystemMetadataServicePluginInfo { + // (undocumented) + readonly hosts: ( + | string + | { + external: string; + internal: string; + } + )[]; + // (undocumented) + readonly pluginId: string; +} + // @public export interface SchedulerService { createScheduledTaskRunner( @@ -760,12 +771,6 @@ export interface ServiceRefOptions< scope?: TScope; } -// @public (undocumented) -export interface SystemMetadataService { - // (undocumented) - instances(): Observable; -} - // @public export interface UrlReaderService { readTree( diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index 08e6979928..bfa46a3725 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -9,7 +9,6 @@ import { AuthService } from '@backstage/backend-plugin-api'; import { Backend } from '@backstage/backend-app-api'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { BackstageCredentials } from '@backstage/backend-plugin-api'; -import { BackstageInstance } from '@backstage/backend-plugin-api'; import { BackstageNonePrincipal } from '@backstage/backend-plugin-api'; import { BackstagePrincipalAccessRestrictions } from '@backstage/backend-plugin-api'; import { BackstageServicePrincipal } from '@backstage/backend-plugin-api'; @@ -39,10 +38,10 @@ import { RootHttpRouterService } from '@backstage/backend-plugin-api'; import { RootInstanceMetadataService } from '@backstage/backend-plugin-api'; import { RootLifecycleService } from '@backstage/backend-plugin-api'; import { RootLoggerService } from '@backstage/backend-plugin-api'; +import { RootSystemMetadataService } from '@backstage/backend-plugin-api'; import { SchedulerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceRef } from '@backstage/backend-plugin-api'; -import { SystemMetadataService } from '@backstage/backend-plugin-api'; import { UrlReaderService } from '@backstage/backend-plugin-api'; import { UserInfoService } from '@backstage/backend-plugin-api'; @@ -354,7 +353,7 @@ export namespace mockServices { factory: () => ServiceFactory< RootInstanceMetadataService, 'root', - 'singleton' + 'singleton' | 'multiton' >; } // (undocumented) @@ -384,6 +383,19 @@ export namespace mockServices { ) => ServiceMock; } // (undocumented) + export function rootSystemMetadata(): RootSystemMetadataService; + // (undocumented) + export namespace rootSystemMetadata { + const factory: () => ServiceFactory< + RootSystemMetadataService, + 'root', + 'singleton' | 'multiton' + >; + const mock: ( + partialImpl?: Partial | undefined, + ) => ServiceMock; + } + // (undocumented) export function scheduler(): SchedulerService; // (undocumented) export namespace scheduler { @@ -398,22 +410,6 @@ export namespace mockServices { partialImpl?: Partial | undefined, ) => ServiceMock; } - export function systemMetadata(options: { - instances: BackstageInstance[]; - }): SystemMetadataService; - // (undocumented) - export namespace systemMetadata { - const factory: (options: { - instances: BackstageInstance[]; - }) => ServiceFactory< - SystemMetadataService, - 'root', - 'singleton' | 'multiton' - >; - const mock: ( - partialImpl?: Partial | undefined, - ) => ServiceMock; - } // (undocumented) export namespace urlReader { const // (undocumented) diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index de034aae07..0c19bf40ca 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -44,6 +44,7 @@ import { coreServices, createServiceFactory, RootLoggerService, + RootSystemMetadataService, } from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { EventsService, eventsServiceRef } from '@backstage/plugin-events-node'; @@ -573,6 +574,12 @@ export namespace mockServices { rootInstanceMetadata, ); } + + export function rootSystemMetadata(): RootSystemMetadataService { + return { + getInstalledPlugins: () => Promise.resolve([]), + }; + } export namespace rootSystemMetadata { /** * Creates a functional mock factory for the @@ -589,7 +596,6 @@ export namespace mockServices { */ export const mock = simpleMock(coreServices.rootSystemMetadata, () => ({ getInstalledPlugins: jest.fn(), - getHosts: jest.fn(), })); } } From 1d124c34352889b12494fc7c1b93715bf94c079b Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 10:08:41 -0500 Subject: [PATCH 29/42] add example router Signed-off-by: aramissennyeydd --- packages/backend/package.json | 3 +- packages/backend/src/index.ts | 1 + packages/backend/src/systemMetadataPlugin.ts | 48 ++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/systemMetadataPlugin.ts diff --git a/packages/backend/package.json b/packages/backend/package.json index 2af36b8077..3ea09f7540 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -69,7 +69,8 @@ "@opentelemetry/auto-instrumentations-node": "^0.61.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "example-app": "link:../app" + "example-app": "link:../app", + "express-promise-router": "^4.1.0" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 9282c51f22..8f8fd106d6 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -69,6 +69,7 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); +backend.add(import('./systemMetadataPlugin')); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); backend.add(import('@backstage/plugin-mcp-actions-backend')); diff --git a/packages/backend/src/systemMetadataPlugin.ts b/packages/backend/src/systemMetadataPlugin.ts new file mode 100644 index 0000000000..434e708073 --- /dev/null +++ b/packages/backend/src/systemMetadataPlugin.ts @@ -0,0 +1,48 @@ +/* + * Copyright 2025 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 { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import Router from 'express-promise-router'; + +/** + * Example plugin that shows how to reveal all installed plugins with the + * system metadata API. + */ +export default createBackendPlugin({ + pluginId: 'system-metadata-router', + register: reg => { + reg.registerInit({ + deps: { + systemMetadata: coreServices.rootSystemMetadata, + rootHttpRouter: coreServices.rootHttpRouter, + }, + async init({ systemMetadata, rootHttpRouter }) { + const router = Router(); + router.get('/plugins', async (_, res) => { + const plugins = (await systemMetadata.getInstalledPlugins()).toSorted( + (a, b) => a.pluginId.localeCompare(b.pluginId), + ); + res.json(plugins); + }); + + rootHttpRouter.use('/.backstage/systemMetadata', router); + }, + }); + }, +}); From 757203bfbe0a7c9bc15a241568abf110cd4e2e1f Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 10:15:07 -0500 Subject: [PATCH 30/42] fix lockfile Signed-off-by: aramissennyeydd --- yarn.lock | 1 + 1 file changed, 1 insertion(+) diff --git a/yarn.lock b/yarn.lock index 98c89bb0ae..0b696ed0b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30346,6 +30346,7 @@ __metadata: "@opentelemetry/exporter-prometheus": "npm:^0.54.0" "@opentelemetry/sdk-node": "npm:^0.54.0" example-app: "link:../app" + express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft From 77fb3f37de90f6ec7412760e8c7e52e0839694b9 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 11:41:48 -0500 Subject: [PATCH 31/42] rework to use test backend Signed-off-by: aramissennyeydd --- .../RootSystemMetadataService.test.ts | 121 ++++++++---------- .../src/services/mockServices.ts | 7 +- .../src/wiring/TestBackend.ts | 1 + 3 files changed, 62 insertions(+), 67 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index b2d7b52083..036840d103 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -14,72 +14,66 @@ * limitations under the License. */ -import { mockServices } from '@backstage/backend-test-utils'; -import { default as getPort } from 'get-port'; +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; import { coreServices, createBackendPlugin, createServiceFactory, } from '@backstage/backend-plugin-api'; -import { createBackend } from '../../CreateBackend'; -import { Backend } from '@backstage/backend-app-api'; import Router from 'express-promise-router'; +import request from 'supertest'; +import { rootSystemMetadataServiceFactory } from './rootSystemMetadataServiceFactory'; describe('SystemMetadataService', () => { describe('returns plugins from config', () => { - let port: number; - let instance: Backend; - beforeEach(async () => { - port = await getPort(); - instance = createBackend(); - instance.add( - createBackendPlugin({ - pluginId: 'test-plugin', - register(reg) { - reg.registerInit({ - deps: { - systemMetadata: coreServices.rootSystemMetadata, - rootHttpRouter: coreServices.rootHttpRouter, - }, - init: async ({ systemMetadata, rootHttpRouter }) => { - const router = Router(); - router.use('/plugins', async (_, res) => { - res.json(await systemMetadata.getInstalledPlugins()); - }); - rootHttpRouter.use('/systemMetadata', router); - }, - }); + const testPlugin = createBackendPlugin({ + pluginId: 'test-plugin', + register(reg) { + reg.registerInit({ + deps: { + systemMetadata: coreServices.rootSystemMetadata, + rootHttpRouter: coreServices.rootHttpRouter, }, - }), - ); + init: async ({ systemMetadata, rootHttpRouter }) => { + const router = Router(); + router.use('/plugins', async (_, res) => { + res.json(await systemMetadata.getInstalledPlugins()); + }); + rootHttpRouter.use('/systemMetadata', router); + }, + }); + }, }); it('should list all known instances', async () => { - instance.add( - mockServices.rootConfig.factory({ - data: { - backend: { - listen: { - port, + const { server } = await startTestBackend({ + features: [ + testPlugin, + rootSystemMetadataServiceFactory, + mockServices.rootConfig.factory({ + data: { + backend: { + listen: { + port: 0, + }, + baseUrl: `http://localhost:0`, }, - baseUrl: `http://localhost:${port}`, }, - }, - }), - ); - await instance.start(); + }), + ], + }); - const instanceResponse = await fetch( - `http://localhost:${port}/systemMetadata/plugins`, + const instanceResponse = await request(server).get( + `/systemMetadata/plugins`, ); expect(instanceResponse.status).toBe(200); - await expect(instanceResponse.json()).resolves.toMatchObject([ + expect(instanceResponse.body).toMatchObject([ { hosts: [ { - external: `http://localhost:${port}`, - internal: `http://localhost:${port}`, + external: `http://localhost:0`, + internal: `http://localhost:0`, }, ], pluginId: 'test-plugin', @@ -92,9 +86,9 @@ describe('SystemMetadataService', () => { data: { backend: { listen: { - port, + port: 0, }, - baseUrl: `http://localhost:${port}`, + baseUrl: `http://localhost:0`, }, }, }); @@ -103,20 +97,21 @@ describe('SystemMetadataService', () => { deps: {}, factory: () => config, }); - instance.add(configFactory); - await instance.start(); + const { server } = await startTestBackend({ + features: [testPlugin, configFactory, rootSystemMetadataServiceFactory], + }); - const instance1Response = await fetch( - `http://localhost:${port}/systemMetadata/plugins`, + const initialResponse = await request(server).get( + `/systemMetadata/plugins`, ); - expect(instance1Response.status).toBe(200); - await expect(instance1Response.json()).resolves.toMatchObject([ + expect(initialResponse.status).toBe(200); + expect(initialResponse.body).toMatchObject([ { hosts: [ { - external: `http://localhost:${port}`, - internal: `http://localhost:${port}`, + external: `http://localhost:0`, + internal: `http://localhost:0`, }, ], pluginId: 'test-plugin', @@ -127,9 +122,9 @@ describe('SystemMetadataService', () => { data: { backend: { listen: { - port, + port: 0, }, - baseUrl: `http://localhost:${port}`, + baseUrl: `http://localhost:0`, }, discovery: { endpoints: [ @@ -142,12 +137,12 @@ describe('SystemMetadataService', () => { }, }); - const responseAfterUpdate = await fetch( - `http://localhost:${port}/systemMetadata/plugins`, + const responseAfterUpdate = await request(server).get( + `/systemMetadata/plugins`, ); expect(responseAfterUpdate.status).toBe(200); - await expect(responseAfterUpdate.json()).resolves.toMatchObject([ + expect(responseAfterUpdate.body).toMatchObject([ { hosts: [ { @@ -160,17 +155,13 @@ describe('SystemMetadataService', () => { { hosts: [ { - external: `http://localhost:${port}`, - internal: `http://localhost:${port}`, + external: `http://localhost:0`, + internal: `http://localhost:0`, }, ], pluginId: 'test-plugin', }, ]); }); - - afterEach(async () => { - await instance.stop(); - }); }); }); diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 0c19bf40ca..803641453c 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -45,6 +45,7 @@ import { createServiceFactory, RootLoggerService, RootSystemMetadataService, + RootInstanceMetadataServicePluginInfo, } from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { EventsService, eventsServiceRef } from '@backstage/plugin-events-node'; @@ -560,9 +561,11 @@ export namespace mockServices { })); } - export function rootInstanceMetadata(): RootInstanceMetadataService { + export function rootInstanceMetadata(options?: { + plugins: RootInstanceMetadataServicePluginInfo[]; + }): RootInstanceMetadataService { return { - getInstalledPlugins: () => Promise.resolve([]), + getInstalledPlugins: () => Promise.resolve(options?.plugins ?? []), }; } export namespace rootInstanceMetadata { diff --git a/packages/backend-test-utils/src/wiring/TestBackend.ts b/packages/backend-test-utils/src/wiring/TestBackend.ts index cdfa1fc695..3dc1472fba 100644 --- a/packages/backend-test-utils/src/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/wiring/TestBackend.ts @@ -88,6 +88,7 @@ export const defaultServiceFactories = [ mockServices.userInfo.factory(), mockServices.urlReader.factory(), mockServices.events.factory(), + mockServices.rootSystemMetadata.factory(), // Alpha services actionsRegistryServiceMock.factory(), From dbf5eae24dcb088147e429b4d99011a81ec59aab Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 13:32:05 -0500 Subject: [PATCH 32/42] remove idea of hosts Signed-off-by: aramissennyeydd --- .../RootSystemMetadataService.test.ts | 24 ----------------- .../lib/DefaultRootSystemMetadataService.ts | 27 +++++++------------ .../definitions/RootSystemMetadataService.ts | 1 - 3 files changed, 9 insertions(+), 43 deletions(-) diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index 036840d103..a440828362 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -70,12 +70,6 @@ describe('SystemMetadataService', () => { expect(instanceResponse.status).toBe(200); expect(instanceResponse.body).toMatchObject([ { - hosts: [ - { - external: `http://localhost:0`, - internal: `http://localhost:0`, - }, - ], pluginId: 'test-plugin', }, ]); @@ -108,12 +102,6 @@ describe('SystemMetadataService', () => { expect(initialResponse.status).toBe(200); expect(initialResponse.body).toMatchObject([ { - hosts: [ - { - external: `http://localhost:0`, - internal: `http://localhost:0`, - }, - ], pluginId: 'test-plugin', }, ]); @@ -144,21 +132,9 @@ describe('SystemMetadataService', () => { expect(responseAfterUpdate.status).toBe(200); expect(responseAfterUpdate.body).toMatchObject([ { - hosts: [ - { - external: 'http://test.internal', - internal: 'http://test.internal', - }, - ], pluginId: 'your-new-plugin', }, { - hosts: [ - { - external: `http://localhost:0`, - internal: `http://localhost:0`, - }, - ], pluginId: 'test-plugin', }, ]); diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts index 4300cc94d3..be1ab6b818 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts +++ b/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts @@ -31,7 +31,6 @@ export class DefaultRootSystemMetadataService { #hostDiscovery: HostDiscovery; #instanceMetadata: RootInstanceMetadataService; - #config: RootConfigService; constructor(options: { logger: LoggerService; config: RootConfigService; @@ -46,7 +45,6 @@ export class DefaultRootSystemMetadataService }); }); this.#instanceMetadata = options.instanceMetadata; - this.#config = options.config; } public static create(pluginEnv: { @@ -61,22 +59,15 @@ export class DefaultRootSystemMetadataService RootSystemMetadataServicePluginInfo[] > { const resolutions = await this.#hostDiscovery.listResolutions(); - const instanceAddress = this.#hostDiscovery.getInstanceAddress( - this.#config, - ); - const currentInstance = await this.#instanceMetadata.getInstalledPlugins(); - for (const plugin of currentInstance) { - if (!resolutions.has(plugin.pluginId)) { - resolutions.set(plugin.pluginId, []); - } - resolutions.get(plugin.pluginId)?.push(instanceAddress); + const plugins = []; + for (const pluginId of resolutions.keys()) { + plugins.push({ pluginId }); } - return Array.from(resolutions.entries()).map(([pluginId, targets]) => ({ - pluginId, - hosts: Array.from(targets).filter( - (target): target is { external: string; internal: string } => - Object.keys(target).length > 0, - ), - })); + + for (const plugin of await this.#instanceMetadata.getInstalledPlugins()) { + plugins.push({ pluginId: plugin.pluginId }); + } + + return plugins; } } diff --git a/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts index 4e174a2c59..67cc43f8af 100644 --- a/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts +++ b/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts @@ -17,7 +17,6 @@ /** @public */ export interface RootSystemMetadataServicePluginInfo { readonly pluginId: string; - readonly hosts: (string | { external: string; internal: string })[]; } /** @public */ From 2b6279edb3dd19d9f7887ce3eac1941332546c8a Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 14:04:40 -0500 Subject: [PATCH 33/42] fix api reports Signed-off-by: aramissennyeydd --- packages/backend-plugin-api/report.api.md | 8 -------- packages/backend-test-utils/src/services/mockServices.ts | 7 ++----- 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index fdca63ec6b..17a407a4eb 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -643,14 +643,6 @@ export interface RootSystemMetadataService { // @public (undocumented) export interface RootSystemMetadataServicePluginInfo { - // (undocumented) - readonly hosts: ( - | string - | { - external: string; - internal: string; - } - )[]; // (undocumented) readonly pluginId: string; } diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 803641453c..0c19bf40ca 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -45,7 +45,6 @@ import { createServiceFactory, RootLoggerService, RootSystemMetadataService, - RootInstanceMetadataServicePluginInfo, } from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { EventsService, eventsServiceRef } from '@backstage/plugin-events-node'; @@ -561,11 +560,9 @@ export namespace mockServices { })); } - export function rootInstanceMetadata(options?: { - plugins: RootInstanceMetadataServicePluginInfo[]; - }): RootInstanceMetadataService { + export function rootInstanceMetadata(): RootInstanceMetadataService { return { - getInstalledPlugins: () => Promise.resolve(options?.plugins ?? []), + getInstalledPlugins: () => Promise.resolve([]), }; } export namespace rootInstanceMetadata { From db45906aa1196d6044df4b1556357f4f61375f04 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Mon, 10 Nov 2025 14:36:49 -0500 Subject: [PATCH 34/42] move to alpha Signed-off-by: aramissennyeydd --- .changeset/old-cats-shake.md | 2 +- packages/backend-defaults/package.json | 4 -- packages/backend-defaults/report-alpha.api.md | 8 ++++ .../backend-defaults/report-discovery.api.md | 6 --- .../report-rootSystemMetadata.api.md | 40 ------------------- .../backend-defaults/src/CreateBackend.ts | 6 --- .../RootSystemMetadataService.test.ts | 3 +- .../entrypoints/rootSystemMetadata/index.ts | 0 .../lib/DefaultRootSystemMetadataService.ts | 6 ++- .../rootSystemMetadataServiceFactory.ts | 3 +- packages/backend-defaults/src/alpha/index.ts | 1 + .../entrypoints/discovery/HostDiscovery.ts | 4 +- packages/backend-plugin-api/report.api.md | 19 --------- .../RootSystemMetadataService.ts | 0 .../backend-plugin-api/src/alpha/index.ts | 14 +++++-- packages/backend-plugin-api/src/alpha/refs.ts | 11 +++++ .../src/services/definitions/coreServices.ts | 11 ----- .../src/services/definitions/index.ts | 4 -- packages/backend-test-utils/report.api.md | 14 ------- .../src/services/mockServices.ts | 26 ------------ .../src/wiring/TestBackend.ts | 1 - packages/backend/src/index.ts | 2 + packages/backend/src/systemMetadataPlugin.ts | 3 +- 23 files changed, 45 insertions(+), 143 deletions(-) delete mode 100644 packages/backend-defaults/report-rootSystemMetadata.api.md rename packages/backend-defaults/src/{ => alpha}/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts (96%) rename packages/backend-defaults/src/{ => alpha}/entrypoints/rootSystemMetadata/index.ts (100%) rename packages/backend-defaults/src/{ => alpha}/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts (94%) rename packages/backend-defaults/src/{ => alpha}/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts (91%) rename packages/backend-plugin-api/src/{services/definitions => alpha}/RootSystemMetadataService.ts (100%) diff --git a/.changeset/old-cats-shake.md b/.changeset/old-cats-shake.md index 367e7f2062..5738f6cf86 100644 --- a/.changeset/old-cats-shake.md +++ b/.changeset/old-cats-shake.md @@ -3,4 +3,4 @@ '@backstage/backend-plugin-api': minor --- -Adds a new experimental `SystemMetadataService` for tracking the collection of Backstage instances that may be deployed at any one time. +Adds a new experimental `RootSystemMetadataService` for tracking the collection of Backstage instances that may be deployed at any one time. It currently offers a single API, `getInstalledPlugins` that returns a list of installed plugins based on config you have set up in `discovery.endpoints` as well as the plugins installed on the instance you're calling the API with. It does not handle wildcard values or fallback values. The intention is for this plugin to provide plugin authors with a simple interface to fetch a trustworthy list of all installed plugins. diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 1ebd5de801..042b9497b9 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -33,7 +33,6 @@ "./permissions": "./src/entrypoints/permissions/index.ts", "./rootConfig": "./src/entrypoints/rootConfig/index.ts", "./rootHealth": "./src/entrypoints/rootHealth/index.ts", - "./rootSystemMetadata": "./src/entrypoints/rootSystemMetadata/index.ts", "./rootHttpRouter": "./src/entrypoints/rootHttpRouter/index.ts", "./rootLifecycle": "./src/entrypoints/rootLifecycle/index.ts", "./rootLogger": "./src/entrypoints/rootLogger/index.ts", @@ -86,9 +85,6 @@ "rootHealth": [ "src/entrypoints/rootHealth/index.ts" ], - "rootSystemMetadata": [ - "src/entrypoints/rootSystemMetadata/index.ts" - ], "rootHttpRouter": [ "src/entrypoints/rootHttpRouter/index.ts" ], diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index 34f2d1066b..c6316780e5 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -6,6 +6,7 @@ import { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha'; import { ActionsService } from '@backstage/backend-plugin-api/alpha'; import { InstanceMetadataService } from '@backstage/backend-plugin-api/alpha'; +import { RootSystemMetadataService } from '@backstage/backend-plugin-api/alpha'; import { ServiceFactory } from '@backstage/backend-plugin-api'; // @public (undocumented) @@ -29,5 +30,12 @@ export const instanceMetadataServiceFactory: ServiceFactory< 'singleton' >; +// @alpha +export const rootSystemMetadataServiceFactory: ServiceFactory< + RootSystemMetadataService, + 'root', + 'singleton' +>; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-defaults/report-discovery.api.md b/packages/backend-defaults/report-discovery.api.md index 260e04a8a3..8617d7d212 100644 --- a/packages/backend-defaults/report-discovery.api.md +++ b/packages/backend-defaults/report-discovery.api.md @@ -3,7 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { Config } from '@backstage/config'; import { DiscoveryService } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { RootConfigService } from '@backstage/backend-plugin-api'; @@ -28,11 +27,6 @@ export class HostDiscovery implements DiscoveryService { // (undocumented) getExternalBaseUrl(pluginId: string): Promise; // (undocumented) - getInstanceAddress(config: Config): { - internal: string; - external: string; - }; - // (undocumented) listResolutions(): Promise< Map< string, diff --git a/packages/backend-defaults/report-rootSystemMetadata.api.md b/packages/backend-defaults/report-rootSystemMetadata.api.md deleted file mode 100644 index f871282826..0000000000 --- a/packages/backend-defaults/report-rootSystemMetadata.api.md +++ /dev/null @@ -1,40 +0,0 @@ -## API Report File for "@backstage/backend-defaults" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { LoggerService } from '@backstage/backend-plugin-api'; -import { RootConfigService } from '@backstage/backend-plugin-api'; -import { RootInstanceMetadataService } from '@backstage/backend-plugin-api'; -import { RootSystemMetadataService } from '@backstage/backend-plugin-api'; -import { RootSystemMetadataServicePluginInfo } from '@backstage/backend-plugin-api'; -import { ServiceFactory } from '@backstage/backend-plugin-api'; - -// @alpha (undocumented) -export class DefaultRootSystemMetadataService - implements RootSystemMetadataService -{ - constructor(options: { - logger: LoggerService; - config: RootConfigService; - instanceMetadata: RootInstanceMetadataService; - }); - // (undocumented) - static create(pluginEnv: { - logger: LoggerService; - config: RootConfigService; - instanceMetadata: RootInstanceMetadataService; - }): DefaultRootSystemMetadataService; - // (undocumented) - getInstalledPlugins(): Promise; -} - -// @alpha -export const rootSystemMetadataServiceFactory: ServiceFactory< - RootSystemMetadataService, - 'root', - 'singleton' ->; - -// (No @packageDocumentation comment for this package) -``` diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 4b85464640..4b201fded3 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -39,8 +39,6 @@ import { actionsRegistryServiceFactory, actionsServiceFactory, } from '@backstage/backend-defaults/alpha'; -import { instanceMetadataServiceFactory } from './alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory'; -import { rootSystemMetadataServiceFactory } from './entrypoints/rootSystemMetadata'; export const defaultServiceFactories = [ auditorServiceFactory, @@ -63,14 +61,10 @@ export const defaultServiceFactories = [ userInfoServiceFactory, urlReaderServiceFactory, eventsServiceFactory, - rootSystemMetadataServiceFactory, // alpha services actionsRegistryServiceFactory, actionsServiceFactory, - - // Unexported alpha services kept around for compatibility reasons - instanceMetadataServiceFactory, ]; /** diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts similarity index 96% rename from packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts rename to packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts index a440828362..13da5ae3c0 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts +++ b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/RootSystemMetadataService.test.ts @@ -23,6 +23,7 @@ import { import Router from 'express-promise-router'; import request from 'supertest'; import { rootSystemMetadataServiceFactory } from './rootSystemMetadataServiceFactory'; +import { rootSystemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; describe('SystemMetadataService', () => { describe('returns plugins from config', () => { @@ -31,7 +32,7 @@ describe('SystemMetadataService', () => { register(reg) { reg.registerInit({ deps: { - systemMetadata: coreServices.rootSystemMetadata, + systemMetadata: rootSystemMetadataServiceRef, rootHttpRouter: coreServices.rootHttpRouter, }, init: async ({ systemMetadata, rootHttpRouter }) => { diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/index.ts b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/index.ts similarity index 100% rename from packages/backend-defaults/src/entrypoints/rootSystemMetadata/index.ts rename to packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/index.ts diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts similarity index 94% rename from packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts rename to packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts index be1ab6b818..69bd676fe7 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts +++ b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts @@ -18,10 +18,12 @@ import { LoggerService, RootConfigService, RootInstanceMetadataService, +} from '@backstage/backend-plugin-api'; +import { HostDiscovery } from '../../../../entrypoints/discovery'; +import { RootSystemMetadataService, RootSystemMetadataServicePluginInfo, -} from '@backstage/backend-plugin-api'; -import { HostDiscovery } from '../../discovery'; +} from '@backstage/backend-plugin-api/alpha'; /** * @alpha diff --git a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts similarity index 91% rename from packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts rename to packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts index 62cd8bf3bc..5ee93d03d5 100644 --- a/packages/backend-defaults/src/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts +++ b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/rootSystemMetadataServiceFactory.ts @@ -19,6 +19,7 @@ import { createServiceFactory, } from '@backstage/backend-plugin-api'; import { DefaultRootSystemMetadataService } from './lib/DefaultRootSystemMetadataService'; +import { rootSystemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; /** * Metadata about an entire Backstage system, a collection of Backstage instances. @@ -26,7 +27,7 @@ import { DefaultRootSystemMetadataService } from './lib/DefaultRootSystemMetadat * @alpha */ export const rootSystemMetadataServiceFactory = createServiceFactory({ - service: coreServices.rootSystemMetadata, + service: rootSystemMetadataServiceRef, deps: { logger: coreServices.rootLogger, config: coreServices.rootConfig, diff --git a/packages/backend-defaults/src/alpha/index.ts b/packages/backend-defaults/src/alpha/index.ts index da63aef9de..c17e0e71cb 100644 --- a/packages/backend-defaults/src/alpha/index.ts +++ b/packages/backend-defaults/src/alpha/index.ts @@ -16,3 +16,4 @@ export { actionsRegistryServiceFactory } from './entrypoints/actionsRegistry'; export { actionsServiceFactory } from './entrypoints/actions'; +export { rootSystemMetadataServiceFactory } from './entrypoints/rootSystemMetadata'; diff --git a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts index bb2e002b0d..34b521b310 100644 --- a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts +++ b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts @@ -214,7 +214,7 @@ export class HostDiscovery implements DiscoveryService { return _targets; } - getInstanceAddress(config: Config) { + #getInstanceAddress(config: Config) { const backendBaseUrl = trimEnd(config.getString('backend.baseUrl'), '/'); const { @@ -248,7 +248,7 @@ export class HostDiscovery implements DiscoveryService { } #updateFallbackResolvers(config: Config) { - const { internal, external } = this.getInstanceAddress(config); + const { internal, external } = this.#getInstanceAddress(config); this.#internalFallbackResolver = this.#makeResolver( `${internal}/api/{{pluginId}}`, diff --git a/packages/backend-plugin-api/report.api.md b/packages/backend-plugin-api/report.api.md index 17a407a4eb..c46ed254c8 100644 --- a/packages/backend-plugin-api/report.api.md +++ b/packages/backend-plugin-api/report.api.md @@ -237,11 +237,6 @@ export namespace coreServices { 'root', 'singleton' >; - const rootSystemMetadata: ServiceRef< - RootSystemMetadataService, - 'root', - 'singleton' - >; } // @public @@ -633,20 +628,6 @@ export interface RootServiceFactoryOptions< service: ServiceRef; } -// @public (undocumented) -export interface RootSystemMetadataService { - // (undocumented) - getInstalledPlugins: () => Promise< - ReadonlyArray - >; -} - -// @public (undocumented) -export interface RootSystemMetadataServicePluginInfo { - // (undocumented) - readonly pluginId: string; -} - // @public export interface SchedulerService { createScheduledTaskRunner( diff --git a/packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts b/packages/backend-plugin-api/src/alpha/RootSystemMetadataService.ts similarity index 100% rename from packages/backend-plugin-api/src/services/definitions/RootSystemMetadataService.ts rename to packages/backend-plugin-api/src/alpha/RootSystemMetadataService.ts diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index 815b0ac8f9..f61e2bbaf1 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +export type { + RootSystemMetadataServicePluginInfo, + RootSystemMetadataService, +} from './RootSystemMetadataService'; + export type { ActionsRegistryService, ActionsRegistryActionOptions, @@ -22,11 +27,12 @@ export type { export type { ActionsService, ActionsServiceAction } from './ActionsService'; -export { actionsRegistryServiceRef, actionsServiceRef } from './refs'; - -import { createServiceRef } from '@backstage/backend-plugin-api'; - export type { BackstageInstance, SystemMetadataService, } from './services/definitions/SystemMetadataService'; +export { + actionsRegistryServiceRef, + actionsServiceRef, + rootSystemMetadataServiceRef, +} from './refs'; diff --git a/packages/backend-plugin-api/src/alpha/refs.ts b/packages/backend-plugin-api/src/alpha/refs.ts index cfbb215615..a890271364 100644 --- a/packages/backend-plugin-api/src/alpha/refs.ts +++ b/packages/backend-plugin-api/src/alpha/refs.ts @@ -45,3 +45,14 @@ export const actionsRegistryServiceRef = createServiceRef< >({ id: 'alpha.core.actionsRegistry', }); + +/** + * Read information about your current Backstage deployment. + * @alpha + */ +export const rootSystemMetadataServiceRef = createServiceRef< + import('./RootSystemMetadataService').RootSystemMetadataService +>({ + id: 'alpha.core.rootSystemMetadata', + scope: 'root', +}); diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index e5ad69e871..887b05ee4e 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -289,15 +289,4 @@ export namespace coreServices { id: 'core.rootInstanceMetadata', scope: 'root', }); - - /** - * Read information about your current Backstage deployment. - * @public - */ - export const rootSystemMetadata = createServiceRef< - import('./RootSystemMetadataService').RootSystemMetadataService - >({ - id: 'core.rootSystemMetadata', - scope: 'root', - }); } diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index d12395b636..6bcee4b043 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -72,10 +72,6 @@ export type { SchedulerServiceTaskScheduleDefinition, SchedulerServiceTaskScheduleDefinitionConfig, } from './SchedulerService'; -export type { - RootSystemMetadataServicePluginInfo, - RootSystemMetadataService, -} from './RootSystemMetadataService'; export type { UrlReaderService, UrlReaderServiceReadTreeOptions, diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index bfa46a3725..0dd46c30ac 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -38,7 +38,6 @@ import { RootHttpRouterService } from '@backstage/backend-plugin-api'; import { RootInstanceMetadataService } from '@backstage/backend-plugin-api'; import { RootLifecycleService } from '@backstage/backend-plugin-api'; import { RootLoggerService } from '@backstage/backend-plugin-api'; -import { RootSystemMetadataService } from '@backstage/backend-plugin-api'; import { SchedulerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; import { ServiceRef } from '@backstage/backend-plugin-api'; @@ -383,19 +382,6 @@ export namespace mockServices { ) => ServiceMock; } // (undocumented) - export function rootSystemMetadata(): RootSystemMetadataService; - // (undocumented) - export namespace rootSystemMetadata { - const factory: () => ServiceFactory< - RootSystemMetadataService, - 'root', - 'singleton' | 'multiton' - >; - const mock: ( - partialImpl?: Partial | undefined, - ) => ServiceMock; - } - // (undocumented) export function scheduler(): SchedulerService; // (undocumented) export namespace scheduler { diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 0c19bf40ca..d37c82fa6c 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -43,8 +43,6 @@ import { UserInfoService, coreServices, createServiceFactory, - RootLoggerService, - RootSystemMetadataService, } from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { EventsService, eventsServiceRef } from '@backstage/plugin-events-node'; @@ -574,28 +572,4 @@ export namespace mockServices { rootInstanceMetadata, ); } - - export function rootSystemMetadata(): RootSystemMetadataService { - return { - getInstalledPlugins: () => Promise.resolve([]), - }; - } - export namespace rootSystemMetadata { - /** - * Creates a functional mock factory for the - * {@link @backstage/backend-plugin-api#coreServices.systemMetadata}. - */ - export const factory = simpleFactoryWithOptions( - coreServices.rootSystemMetadata, - rootSystemMetadata, - ); - /** - * Creates a mock of the - * {@link @backstage/backend-events-node#systemMetadata}, optionally - * with some given method implementations. - */ - export const mock = simpleMock(coreServices.rootSystemMetadata, () => ({ - getInstalledPlugins: jest.fn(), - })); - } } diff --git a/packages/backend-test-utils/src/wiring/TestBackend.ts b/packages/backend-test-utils/src/wiring/TestBackend.ts index 3dc1472fba..cdfa1fc695 100644 --- a/packages/backend-test-utils/src/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/wiring/TestBackend.ts @@ -88,7 +88,6 @@ export const defaultServiceFactories = [ mockServices.userInfo.factory(), mockServices.urlReader.factory(), mockServices.events.factory(), - mockServices.rootSystemMetadata.factory(), // Alpha services actionsRegistryServiceMock.factory(), diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 8f8fd106d6..b4d2862d6f 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -15,6 +15,7 @@ */ import { createBackend } from '@backstage/backend-defaults'; +import { rootSystemMetadataServiceFactory } from '@backstage/backend-defaults/alpha'; import { coreServices, createBackendFeatureLoader, @@ -70,6 +71,7 @@ backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); backend.add(import('./systemMetadataPlugin')); +backend.add(rootSystemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); backend.add(import('@backstage/plugin-mcp-actions-backend')); diff --git a/packages/backend/src/systemMetadataPlugin.ts b/packages/backend/src/systemMetadataPlugin.ts index 434e708073..df74962d6f 100644 --- a/packages/backend/src/systemMetadataPlugin.ts +++ b/packages/backend/src/systemMetadataPlugin.ts @@ -18,6 +18,7 @@ import { coreServices, createBackendPlugin, } from '@backstage/backend-plugin-api'; +import { rootSystemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; import Router from 'express-promise-router'; /** @@ -29,7 +30,7 @@ export default createBackendPlugin({ register: reg => { reg.registerInit({ deps: { - systemMetadata: coreServices.rootSystemMetadata, + systemMetadata: rootSystemMetadataServiceRef, rootHttpRouter: coreServices.rootHttpRouter, }, async init({ systemMetadata, rootHttpRouter }) { From d924a5cd4f346e5e380641b4458123d3f8501994 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Tue, 11 Nov 2025 17:11:26 -0500 Subject: [PATCH 35/42] fix rebase issues Signed-off-by: aramissennyeydd --- packages/backend-test-utils/report.api.md | 2 +- packages/backend-test-utils/src/services/mockServices.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/backend-test-utils/report.api.md b/packages/backend-test-utils/report.api.md index 0dd46c30ac..da5002275b 100644 --- a/packages/backend-test-utils/report.api.md +++ b/packages/backend-test-utils/report.api.md @@ -352,7 +352,7 @@ export namespace mockServices { factory: () => ServiceFactory< RootInstanceMetadataService, 'root', - 'singleton' | 'multiton' + 'singleton' >; } // (undocumented) diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index d37c82fa6c..9e941db3bb 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -43,6 +43,7 @@ import { UserInfoService, coreServices, createServiceFactory, + RootLoggerService, } from '@backstage/backend-plugin-api'; import { ConfigReader } from '@backstage/config'; import { EventsService, eventsServiceRef } from '@backstage/plugin-events-node'; From 5ea6957a6d3da413805ebb098e28e71466e46780 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 12 Nov 2025 15:14:50 -0500 Subject: [PATCH 36/42] simplify implementation Signed-off-by: aramissennyeydd --- .../lib/DefaultRootSystemMetadataService.ts | 27 +++--- .../entrypoints/discovery/HostDiscovery.ts | 84 ++----------------- .../src/entrypoints/discovery/parsing.ts | 41 +++++++++ 3 files changed, 62 insertions(+), 90 deletions(-) create mode 100644 packages/backend-defaults/src/entrypoints/discovery/parsing.ts diff --git a/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts index 69bd676fe7..edbffdfb0e 100644 --- a/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts +++ b/packages/backend-defaults/src/alpha/entrypoints/rootSystemMetadata/lib/DefaultRootSystemMetadataService.ts @@ -19,11 +19,17 @@ import { RootConfigService, RootInstanceMetadataService, } from '@backstage/backend-plugin-api'; -import { HostDiscovery } from '../../../../entrypoints/discovery'; import { RootSystemMetadataService, RootSystemMetadataServicePluginInfo, } from '@backstage/backend-plugin-api/alpha'; +import { getEndpoints } from '../../../../entrypoints/discovery/parsing'; +import { Config } from '@backstage/config'; + +function getPlugins(config: Config): string[] { + const endpoints = getEndpoints(config); + return Array.from(new Set(endpoints.flatMap(endpoint => endpoint.plugins))); +} /** * @alpha @@ -31,20 +37,17 @@ import { export class DefaultRootSystemMetadataService implements RootSystemMetadataService { - #hostDiscovery: HostDiscovery; + #plugins: string[]; #instanceMetadata: RootInstanceMetadataService; constructor(options: { logger: LoggerService; config: RootConfigService; instanceMetadata: RootInstanceMetadataService; }) { - this.#hostDiscovery = HostDiscovery.fromConfig(options.config, { - logger: options.logger, - }); - options.config.subscribe?.(() => { - this.#hostDiscovery = HostDiscovery.fromConfig(options.config, { - logger: options.logger, - }); + const { config } = options; + this.#plugins = getPlugins(config); + config.subscribe?.(() => { + this.#plugins = getPlugins(config); }); this.#instanceMetadata = options.instanceMetadata; } @@ -60,11 +63,7 @@ export class DefaultRootSystemMetadataService public async getInstalledPlugins(): Promise< RootSystemMetadataServicePluginInfo[] > { - const resolutions = await this.#hostDiscovery.listResolutions(); - const plugins = []; - for (const pluginId of resolutions.keys()) { - plugins.push({ pluginId }); - } + const plugins = this.#plugins.map(pluginId => ({ pluginId })); for (const plugin of await this.#instanceMetadata.getInstalledPlugins()) { plugins.push({ pluginId: plugin.pluginId }); diff --git a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts index 34b521b310..18ed72a085 100644 --- a/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts +++ b/packages/backend-defaults/src/entrypoints/discovery/HostDiscovery.ts @@ -23,6 +23,7 @@ import { import { readHttpServerOptions } from '../rootHttpRouter/http/config'; import { SrvResolvers } from './SrvResolvers'; import { trimEnd } from 'lodash'; +import { getEndpoints } from './parsing'; type Resolver = (pluginId: string) => Promise; @@ -150,11 +151,6 @@ export class HostDiscovery implements DiscoveryService { throw new Error('Not initialized'); }; - #resolutions: Map< - string, - Set<{ hash: string; target: { internal?: string; external?: string } }> - > = new Map(); - static fromConfig(config: RootConfigService, options?: HostDiscoveryOptions) { const discovery = new HostDiscovery(new SrvResolvers()); @@ -198,23 +194,12 @@ export class HostDiscovery implements DiscoveryService { return await resolver(pluginId); } - async listResolutions() { - const _targets: Map = - new Map(); - for (const [pluginId, targets] of this.#resolutions.entries()) { - const currentTargets = [...targets.values()].map(({ target }) => ({ - ...target, - })); - if (_targets.has(pluginId)) { - _targets.set(pluginId, [..._targets.get(pluginId)!, ...currentTargets]); - } else { - _targets.set(pluginId, currentTargets); - } - } - return _targets; + #updateResolvers(config: Config, defaultEndpoints?: HostDiscoveryEndpoint[]) { + this.#updateFallbackResolvers(config); + this.#updatePluginResolvers(config, defaultEndpoints); } - #getInstanceAddress(config: Config) { + #updateFallbackResolvers(config: Config) { const backendBaseUrl = trimEnd(config.getString('backend.baseUrl'), '/'); const { @@ -236,26 +221,12 @@ export class HostDiscovery implements DiscoveryService { host = `[${host}]`; } - return { - internal: `${protocol}://${host}:${listenPort}`, - external: backendBaseUrl, - }; - } - - #updateResolvers(config: Config, defaultEndpoints?: HostDiscoveryEndpoint[]) { - this.#updateFallbackResolvers(config); - this.#updatePluginResolvers(config, defaultEndpoints); - } - - #updateFallbackResolvers(config: Config) { - const { internal, external } = this.#getInstanceAddress(config); - this.#internalFallbackResolver = this.#makeResolver( - `${internal}/api/{{pluginId}}`, + `${protocol}://${host}:${listenPort}/api/{{pluginId}}`, false, ); this.#externalFallbackResolver = this.#makeResolver( - `${external}/api/{{pluginId}}`, + `${backendBaseUrl}/api/{{pluginId}}`, false, ); } @@ -268,25 +239,7 @@ export class HostDiscovery implements DiscoveryService { const endpoints = defaultEndpoints?.slice() ?? []; // Allow config to override the default endpoints - const endpointConfigs = config.getOptionalConfigArray( - 'discovery.endpoints', - ); - for (const endpointConfig of endpointConfigs ?? []) { - if (typeof endpointConfig.get('target') === 'string') { - endpoints.push({ - target: endpointConfig.getString('target'), - plugins: endpointConfig.getStringArray('plugins'), - }); - } else { - endpoints.push({ - target: { - internal: endpointConfig.getOptionalString('target.internal'), - external: endpointConfig.getOptionalString('target.external'), - }, - plugins: endpointConfig.getStringArray('plugins'), - }); - } - } + endpoints.push(...getEndpoints(config)); // Build up a new set of resolvers const internalResolvers: Map = new Map(); @@ -294,7 +247,6 @@ export class HostDiscovery implements DiscoveryService { for (const { target, plugins } of endpoints) { let internalResolver: Resolver | undefined; let externalResolver: Resolver | undefined; - this.#addResolution(target, plugins); if (typeof target === 'string') { internalResolver = externalResolver = this.#makeResolver(target, false); @@ -324,26 +276,6 @@ export class HostDiscovery implements DiscoveryService { this.#externalResolvers = externalResolvers; } - #addResolution( - target: string | { internal?: string; external?: string }, - plugins: string[], - ) { - for (const pluginId of plugins) { - if (!this.#resolutions.has(pluginId)) { - this.#resolutions.set(pluginId, new Set()); - } - const standardizedTarget = - typeof target === 'string' - ? { external: target, internal: target } - : target; - const matchingResolution = this.#resolutions.get(pluginId)!; - const hash = JSON.stringify(standardizedTarget); - if (![...matchingResolution.values()].some(e => e.hash === hash)) { - matchingResolution.add({ target: standardizedTarget, hash }); - } - } - } - #makeResolver(urlPattern: string, allowSrv: boolean): Resolver { const withPluginId = (pluginId: string, url: string) => { return url.replace( diff --git a/packages/backend-defaults/src/entrypoints/discovery/parsing.ts b/packages/backend-defaults/src/entrypoints/discovery/parsing.ts new file mode 100644 index 0000000000..3a02fc4f51 --- /dev/null +++ b/packages/backend-defaults/src/entrypoints/discovery/parsing.ts @@ -0,0 +1,41 @@ +/* + * Copyright 2025 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 { Config } from '@backstage/config'; +import type { HostDiscoveryEndpoint } from './HostDiscovery'; + +export function getEndpoints(config: Config): HostDiscoveryEndpoint[] { + const endpoints: HostDiscoveryEndpoint[] = []; + // Allow config to override the default endpoints + const endpointConfigs = config.getOptionalConfigArray('discovery.endpoints'); + for (const endpointConfig of endpointConfigs ?? []) { + if (typeof endpointConfig.get('target') === 'string') { + endpoints.push({ + target: endpointConfig.getString('target'), + plugins: endpointConfig.getStringArray('plugins'), + }); + } else { + endpoints.push({ + target: { + internal: endpointConfig.getOptionalString('target.internal'), + external: endpointConfig.getOptionalString('target.external'), + }, + plugins: endpointConfig.getStringArray('plugins'), + }); + } + } + return endpoints; +} From 3c6161d3ae3416122ff9612427155222e4c125d1 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 12 Nov 2025 15:17:35 -0500 Subject: [PATCH 37/42] delete system metadata custom plugin Signed-off-by: aramissennyeydd --- packages/backend/src/index.ts | 1 - packages/backend/src/systemMetadataPlugin.ts | 49 -------------------- 2 files changed, 50 deletions(-) delete mode 100644 packages/backend/src/systemMetadataPlugin.ts diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index b4d2862d6f..14eb36a3a6 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -70,7 +70,6 @@ backend.add(searchLoader); backend.add(import('@backstage/plugin-techdocs-backend')); backend.add(import('@backstage/plugin-signals-backend')); backend.add(import('@backstage/plugin-notifications-backend')); -backend.add(import('./systemMetadataPlugin')); backend.add(rootSystemMetadataServiceFactory); backend.add(import('@backstage/plugin-events-backend-module-google-pubsub')); diff --git a/packages/backend/src/systemMetadataPlugin.ts b/packages/backend/src/systemMetadataPlugin.ts deleted file mode 100644 index df74962d6f..0000000000 --- a/packages/backend/src/systemMetadataPlugin.ts +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2025 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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { rootSystemMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; -import Router from 'express-promise-router'; - -/** - * Example plugin that shows how to reveal all installed plugins with the - * system metadata API. - */ -export default createBackendPlugin({ - pluginId: 'system-metadata-router', - register: reg => { - reg.registerInit({ - deps: { - systemMetadata: rootSystemMetadataServiceRef, - rootHttpRouter: coreServices.rootHttpRouter, - }, - async init({ systemMetadata, rootHttpRouter }) { - const router = Router(); - router.get('/plugins', async (_, res) => { - const plugins = (await systemMetadata.getInstalledPlugins()).toSorted( - (a, b) => a.pluginId.localeCompare(b.pluginId), - ); - res.json(plugins); - }); - - rootHttpRouter.use('/.backstage/systemMetadata', router); - }, - }); - }, -}); From 570b6ed13942aca8efc802f24a0407ca8f80b044 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 12 Nov 2025 15:43:12 -0500 Subject: [PATCH 38/42] fix report Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-discovery.api.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/packages/backend-defaults/report-discovery.api.md b/packages/backend-defaults/report-discovery.api.md index 8617d7d212..ddbbd9d025 100644 --- a/packages/backend-defaults/report-discovery.api.md +++ b/packages/backend-defaults/report-discovery.api.md @@ -26,16 +26,6 @@ export class HostDiscovery implements DiscoveryService { getBaseUrl(pluginId: string): Promise; // (undocumented) getExternalBaseUrl(pluginId: string): Promise; - // (undocumented) - listResolutions(): Promise< - Map< - string, - { - internal?: string; - external?: string; - }[] - > - >; } // @public From feb70c3395b52ffbb5c58c000eea5563e8702c3f Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 3 Dec 2025 14:57:50 -0500 Subject: [PATCH 39/42] fix api reports Signed-off-by: aramissennyeydd --- packages/backend-defaults/report-alpha.api.md | 8 ------- .../backend-plugin-api/report-alpha.api.md | 21 +++++++++++++++++++ .../backend-plugin-api/src/alpha/index.ts | 4 ---- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/packages/backend-defaults/report-alpha.api.md b/packages/backend-defaults/report-alpha.api.md index c6316780e5..c40517863a 100644 --- a/packages/backend-defaults/report-alpha.api.md +++ b/packages/backend-defaults/report-alpha.api.md @@ -5,7 +5,6 @@ ```ts import { ActionsRegistryService } from '@backstage/backend-plugin-api/alpha'; import { ActionsService } from '@backstage/backend-plugin-api/alpha'; -import { InstanceMetadataService } from '@backstage/backend-plugin-api/alpha'; import { RootSystemMetadataService } from '@backstage/backend-plugin-api/alpha'; import { ServiceFactory } from '@backstage/backend-plugin-api'; @@ -23,13 +22,6 @@ export const actionsServiceFactory: ServiceFactory< 'singleton' >; -// @alpha @deprecated (undocumented) -export const instanceMetadataServiceFactory: ServiceFactory< - InstanceMetadataService, - 'root', - 'singleton' ->; - // @alpha export const rootSystemMetadataServiceFactory: ServiceFactory< RootSystemMetadataService, diff --git a/packages/backend-plugin-api/report-alpha.api.md b/packages/backend-plugin-api/report-alpha.api.md index cefed593c0..e06e0c45d2 100644 --- a/packages/backend-plugin-api/report-alpha.api.md +++ b/packages/backend-plugin-api/report-alpha.api.md @@ -103,5 +103,26 @@ export const actionsServiceRef: ServiceRef< 'singleton' >; +// @public (undocumented) +export interface RootSystemMetadataService { + // (undocumented) + getInstalledPlugins: () => Promise< + ReadonlyArray + >; +} + +// @public (undocumented) +export interface RootSystemMetadataServicePluginInfo { + // (undocumented) + readonly pluginId: string; +} + +// @alpha +export const rootSystemMetadataServiceRef: ServiceRef< + RootSystemMetadataService, + 'root', + 'singleton' +>; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/backend-plugin-api/src/alpha/index.ts b/packages/backend-plugin-api/src/alpha/index.ts index f61e2bbaf1..56f02f5275 100644 --- a/packages/backend-plugin-api/src/alpha/index.ts +++ b/packages/backend-plugin-api/src/alpha/index.ts @@ -27,10 +27,6 @@ export type { export type { ActionsService, ActionsServiceAction } from './ActionsService'; -export type { - BackstageInstance, - SystemMetadataService, -} from './services/definitions/SystemMetadataService'; export { actionsRegistryServiceRef, actionsServiceRef, From defc7cd33ec73eea35f596bebbd40df941fbea53 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 3 Dec 2025 15:04:19 -0500 Subject: [PATCH 40/42] fix rebase issues Signed-off-by: aramissennyeydd --- packages/backend-defaults/src/CreateBackend.ts | 4 ++++ packages/backend/package.json | 3 +-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 4b201fded3..9f8116a996 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -39,6 +39,7 @@ import { actionsRegistryServiceFactory, actionsServiceFactory, } from '@backstage/backend-defaults/alpha'; +import { instanceMetadataServiceFactory } from './alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory'; export const defaultServiceFactories = [ auditorServiceFactory, @@ -65,6 +66,9 @@ export const defaultServiceFactories = [ // alpha services actionsRegistryServiceFactory, actionsServiceFactory, + + // Unexported alpha services kept around for compatibility reasons + instanceMetadataServiceFactory, ]; /** diff --git a/packages/backend/package.json b/packages/backend/package.json index 3ea09f7540..2af36b8077 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -69,8 +69,7 @@ "@opentelemetry/auto-instrumentations-node": "^0.61.0", "@opentelemetry/exporter-prometheus": "^0.54.0", "@opentelemetry/sdk-node": "^0.54.0", - "example-app": "link:../app", - "express-promise-router": "^4.1.0" + "example-app": "link:../app" }, "devDependencies": { "@backstage/cli": "workspace:^" From 20101adc5fc3ba7b2589da9a57fe7a02703f94c4 Mon Sep 17 00:00:00 2001 From: aramissennyeydd Date: Wed, 3 Dec 2025 16:24:59 -0500 Subject: [PATCH 41/42] fix lockfile Signed-off-by: aramissennyeydd --- yarn.lock | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 0b696ed0b1..98c89bb0ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30346,7 +30346,6 @@ __metadata: "@opentelemetry/exporter-prometheus": "npm:^0.54.0" "@opentelemetry/sdk-node": "npm:^0.54.0" example-app: "link:../app" - express-promise-router: "npm:^4.1.0" languageName: unknown linkType: soft From 0700f49a4cab0fd69232fd9629f69a5da1162414 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 9 Dec 2025 12:29:15 +0100 Subject: [PATCH 42/42] Apply suggestions from code review Signed-off-by: Patrik Oldsberg --- .changeset/old-cats-shake.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/old-cats-shake.md b/.changeset/old-cats-shake.md index 5738f6cf86..3ca30a0421 100644 --- a/.changeset/old-cats-shake.md +++ b/.changeset/old-cats-shake.md @@ -1,5 +1,5 @@ --- -'@backstage/backend-defaults': minor +'@backstage/backend-defaults': patch '@backstage/backend-plugin-api': minor ---