diff --git a/.changeset/smooth-deers-melt.md b/.changeset/smooth-deers-melt.md new file mode 100644 index 0000000000..9757de5181 --- /dev/null +++ b/.changeset/smooth-deers-melt.md @@ -0,0 +1,5 @@ +--- +'@backstage/config-loader': patch +--- + +Include `devDependencies` and `optionalDependencies` in the detection of Backstage packages when collecting configuration schema. diff --git a/packages/config-loader/src/lib/schema/collect.test.ts b/packages/config-loader/src/lib/schema/collect.test.ts index 479e63c94c..ef9d38faa9 100644 --- a/packages/config-loader/src/lib/schema/collect.test.ts +++ b/packages/config-loader/src/lib/schema/collect.test.ts @@ -87,6 +87,8 @@ describe('collectConfigSchemas', () => { dependencies: { c1: '0.0.0', c2: '0.0.0', + }, + devDependencies: { '@backstage/mock': '0.0.0', }, configSchema: { ...mockSchema, title: 'b' }, diff --git a/packages/config-loader/src/lib/schema/collect.ts b/packages/config-loader/src/lib/schema/collect.ts index b53389d499..b363e8e5f3 100644 --- a/packages/config-loader/src/lib/schema/collect.ts +++ b/packages/config-loader/src/lib/schema/collect.ts @@ -74,6 +74,8 @@ export async function collectConfigSchemas( const pkg = await fs.readJson(pkgPath); const depNames = [ ...Object.keys(pkg.dependencies ?? {}), + ...Object.keys(pkg.devDependencies ?? {}), + ...Object.keys(pkg.optionalDependencies ?? {}), ...Object.keys(pkg.peerDependencies ?? {}), ]; diff --git a/packages/integration/src/azure/config.test.ts b/packages/integration/src/azure/config.test.ts index d43536cf47..385086fbcf 100644 --- a/packages/integration/src/azure/config.test.ts +++ b/packages/integration/src/azure/config.test.ts @@ -30,9 +30,18 @@ describe('readAzureIntegrationConfig', () => { async function buildFrontendConfig( data: Partial, ): Promise { - const schema = await loadConfigSchema({ + const fullSchema = await loadConfigSchema({ dependencies: [require('../../package.json').name], }); + const serializedSchema = fullSchema.serialize() as { + schemas: { path: string }[]; + }; + const schema = await loadConfigSchema({ + serialized: { + ...serializedSchema, // grab the schema from this package only + schemas: serializedSchema.schemas.filter(s => s.path === 'config.d.ts'), + }, + }); const processed = schema.process( [{ data: { integrations: { azure: [data] } }, context: 'app' }], { visibility: ['frontend'] }, diff --git a/packages/integration/src/bitbucket/config.test.ts b/packages/integration/src/bitbucket/config.test.ts index f3d076e1b6..b887566e35 100644 --- a/packages/integration/src/bitbucket/config.test.ts +++ b/packages/integration/src/bitbucket/config.test.ts @@ -30,9 +30,18 @@ describe('readBitbucketIntegrationConfig', () => { async function buildFrontendConfig( data: Partial, ): Promise { - const schema = await loadConfigSchema({ + const fullSchema = await loadConfigSchema({ dependencies: [require('../../package.json').name], }); + const serializedSchema = fullSchema.serialize() as { + schemas: { path: string }[]; + }; + const schema = await loadConfigSchema({ + serialized: { + ...serializedSchema, // grab the schema from this package only + schemas: serializedSchema.schemas.filter(s => s.path === 'config.d.ts'), + }, + }); const processed = schema.process( [{ data: { integrations: { bitbucket: [data] } }, context: 'app' }], { visibility: ['frontend'] }, diff --git a/packages/integration/src/github/config.test.ts b/packages/integration/src/github/config.test.ts index 10d076f85d..eb084b14a9 100644 --- a/packages/integration/src/github/config.test.ts +++ b/packages/integration/src/github/config.test.ts @@ -30,9 +30,18 @@ describe('readGitHubIntegrationConfig', () => { async function buildFrontendConfig( data: Partial, ): Promise { - const schema = await loadConfigSchema({ + const fullSchema = await loadConfigSchema({ dependencies: [require('../../package.json').name], }); + const serializedSchema = fullSchema.serialize() as { + schemas: { path: string }[]; + }; + const schema = await loadConfigSchema({ + serialized: { + ...serializedSchema, // grab the schema from this package only + schemas: serializedSchema.schemas.filter(s => s.path === 'config.d.ts'), + }, + }); const processed = schema.process( [{ data: { integrations: { github: [data] } }, context: 'app' }], { visibility: ['frontend'] }, diff --git a/packages/integration/src/gitlab/config.test.ts b/packages/integration/src/gitlab/config.test.ts index 4c235ff668..1308704e9d 100644 --- a/packages/integration/src/gitlab/config.test.ts +++ b/packages/integration/src/gitlab/config.test.ts @@ -30,9 +30,18 @@ describe('readGitLabIntegrationConfig', () => { async function buildFrontendConfig( data: Partial, ): Promise { - const schema = await loadConfigSchema({ + const fullSchema = await loadConfigSchema({ dependencies: [require('../../package.json').name], }); + const serializedSchema = fullSchema.serialize() as { + schemas: { path: string }[]; + }; + const schema = await loadConfigSchema({ + serialized: { + ...serializedSchema, // grab the schema from this package only + schemas: serializedSchema.schemas.filter(s => s.path === 'config.d.ts'), + }, + }); const processed = schema.process( [{ data: { integrations: { gitlab: [data] } }, context: 'app' }], { visibility: ['frontend'] },