From 0ade9d02b71c43a2a8cc1616c91761767c0b90db Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Aug 2021 00:37:27 +0200 Subject: [PATCH 1/2] config-loader: broaden search for backstage packages in config schema collection Signed-off-by: Patrik Oldsberg --- .changeset/smooth-deers-melt.md | 5 +++++ packages/config-loader/src/lib/schema/collect.test.ts | 2 ++ packages/config-loader/src/lib/schema/collect.ts | 2 ++ 3 files changed, 9 insertions(+) create mode 100644 .changeset/smooth-deers-melt.md 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 ?? {}), ]; From 244816f79c85d2afa8733805c3cce433fc2f7b21 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 19 Aug 2021 10:34:22 +0200 Subject: [PATCH 2/2] integration: limit config schema tests to only include its own schema Signed-off-by: Patrik Oldsberg --- packages/integration/src/azure/config.test.ts | 11 ++++++++++- packages/integration/src/bitbucket/config.test.ts | 11 ++++++++++- packages/integration/src/github/config.test.ts | 11 ++++++++++- packages/integration/src/gitlab/config.test.ts | 11 ++++++++++- 4 files changed, 40 insertions(+), 4 deletions(-) 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'] },