From 73db439b1d799717e4f3e70e6cbeb9e68f1227ee Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 26 Sep 2022 14:08:29 +0200 Subject: [PATCH] do not change public facing api Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 7 ++--- .../src/ingestion/GitHubLocationAnalyzer.ts | 21 ++++++-------- .../catalog-backend/src/ingestion/types.ts | 8 ++--- .../src/api/CatalogImportClient.ts | 29 ++++++++++++++++++- 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index e1aec05e33..5745588873 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -18,7 +18,6 @@ import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; -import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; @@ -65,9 +64,9 @@ export type AnalyzeLocationEntityField = { // @public export type AnalyzeLocationExistingEntity = { - target: string; - exists: boolean | undefined; - entities: CompoundEntityRef[]; + location: LocationSpec; + isRegistered: boolean; + entity: Entity; }; // @public diff --git a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts index 885544bfd5..46fa87cd92 100644 --- a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts @@ -24,7 +24,6 @@ import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from './types'; export type GitHubLocationAnalyzerOptions = { integration: GitHubIntegration; catalogFilename?: string; - discovery: DiscoveryApi; }; export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { @@ -62,26 +61,24 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { }); const defaultBranch = repoInformation.data.default_branch; - return await Promise.all( + const result = await Promise.all( searchResult.data.items .map(i => `${trimEnd(url, '/')}/blob/${defaultBranch}/${i.path}`) .map(async target => { - const result = await catalogClient.addLocation({ + const addLocationResult = await catalogClient.addLocation({ type: 'url', target, dryRun: true, }); - return { - target, - exists: result.exists, - entities: result.entities.map(e => ({ - kind: e.kind, - namespace: e.metadata.namespace ?? 'default', - name: e.metadata.name, - })), - }; + return addLocationResult.entities.map(e => ({ + location: { type: 'url', target }, + isRegistered: !!addLocationResult.exists, + entity: e, + })); }), ); + + return result.flat(); } return []; } diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index f7b1760441..9da7b037aa 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { RecursivePartial } from '../util/RecursivePartial'; import { LocationSpec } from '@backstage/plugin-catalog-node'; @@ -50,9 +50,9 @@ export type AnalyzeLocationResponse = { * @public */ export type AnalyzeLocationExistingEntity = { - target: string; - exists: boolean | undefined; - entities: CompoundEntityRef[]; + location: LocationSpec; + isRegistered: boolean; + entity: Entity; }; /** diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index 0533b558c8..7aa3365488 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -31,6 +31,7 @@ import { AnalyzeResult, CatalogImportApi } from './CatalogImportApi'; import { getGithubIntegrationConfig } from './GitHub'; import { getBranchName, getCatalogFilename } from '../components/helpers'; import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-backend'; +import { CompoundEntityRef } from '@backstage/catalog-model'; /** * The default implementation of the {@link CatalogImportApi}. @@ -108,9 +109,35 @@ export class CatalogImportClient implements CatalogImportApi { }); if (analyzation.existingEntityFiles.length > 0) { + const locations = analyzation.existingEntityFiles.reduce< + Record< + string, + { + target: string; + exists?: boolean; + entities: CompoundEntityRef[]; + } + > + >((state, curr) => { + state[curr.location.target] = { + target: curr.location.target, + exists: curr.isRegistered, + entities: [ + ...(curr.location.target in state + ? state[curr.location.target].entities + : []), + { + name: curr.entity.metadata.name, + namespace: curr.entity.metadata.namespace ?? 'default', + kind: curr.entity.kind, + }, + ], + }; + return state; + }, {}); return { type: 'locations', - locations: analyzation.existingEntityFiles, + locations: Object.values(locations), }; }