diff --git a/.changeset/great-forks-lay.md b/.changeset/great-forks-lay.md new file mode 100644 index 0000000000..6585951062 --- /dev/null +++ b/.changeset/great-forks-lay.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +An error will now be thrown if attempting to override the plugin metadata service. diff --git a/packages/backend-app-api/src/wiring/types.ts b/packages/backend-app-api/src/wiring/types.ts index c591d5cb55..d3ffef731c 100644 --- a/packages/backend-app-api/src/wiring/types.ts +++ b/packages/backend-app-api/src/wiring/types.ts @@ -19,6 +19,7 @@ import { BackendFeature, ExtensionPoint, ServiceRef, + coreServices, } from '@backstage/backend-plugin-api'; import { BackstageBackend } from './BackstageBackend'; @@ -80,6 +81,11 @@ export function createSpecializedBackend( const ids = Array.from(duplicates).join(', '); throw new Error(`Duplicate service implementations provided for ${ids}`); } + if (exists.has(coreServices.pluginMetadata.id)) { + throw new Error( + `The ${coreServices.pluginMetadata.id} service cannot be overridden`, + ); + } return new BackstageBackend(services); } diff --git a/packages/backend-defaults/src/CreateBackend.test.ts b/packages/backend-defaults/src/CreateBackend.test.ts index 4b5e2e5848..a05e09df0f 100644 --- a/packages/backend-defaults/src/CreateBackend.test.ts +++ b/packages/backend-defaults/src/CreateBackend.test.ts @@ -55,4 +55,18 @@ describe('createBackend', () => { 'Duplicate service implementations provided for core.rootLifecycle', ); }); + + it('should throw when providing a plugin metadata service implementation', () => { + expect(() => + createBackend({ + services: [ + createServiceFactory({ + service: coreServices.pluginMetadata, + deps: {}, + factory: async () => async () => ({ getId: () => 'test' }), + }), + ], + }), + ).toThrow('The core.plugin-metadata service cannot be overridden'); + }); });