diff --git a/packages/backend-app-api/src/wiring/BackendInitializer.ts b/packages/backend-app-api/src/wiring/BackendInitializer.ts index 2f3a11b7e0..ee62ef966d 100644 --- a/packages/backend-app-api/src/wiring/BackendInitializer.ts +++ b/packages/backend-app-api/src/wiring/BackendInitializer.ts @@ -148,24 +148,6 @@ function createRootInstanceMetadataServiceFactory( }); } -function createDeprecatedInstanceMetadataServiceFactory() { - return createServiceFactory({ - service: instanceMetadataServiceRef, - deps: { - instanceMetadata: coreServices.rootInstanceMetadata, - }, - factory: async ({ instanceMetadata }) => { - const plugins = await instanceMetadata.getInstalledPlugins(); - const service = { - getInstalledFeatures: () => - plugins.map(e => ({ type: 'plugin' as const, pluginId: e.pluginId })), - }; - - return service; - }, - }); -} - export class BackendInitializer { #startPromise?: Promise; #stopPromise?: Promise; @@ -269,7 +251,6 @@ export class BackendInitializer { this.#serviceRegistry.add( createRootInstanceMetadataServiceFactory(this.#registrations), ); - this.#serviceRegistry.add(createDeprecatedInstanceMetadataServiceFactory()); // This makes sure that any uncaught errors or unhandled rejections are // caught and logged, rather than terminating the process. We register these diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 4b201fded3..44df59b5f1 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -38,6 +38,7 @@ import { eventsServiceFactory } from '@backstage/plugin-events-node'; import { actionsRegistryServiceFactory, actionsServiceFactory, + instanceMetadataServiceFactory, } from '@backstage/backend-defaults/alpha'; export const defaultServiceFactories = [ @@ -65,6 +66,7 @@ export const defaultServiceFactories = [ // alpha services actionsRegistryServiceFactory, actionsServiceFactory, + instanceMetadataServiceFactory, ]; /** diff --git a/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/index.ts b/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/index.ts new file mode 100644 index 0000000000..00ee75400a --- /dev/null +++ b/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/index.ts @@ -0,0 +1,17 @@ +/* + * 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. + */ + +export { instanceMetadataServiceFactory } from './instanceMetadataServiceFactory'; diff --git a/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory.ts b/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory.ts new file mode 100644 index 0000000000..f5e3af503b --- /dev/null +++ b/packages/backend-defaults/src/alpha/entrypoints/instanceMetadata/instanceMetadataServiceFactory.ts @@ -0,0 +1,37 @@ +/* + * 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, + createServiceFactory, +} from '@backstage/backend-plugin-api'; +import { instanceMetadataServiceRef } from '@backstage/backend-plugin-api/alpha'; + +export const instanceMetadataServiceFactory = createServiceFactory({ + service: instanceMetadataServiceRef, + deps: { + instanceMetadata: coreServices.rootInstanceMetadata, + }, + factory: async ({ instanceMetadata }) => { + const plugins = await instanceMetadata.getInstalledPlugins(); + const service = { + getInstalledFeatures: () => + plugins.map(e => ({ type: 'plugin' as const, pluginId: e.pluginId })), + }; + + return service; + }, +}); diff --git a/packages/backend-defaults/src/alpha/index.ts b/packages/backend-defaults/src/alpha/index.ts index 13bb439acd..744d5bc552 100644 --- a/packages/backend-defaults/src/alpha/index.ts +++ b/packages/backend-defaults/src/alpha/index.ts @@ -15,3 +15,4 @@ */ export { actionsRegistryServiceFactory } from './entrypoints/actionsRegistry'; export { actionsServiceFactory } from './entrypoints/actions'; +export { instanceMetadataServiceFactory } from './entrypoints/instanceMetadata'; diff --git a/packages/backend-test-utils/src/services/mockServices.ts b/packages/backend-test-utils/src/services/mockServices.ts index 2782724d11..9ecb59a35b 100644 --- a/packages/backend-test-utils/src/services/mockServices.ts +++ b/packages/backend-test-utils/src/services/mockServices.ts @@ -34,7 +34,7 @@ import { DatabaseService, DiscoveryService, HttpAuthService, - InstanceMetadataService, + RootInstanceMetadataService, LoggerService, PermissionsService, RootConfigService, @@ -558,18 +558,18 @@ export namespace mockServices { })); } - export function instanceMetadata(): InstanceMetadataService { + export function rootInstanceMetadata(): RootInstanceMetadataService { return { getInstalledPlugins: () => Promise.resolve([]), }; } - export namespace instanceMetadata { - export const mock = simpleMock(coreServices.instanceMetadata, () => ({ + export namespace rootInstanceMetadata { + export const mock = simpleMock(coreServices.rootInstanceMetadata, () => ({ getInstalledPlugins: jest.fn(), })); export const factory = simpleFactoryWithOptions( - coreServices.instanceMetadata, - instanceMetadata, + coreServices.rootInstanceMetadata, + rootInstanceMetadata, ); } }