From b713a4c8dc9bdd33d4485405b0c75ca8b21c4811 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 22 Jun 2022 18:53:38 +0200 Subject: [PATCH] use entityRef instead of Entity Signed-off-by: Kiss Miklos --- plugins/catalog-backend/src/api/processingResult.ts | 4 ++-- plugins/catalog-backend/src/api/processor.ts | 2 +- .../src/database/DefaultProcessingDatabase.ts | 6 +++--- plugins/catalog-backend/src/database/types.ts | 2 +- .../src/modules/core/FileReaderProcessor.ts | 12 +++++++----- .../src/modules/core/PlaceholderProcessor.ts | 7 +++++-- .../src/modules/core/UrlReaderProcessor.ts | 13 +++++++------ .../DefaultCatalogProcessingEngine.test.ts | 5 +++++ .../processing/DefaultCatalogProcessingEngine.ts | 2 +- .../src/processing/ProcessorOutputCollector.ts | 4 ++-- plugins/catalog-backend/src/processing/types.ts | 2 +- 11 files changed, 35 insertions(+), 24 deletions(-) diff --git a/plugins/catalog-backend/src/api/processingResult.ts b/plugins/catalog-backend/src/api/processingResult.ts index 3f05b30acf..e1727a9f78 100644 --- a/plugins/catalog-backend/src/api/processingResult.ts +++ b/plugins/catalog-backend/src/api/processingResult.ts @@ -66,7 +66,7 @@ export const processingResult = Object.freeze({ return { type: 'relation', relation: spec }; }, - refresh(entity: Entity, key: String) { - return { type: 'refresh', entity, key }; + refresh(entityRef: String, key: String): CatalogProcessorResult { + return { type: 'refresh', entityRef, key }; }, } as const); diff --git a/plugins/catalog-backend/src/api/processor.ts b/plugins/catalog-backend/src/api/processor.ts index d5a08edd44..8480aec681 100644 --- a/plugins/catalog-backend/src/api/processor.ts +++ b/plugins/catalog-backend/src/api/processor.ts @@ -172,7 +172,7 @@ export type CatalogProcessorErrorResult = { /** @public */ export type CatalogProcessorRefreshKeysResult = { type: 'refresh'; - entity: Entity; + entityRef: String; key: String; }; diff --git a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts index a003328244..7cd590127c 100644 --- a/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts +++ b/plugins/catalog-backend/src/database/DefaultProcessingDatabase.ts @@ -540,13 +540,13 @@ export class DefaultProcessingDatabase implements ProcessingDatabase { options: RefreshKeyOptions, ): Promise { const tx = txOpaque as Knex.Transaction; - const { keys } = options; + const { refreshKeys } = options; await Promise.all( - keys.map(k => { + refreshKeys.map(k => { return tx('refresh_keys') .insert({ - entity_ref: stringifyEntityRef(k.entity), + entity_ref: k.entityRef, key: k.key, }) .onConflict(['entity_ref', 'key']) diff --git a/plugins/catalog-backend/src/database/types.ts b/plugins/catalog-backend/src/database/types.ts index 9d4043a340..b4ab598f4a 100644 --- a/plugins/catalog-backend/src/database/types.ts +++ b/plugins/catalog-backend/src/database/types.ts @@ -82,7 +82,7 @@ export type ReplaceUnprocessedEntitiesOptions = }; export type RefreshKeyOptions = { - keys: { key: String; entity: Entity }[]; + refreshKeys: { key: String; entityRef: String }[]; }; export type RefreshByKeyOptions = { diff --git a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts index 768d763a24..20eabf2d03 100644 --- a/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/FileReaderProcessor.ts @@ -25,6 +25,7 @@ import { LocationSpec, processingResult, } from '../../api'; +import { stringifyEntityRef } from '@backstage/catalog-model'; const glob = promisify(g); @@ -62,11 +63,12 @@ export class FileReaderProcessor implements CatalogProcessor { })) { emit(parseResult); if (parseResult.type === 'entity') { - emit({ - type: 'refresh', - key: path.normalize(fileMatch), - entity: parseResult.entity, - }); + emit( + processingResult.refresh( + stringifyEntityRef(parseResult.entity), + path.normalize(fileMatch), + ), + ); } } } diff --git a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts index 5089ee2637..f1ad5c66f7 100644 --- a/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/PlaceholderProcessor.ts @@ -15,7 +15,7 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { Entity } from '@backstage/catalog-model'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; import { ScmIntegrationRegistry } from '@backstage/integration'; import yaml from 'yaml'; @@ -23,6 +23,7 @@ import { CatalogProcessor, CatalogProcessorEmit, LocationSpec, + processingResult, } from '../../api'; /** @public */ @@ -107,7 +108,7 @@ export class PlaceholderProcessor implements CatalogProcessor { const resolverKey = keys[0].substr(1); const resolverValue = data[keys[0]]; - emit({ type: 'refresh', key: resolverValue, entity }); + const resolver = this.options.resolvers[resolverKey]; if (!resolver || typeof resolverValue !== 'string') { // If there was no such placeholder resolver or if the value was not a @@ -133,6 +134,8 @@ export class PlaceholderProcessor implements CatalogProcessor { base, }); + emit(processingResult.refresh(stringifyEntityRef(entity), resolverValue)); + return [ await resolver({ key: resolverKey, diff --git a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts index a6c5bd74d8..ec8f7c11ec 100644 --- a/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts +++ b/plugins/catalog-backend/src/modules/core/UrlReaderProcessor.ts @@ -15,7 +15,7 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { Entity } from '@backstage/catalog-model'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; import parseGitUrl from 'git-url-parse'; import limiterFactory from 'p-limit'; @@ -84,11 +84,12 @@ export class UrlReaderProcessor implements CatalogProcessor { parseResults.push(parseResult); emit(parseResult); if (parseResult.type === 'entity') { - emit({ - type: 'refresh', - key: item.url, - entity: parseResult.entity, - }); + emit( + processingResult.refresh( + stringifyEntityRef(parseResult.entity), + item.url, + ), + ); } } } diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts index 10de36a1be..dd316583af 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.test.ts @@ -58,6 +58,7 @@ describe('DefaultCatalogProcessingEngine', () => { errors: [], deferredEntities: [], state: {}, + refreshKeys: [], }); const engine = new DefaultCatalogProcessingEngine( getVoidLogger(), @@ -123,6 +124,7 @@ describe('DefaultCatalogProcessingEngine', () => { errors: [], deferredEntities: [], state: {}, + refreshKeys: [], }); const engine = new DefaultCatalogProcessingEngine( getVoidLogger(), @@ -203,6 +205,7 @@ describe('DefaultCatalogProcessingEngine', () => { errors: [], deferredEntities: [], state: {}, + refreshKeys: [], }); const engine = new DefaultCatalogProcessingEngine( @@ -413,6 +416,7 @@ describe('DefaultCatalogProcessingEngine', () => { errors: [], deferredEntities: [], state: {}, + refreshKeys: [], }) .mockResolvedValueOnce({ ok: true, @@ -432,6 +436,7 @@ describe('DefaultCatalogProcessingEngine', () => { errors: [], deferredEntities: [], state: {}, + refreshKeys: [], }); await engine.start(); diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts index 5cb9c76e62..f1c7ba6943 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingEngine.ts @@ -125,7 +125,7 @@ export class DefaultCatalogProcessingEngine implements CatalogProcessingEngine { if (result.ok) { await this.processingDatabase.transaction(tx => this.processingDatabase.setRefreshKeys(tx, { - keys: result.refreshKeys, + refreshKeys: result.refreshKeys, }), ); diff --git a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts index 058d04ff2d..e4b8ca2e9b 100644 --- a/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts +++ b/plugins/catalog-backend/src/processing/ProcessorOutputCollector.ts @@ -40,7 +40,7 @@ export class ProcessorOutputCollector { private readonly deferredEntities = new Array(); private readonly refreshKeys = new Array<{ key: String; - entity: Entity; + entityRef: String; }>(); private done = false; @@ -122,7 +122,7 @@ export class ProcessorOutputCollector { } else if (i.type === 'error') { this.errors.push(i.error); } else if (i.type === 'refresh') { - this.refreshKeys.push({ key: i.key, entity: i.entity }); + this.refreshKeys.push({ key: i.key, entityRef: i.entityRef }); } } } diff --git a/plugins/catalog-backend/src/processing/types.ts b/plugins/catalog-backend/src/processing/types.ts index b93d57863f..78d8b875b2 100644 --- a/plugins/catalog-backend/src/processing/types.ts +++ b/plugins/catalog-backend/src/processing/types.ts @@ -37,7 +37,7 @@ export type EntityProcessingResult = completedEntity: Entity; deferredEntities: DeferredEntity[]; relations: EntityRelationSpec[]; - refreshKeys: { key: String; entity: Entity }[]; + refreshKeys: { key: String; entityRef: String }[]; errors: Error[]; } | {