From ed09ad8093064eeaf659aec4f2bd0e06eda54601 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 18 Feb 2022 15:14:58 +0100 Subject: [PATCH] catalog-model: move LocationSpec to catalog-backend Signed-off-by: Patrik Oldsberg --- .changeset/khaki-needles-smile.md | 5 +++++ .changeset/kind-squids-repair.md | 7 ++++++ .changeset/late-mice-battle.md | 9 ++++++++ .../software-catalog/external-integrations.md | 5 +++-- packages/catalog-client/api-report.md | 6 +++-- packages/catalog-client/src/types/api.ts | 8 +++++-- packages/catalog-model/api-report.md | 2 +- .../catalog-model/src/location/helpers.ts | 18 --------------- packages/catalog-model/src/location/types.ts | 1 + .../catalog-backend-module-aws/api-report.md | 2 +- .../AwsOrganizationCloudAccountProcessor.ts | 3 ++- .../catalog-backend-module-ldap/api-report.md | 2 +- .../src/processors/LdapOrgReaderProcessor.ts | 2 +- .../api-report.md | 2 +- .../MicrosoftGraphOrgReaderProcessor.ts | 2 +- plugins/catalog-backend/api-report.md | 22 ++++++++++++++++--- .../src/ingestion/CatalogRules.test.ts | 3 ++- .../src/ingestion/CatalogRules.ts | 3 ++- .../AnnotateLocationEntityProcessor.test.ts | 3 ++- .../AnnotateLocationEntityProcessor.ts | 3 +-- .../AnnotateScmSlugEntityProcessor.test.ts | 3 ++- .../AnnotateScmSlugEntityProcessor.ts | 4 ++-- .../processors/AwsS3DiscoveryProcessor.ts | 2 +- .../AzureDevOpsDiscoveryProcessor.test.ts | 2 +- .../AzureDevOpsDiscoveryProcessor.ts | 3 +-- .../BitbucketDiscoveryProcessor.test.ts | 2 +- .../processors/BitbucketDiscoveryProcessor.ts | 3 +-- .../processors/BuiltinKindsEntityProcessor.ts | 3 +-- .../processors/CodeOwnersProcessor.test.ts | 2 +- .../processors/CodeOwnersProcessor.ts | 4 ++-- .../processors/FileReaderProcessor.ts | 2 +- .../GitLabDiscoveryProcessor.test.ts | 2 +- .../processors/GitLabDiscoveryProcessor.ts | 3 +-- .../GithubDiscoveryProcessor.test.ts | 2 +- .../processors/GithubDiscoveryProcessor.ts | 3 +-- .../GithubMultiOrgReaderProcessor.ts | 3 +-- .../GithubOrgReaderProcessor.test.ts | 2 +- .../processors/GithubOrgReaderProcessor.ts | 3 +-- .../LocationEntityProcessor.test.ts | 2 +- .../processors/LocationEntityProcessor.ts | 4 ++-- .../processors/PlaceholderProcessor.ts | 4 ++-- .../processors/StaticLocationProcessor.ts | 3 +-- .../processors/UrlReaderProcessor.ts | 3 ++- .../src/ingestion/processors/results.ts | 4 ++-- .../src/ingestion/processors/types.ts | 19 +++++++++++++++- .../src/ingestion/processors/util/parse.ts | 12 +++++----- .../catalog-backend/src/ingestion/types.ts | 3 ++- ...faultCatalogProcessingOrchestrator.test.ts | 2 +- .../DefaultCatalogProcessingOrchestrator.ts | 2 +- .../catalog-backend/src/processing/util.ts | 2 +- .../src/providers/DefaultLocationStore.ts | 17 +++++++------- .../src/service/AuthorizedLocationService.ts | 6 ++--- .../src/service/DefaultLocationService.ts | 11 +++++----- .../src/service/createRouter.test.ts | 14 ++++++------ .../src/service/createRouter.ts | 8 +++---- plugins/catalog-backend/src/service/index.ts | 1 + plugins/catalog-backend/src/service/types.ts | 18 ++++++++++++--- plugins/catalog-backend/src/service/util.ts | 2 +- .../catalog-backend/src/util/conversion.ts | 2 +- plugins/scaffolder-backend/api-report.md | 2 +- .../processor/ScaffolderEntitiesProcessor.ts | 2 +- plugins/techdocs/api-report.md | 1 - plugins/techdocs/src/types.ts | 4 ++-- 63 files changed, 178 insertions(+), 126 deletions(-) create mode 100644 .changeset/khaki-needles-smile.md create mode 100644 .changeset/kind-squids-repair.md create mode 100644 .changeset/late-mice-battle.md diff --git a/.changeset/khaki-needles-smile.md b/.changeset/khaki-needles-smile.md new file mode 100644 index 0000000000..02098f94f0 --- /dev/null +++ b/.changeset/khaki-needles-smile.md @@ -0,0 +1,5 @@ +--- +'@backstage/catalog-model': patch +--- + +Deprecated the `LocationSpec` export, which should now be imported from `@backstage/plugin-catalog-backend` instead. diff --git a/.changeset/kind-squids-repair.md b/.changeset/kind-squids-repair.md new file mode 100644 index 0000000000..f596553a0c --- /dev/null +++ b/.changeset/kind-squids-repair.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Added `LocationSpec`, which was moved over from `@backstage/catalog-model`. + +Added `LocationInput`, which replaced `LocationSpec` where it was used in the `LocationService` and `LocationStore` interfaces. The `LocationInput` type deprecates the `presence` field, which was not being used in those contexts. diff --git a/.changeset/late-mice-battle.md b/.changeset/late-mice-battle.md new file mode 100644 index 0000000000..87843ad110 --- /dev/null +++ b/.changeset/late-mice-battle.md @@ -0,0 +1,9 @@ +--- +'@backstage/catalog-client': patch +'@backstage/plugin-catalog-backend-module-ldap': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-techdocs': patch +--- + +Updated usage of the `LocationSpec` type from `@backstage/catalog-model`, which is deprecated. diff --git a/docs/features/software-catalog/external-integrations.md b/docs/features/software-catalog/external-integrations.md index f8a44ceef6..59caf9475c 100644 --- a/docs/features/software-catalog/external-integrations.md +++ b/docs/features/software-catalog/external-integrations.md @@ -367,11 +367,11 @@ The class will have this basic structure: ```ts import { UrlReader } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { results, CatalogProcessor, CatalogProcessorEmit, + LocationSpec, } from '@backstage/plugin-catalog-backend'; // A processor that reads from the fictional System-X @@ -448,13 +448,14 @@ behavior for `system-x` that we implemented earlier. ```ts import { UrlReader } from '@backstage/backend-common'; -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { results, CatalogProcessor, CatalogProcessorEmit, CatalogProcessorCache, CatalogProcessorParser, + LocationSpec, } from '@backstage/plugin-catalog-backend'; // It's recommended to always bump the CACHE_KEY version if you make diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md index d5991303eb..c957859fec 100644 --- a/packages/catalog-client/api-report.md +++ b/packages/catalog-client/api-report.md @@ -5,7 +5,6 @@ ```ts import { Entity } from '@backstage/catalog-model'; import { EntityName } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/catalog-model'; // @public export type AddLocationRequest = { @@ -211,6 +210,9 @@ export interface GetEntityFacetsResponse { // @public type Location_2 = { id: string; -} & LocationSpec; + type: string; + target: string; + presence?: 'optional' | 'required'; +}; export { Location_2 as Location }; ``` diff --git a/packages/catalog-client/src/types/api.ts b/packages/catalog-client/src/types/api.ts index b070820c8b..bbafedb27d 100644 --- a/packages/catalog-client/src/types/api.ts +++ b/packages/catalog-client/src/types/api.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity, EntityName, LocationSpec } from '@backstage/catalog-model'; +import { Entity, EntityName } from '@backstage/catalog-model'; /** * This symbol can be used in place of a value when passed to filters in e.g. @@ -242,7 +242,11 @@ export interface CatalogRequestOptions { */ export type Location = { id: string; -} & LocationSpec; + type: string; + target: string; + /** @deprecated This field is is ignored */ + presence?: 'optional' | 'required'; +}; /** * The request type for {@link CatalogClient.addLocation}. diff --git a/packages/catalog-model/api-report.md b/packages/catalog-model/api-report.md index 0afe87e709..3a9e430cd8 100644 --- a/packages/catalog-model/api-report.md +++ b/packages/catalog-model/api-report.md @@ -363,7 +363,7 @@ export { LocationEntityV1alpha1 }; // @public export const locationEntityV1alpha1Validator: KindValidator; -// @public +// @public @deprecated export type LocationSpec = { type: string; target: string; diff --git a/packages/catalog-model/src/location/helpers.ts b/packages/catalog-model/src/location/helpers.ts index d308c00449..7c73908157 100644 --- a/packages/catalog-model/src/location/helpers.ts +++ b/packages/catalog-model/src/location/helpers.ts @@ -21,9 +21,6 @@ import { ANNOTATION_LOCATION } from './annotation'; /** * Parses a string form location reference. * - * Note that the return type is not `LocationSpec`, because we do not want to - * conflate the string form with the additional properties of that type. - * * @public * @param ref - A string-form location reference, e.g. `'url:https://host'` * @returns A location reference, e.g. `{ type: 'url', target: 'https://host' }` @@ -36,11 +33,6 @@ export function parseLocationReference(ref: string) { /** * Parses a string form location reference. * - * @remarks - * - * Note that the return type is not `LocationSpec`, because we do not want to - * conflate the string form with the additional properties of that type. - * * @public * @param ref - A string-form location ref, e.g. `'url:https://host'` * @returns A location ref, e.g. `{ type: 'url', target: 'https://host' }` @@ -83,11 +75,6 @@ export function parseLocationRef(ref: string): { /** * Turns a location reference into its string form. * - * @remarks - * - * Note that the input type is not `LocationSpec`, because we do not want to - * conflate the string form with the additional properties of that type. - * * @public * @param ref - A location reference, e.g. `{ type: 'url', target: 'https://host' }` * @returns A string-form location reference, e.g. `'url:https://host'` @@ -103,11 +90,6 @@ export function stringifyLocationReference(ref: { /** * Turns a location ref into its string form. * - * @remarks - * - * Note that the input type is not `LocationSpec`, because we do not want to - * conflate the string form with the additional properties of that type. - * * @public * @param ref - A location ref, e.g. `{ type: 'url', target: 'https://host' }` * @returns A string-form location ref, e.g. `'url:https://host'` diff --git a/packages/catalog-model/src/location/types.ts b/packages/catalog-model/src/location/types.ts index 2ed8fd717b..9b87e4919d 100644 --- a/packages/catalog-model/src/location/types.ts +++ b/packages/catalog-model/src/location/types.ts @@ -24,6 +24,7 @@ * default value: 'required'. * * @public + * @deprecated Import from `@backstage/plugin-catalog-backend` instead. */ export type LocationSpec = { type: string; diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index 159420f8e9..1cab6555fe 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -6,7 +6,7 @@ import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; -import { LocationSpec } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger as Logger_2 } from 'winston'; // @public diff --git a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts index 5db39cefaa..e5e72d5fa8 100644 --- a/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts +++ b/plugins/catalog-backend-module-aws/src/processors/AwsOrganizationCloudAccountProcessor.ts @@ -14,11 +14,12 @@ * limitations under the License. */ -import { LocationSpec, ResourceEntityV1alpha1 } from '@backstage/catalog-model'; +import { ResourceEntityV1alpha1 } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { CatalogProcessor, CatalogProcessorEmit, + LocationSpec, results, } from '@backstage/plugin-catalog-backend'; import AWS, { Credentials, Organizations } from 'aws-sdk'; diff --git a/plugins/catalog-backend-module-ldap/api-report.md b/plugins/catalog-backend-module-ldap/api-report.md index e14dc54a6b..f6b2475e65 100644 --- a/plugins/catalog-backend-module-ldap/api-report.md +++ b/plugins/catalog-backend-module-ldap/api-report.md @@ -11,7 +11,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { GroupEntity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { LocationSpec } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger as Logger_2 } from 'winston'; import { SearchEntry } from 'ldapjs'; import { SearchOptions } from 'ldapjs'; diff --git a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts index 4d492c2454..6c31d5a27d 100644 --- a/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-ldap/src/processors/LdapOrgReaderProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { Logger } from 'winston'; import { @@ -28,6 +27,7 @@ import { import { CatalogProcessor, CatalogProcessorEmit, + LocationSpec, results, } from '@backstage/plugin-catalog-backend'; diff --git a/plugins/catalog-backend-module-msgraph/api-report.md b/plugins/catalog-backend-module-msgraph/api-report.md index bb442aa544..dd967a8dd4 100644 --- a/plugins/catalog-backend-module-msgraph/api-report.md +++ b/plugins/catalog-backend-module-msgraph/api-report.md @@ -9,7 +9,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { GroupEntity } from '@backstage/catalog-model'; -import { LocationSpec } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger as Logger_2 } from 'winston'; import * as MicrosoftGraph from '@microsoft/microsoft-graph-types'; import * as msal from '@azure/msal-node'; diff --git a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts index 78b2922f60..2725075c1c 100644 --- a/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-msgraph/src/processors/MicrosoftGraphOrgReaderProcessor.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { CatalogProcessor, CatalogProcessorEmit, + LocationSpec, results, } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 5dc0981fb0..9b4db418b3 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -22,7 +22,6 @@ import { IndexableDocument } from '@backstage/search-common'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { Location as Location_2 } from '@backstage/catalog-client'; -import { LocationSpec } from '@backstage/catalog-model'; import { Logger as Logger_2 } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; @@ -812,11 +811,21 @@ export type LocationEntityProcessorOptions = { integrations: ScmIntegrationRegistry; }; +// @public +export interface LocationInput { + // @deprecated (undocumented) + presence?: 'optional' | 'required'; + // (undocumented) + target: string; + // (undocumented) + type: string; +} + // @public export interface LocationService { // (undocumented) createLocation( - spec: LocationSpec, + location: LocationInput, dryRun: boolean, options?: { authorizationToken?: string; @@ -846,10 +855,17 @@ export interface LocationService { }): Promise; } +// @public +export type LocationSpec = { + type: string; + target: string; + presence?: 'optional' | 'required'; +}; + // @public export interface LocationStore { // (undocumented) - createLocation(spec: LocationSpec): Promise; + createLocation(location: LocationInput): Promise; // (undocumented) deleteLocation(id: string): Promise; // (undocumented) diff --git a/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts b/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts index 88245d9b81..d29a445a8c 100644 --- a/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts +++ b/plugins/catalog-backend/src/ingestion/CatalogRules.test.ts @@ -14,9 +14,10 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { DefaultCatalogRulesEnforcer } from './CatalogRules'; +import { LocationSpec } from './processors'; const entity = { user: { diff --git a/plugins/catalog-backend/src/ingestion/CatalogRules.ts b/plugins/catalog-backend/src/ingestion/CatalogRules.ts index a0ef5f3d53..b4ad394168 100644 --- a/plugins/catalog-backend/src/ingestion/CatalogRules.ts +++ b/plugins/catalog-backend/src/ingestion/CatalogRules.ts @@ -15,8 +15,9 @@ */ import { Config } from '@backstage/config'; -import { LocationSpec, Entity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import path from 'path'; +import { LocationSpec } from './processors'; /** * Rules to apply to catalog entities. diff --git a/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.test.ts index 41d44ab157..5f5b20d1c2 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.test.ts @@ -14,9 +14,10 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; +import { LocationSpec } from './types'; import { AnnotateLocationEntityProcessor } from './AnnotateLocationEntityProcessor'; describe('AnnotateLocationEntityProcessor', () => { diff --git a/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.ts index 0067f3c26d..b8c31ed5a2 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AnnotateLocationEntityProcessor.ts @@ -21,12 +21,11 @@ import { ANNOTATION_SOURCE_LOCATION, ANNOTATION_VIEW_URL, Entity, - LocationSpec, stringifyLocationRef, } from '@backstage/catalog-model'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { identity, merge, pickBy } from 'lodash'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; /** @public */ export class AnnotateLocationEntityProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.test.ts index 5bdf4a4b83..311dd13789 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.test.ts @@ -13,9 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { AnnotateScmSlugEntityProcessor } from './AnnotateScmSlugEntityProcessor'; +import { LocationSpec } from './types'; describe('AnnotateScmSlugEntityProcessor', () => { describe('github', () => { diff --git a/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.ts index d6e037662e..4d3b3aff6c 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AnnotateScmSlugEntityProcessor.ts @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { ScmIntegrationRegistry, @@ -21,7 +21,7 @@ import { } from '@backstage/integration'; import parseGitUrl from 'git-url-parse'; import { identity, merge, pickBy } from 'lodash'; -import { CatalogProcessor } from './types'; +import { CatalogProcessor, LocationSpec } from './types'; const GITHUB_ACTIONS_ANNOTATION = 'github.com/project-slug'; diff --git a/plugins/catalog-backend/src/ingestion/processors/AwsS3DiscoveryProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/AwsS3DiscoveryProcessor.ts index 726c972d8d..0dc44cc157 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AwsS3DiscoveryProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AwsS3DiscoveryProcessor.ts @@ -15,7 +15,6 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { isError } from '@backstage/errors'; import limiterFactory from 'p-limit'; import * as result from './results'; @@ -23,6 +22,7 @@ import { CatalogProcessor, CatalogProcessorEmit, CatalogProcessorParser, + LocationSpec, } from './types'; /** @public */ diff --git a/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.test.ts index f9913e4f12..a406feaa74 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.test.ts @@ -15,13 +15,13 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { codeSearch } from './azure'; import { AzureDevOpsDiscoveryProcessor, parseUrl, } from './AzureDevOpsDiscoveryProcessor'; +import { LocationSpec } from './types'; jest.mock('./azure'); const mockCodeSearch = codeSearch as jest.MockedFunction; diff --git a/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.ts index a257afc950..bc74621f1d 100644 --- a/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/AzureDevOpsDiscoveryProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { ScmIntegrationRegistry, @@ -22,7 +21,7 @@ import { } from '@backstage/integration'; import { Logger } from 'winston'; import * as results from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; import { codeSearch } from './azure'; /** diff --git a/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.test.ts index 96906dac85..9ee8bf1b57 100644 --- a/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.test.ts @@ -16,13 +16,13 @@ import { getVoidLogger } from '@backstage/backend-common'; import { BitbucketDiscoveryProcessor } from './BitbucketDiscoveryProcessor'; import { ConfigReader } from '@backstage/config'; -import { LocationSpec } from '@backstage/catalog-model'; import { BitbucketRepository20, BitbucketRepositoryParser, PagedResponse, PagedResponse20, } from './bitbucket'; +import { LocationSpec } from './types'; import { results } from './index'; import { RequestHandler, rest } from 'msw'; import { setupServer } from 'msw/node'; diff --git a/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.ts index 8ac6d617ca..8fcf64dc55 100644 --- a/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/BitbucketDiscoveryProcessor.ts @@ -21,7 +21,6 @@ import { ScmIntegrationRegistry, ScmIntegrations, } from '@backstage/integration'; -import { LocationSpec } from '@backstage/catalog-model'; import { BitbucketRepositoryParser, BitbucketClient, @@ -31,7 +30,7 @@ import { BitbucketRepository, BitbucketRepository20, } from './bitbucket'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; const DEFAULT_BRANCH = 'master'; const DEFAULT_CATALOG_LOCATION = '/catalog-info.yaml'; diff --git a/plugins/catalog-backend/src/ingestion/processors/BuiltinKindsEntityProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/BuiltinKindsEntityProcessor.ts index ec0afeba36..75a1241b8f 100644 --- a/plugins/catalog-backend/src/ingestion/processors/BuiltinKindsEntityProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/BuiltinKindsEntityProcessor.ts @@ -26,7 +26,6 @@ import { GroupEntity, groupEntityV1alpha1Validator, locationEntityV1alpha1Validator, - LocationSpec, parseEntityRef, RELATION_API_CONSUMED_BY, RELATION_API_PROVIDED_BY, @@ -54,7 +53,7 @@ import { templateEntityV1beta2Validator, } from '@backstage/plugin-scaffolder-common'; import * as result from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; /** @public */ export class BuiltinKindsEntityProcessor implements CatalogProcessor { diff --git a/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.test.ts index 3d7d6fde84..8d6d1f8ff7 100644 --- a/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.test.ts @@ -15,9 +15,9 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { CodeOwnersProcessor } from './CodeOwnersProcessor'; +import { LocationSpec } from './types'; const mockCodeOwnersText = () => ` * @acme/team-foo @acme/team-bar diff --git a/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.ts index d7b2bf8849..93e3c1618a 100644 --- a/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/CodeOwnersProcessor.ts @@ -15,7 +15,7 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { ScmIntegrationRegistry, @@ -23,7 +23,7 @@ import { } from '@backstage/integration'; import { Logger } from 'winston'; import { findCodeOwnerByTarget } from './codeowners'; -import { CatalogProcessor } from './types'; +import { CatalogProcessor, LocationSpec } from './types'; const ALLOWED_KINDS = ['API', 'Component', 'Domain', 'Resource', 'System']; diff --git a/plugins/catalog-backend/src/ingestion/processors/FileReaderProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/FileReaderProcessor.ts index 5e3d4812c2..996beff24a 100644 --- a/plugins/catalog-backend/src/ingestion/processors/FileReaderProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/FileReaderProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import fs from 'fs-extra'; import g from 'glob'; import path from 'path'; @@ -24,6 +23,7 @@ import { CatalogProcessor, CatalogProcessorEmit, CatalogProcessorParser, + LocationSpec, } from './types'; const glob = promisify(g); diff --git a/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.test.ts index 8f1da52413..8261690e8f 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.test.ts @@ -16,11 +16,11 @@ import { ConfigReader } from '@backstage/config'; import { getVoidLogger } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { GitLabDiscoveryProcessor, parseUrl } from './GitLabDiscoveryProcessor'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; import { GitLabProject } from './gitlab'; +import { LocationSpec } from './types'; const server = setupServer(); diff --git a/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.ts index c8996e8d3e..b534d50044 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GitLabDiscoveryProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { ScmIntegrationRegistry, @@ -22,7 +21,7 @@ import { } from '@backstage/integration'; import { Logger } from 'winston'; import * as results from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; import { GitLabClient, GitLabProject, paginated } from './gitlab'; import { CacheClient, diff --git a/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.test.ts index 1866247212..55e5560451 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.test.ts @@ -15,9 +15,9 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { GithubDiscoveryProcessor, parseUrl } from './GithubDiscoveryProcessor'; import { getOrganizationRepositories } from './github'; +import { LocationSpec } from './types'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations, diff --git a/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.ts index 982007d3a5..e790134011 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GithubDiscoveryProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { DefaultGithubCredentialsProvider, @@ -26,7 +25,7 @@ import { graphql } from '@octokit/graphql'; import { Logger } from 'winston'; import { getOrganizationRepositories } from './github'; import * as results from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; /** * Extracts repositories out of a GitHub org. diff --git a/plugins/catalog-backend/src/ingestion/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/GithubMultiOrgReaderProcessor.ts index 765b2139fd..383b82c019 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GithubMultiOrgReaderProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { DefaultGithubCredentialsProvider, @@ -33,7 +32,7 @@ import { readGithubMultiOrgConfig, } from './github'; import * as results from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; import { buildOrgHierarchy } from './util/org'; /** diff --git a/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.test.ts index 953c926c71..c01db88d3a 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ import { getVoidLogger } from '@backstage/backend-common'; -import { LocationSpec } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations, @@ -22,6 +21,7 @@ import { } from '@backstage/integration'; import { graphql } from '@octokit/graphql'; import { GithubOrgReaderProcessor } from './GithubOrgReaderProcessor'; +import { LocationSpec } from './types'; jest.mock('@octokit/graphql'); diff --git a/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.ts index 39384be0dc..8b5914cc80 100644 --- a/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/GithubOrgReaderProcessor.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { GithubCredentialType, @@ -31,7 +30,7 @@ import { parseGitHubOrgUrl, } from './github'; import * as results from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; import { assignGroupsToUsers, buildOrgHierarchy } from './util/org'; type GraphQL = typeof graphql; diff --git a/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.test.ts b/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.test.ts index c4551e30f8..83f1ca1925 100644 --- a/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.test.ts +++ b/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations, @@ -22,6 +21,7 @@ import { } from '@backstage/integration'; import path from 'path'; import { toAbsoluteUrl } from './LocationEntityProcessor'; +import { LocationSpec } from './types'; describe('LocationEntityProcessor', () => { describe('toAbsoluteUrl', () => { diff --git a/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.ts index 5aee5a1ca2..533a366f57 100644 --- a/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/LocationEntityProcessor.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { Entity, LocationEntity, LocationSpec } from '@backstage/catalog-model'; +import { Entity, LocationEntity } from '@backstage/catalog-model'; import { ScmIntegrationRegistry } from '@backstage/integration'; import path from 'path'; import * as result from './results'; -import { CatalogProcessor, CatalogProcessorEmit } from './types'; +import { CatalogProcessor, CatalogProcessorEmit, LocationSpec } from './types'; export function toAbsoluteUrl( integrations: ScmIntegrationRegistry, diff --git a/plugins/catalog-backend/src/ingestion/processors/PlaceholderProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/PlaceholderProcessor.ts index e19576d782..0d572a024d 100644 --- a/plugins/catalog-backend/src/ingestion/processors/PlaceholderProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/PlaceholderProcessor.ts @@ -15,11 +15,11 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; import { ScmIntegrationRegistry } from '@backstage/integration'; import yaml from 'yaml'; -import { CatalogProcessor } from './types'; +import { CatalogProcessor, LocationSpec } from './types'; /** @public */ export type PlaceholderResolverRead = (url: string) => Promise; diff --git a/plugins/catalog-backend/src/ingestion/processors/StaticLocationProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/StaticLocationProcessor.ts index bcafa33162..1c2c27f425 100644 --- a/plugins/catalog-backend/src/ingestion/processors/StaticLocationProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/StaticLocationProcessor.ts @@ -14,10 +14,9 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import * as result from './results'; -import { CatalogProcessorEmit } from './types'; +import { CatalogProcessorEmit, LocationSpec } from './types'; /** * @deprecated no longer in use, replaced by the ConfigLocationEntityProvider. diff --git a/plugins/catalog-backend/src/ingestion/processors/UrlReaderProcessor.ts b/plugins/catalog-backend/src/ingestion/processors/UrlReaderProcessor.ts index d13e5dfeda..c2be454bcf 100644 --- a/plugins/catalog-backend/src/ingestion/processors/UrlReaderProcessor.ts +++ b/plugins/catalog-backend/src/ingestion/processors/UrlReaderProcessor.ts @@ -15,7 +15,7 @@ */ import { UrlReader } from '@backstage/backend-common'; -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { assertError } from '@backstage/errors'; import parseGitUrl from 'git-url-parse'; import limiterFactory from 'p-limit'; @@ -28,6 +28,7 @@ import { CatalogProcessorEntityResult, CatalogProcessorParser, CatalogProcessorResult, + LocationSpec, } from './types'; const CACHE_KEY = 'v1'; diff --git a/plugins/catalog-backend/src/ingestion/processors/results.ts b/plugins/catalog-backend/src/ingestion/processors/results.ts index 539f915fba..01583678df 100644 --- a/plugins/catalog-backend/src/ingestion/processors/results.ts +++ b/plugins/catalog-backend/src/ingestion/processors/results.ts @@ -15,8 +15,8 @@ */ import { InputError, NotFoundError } from '@backstage/errors'; -import { Entity, LocationSpec } from '@backstage/catalog-model'; -import { CatalogProcessorResult } from './types'; +import { Entity } from '@backstage/catalog-model'; +import { CatalogProcessorResult, LocationSpec } from './types'; import { EntityRelationSpec } from '../../processing/types'; /** @public */ diff --git a/plugins/catalog-backend/src/ingestion/processors/types.ts b/plugins/catalog-backend/src/ingestion/processors/types.ts index 1bd65c6f7a..879b4d32a8 100644 --- a/plugins/catalog-backend/src/ingestion/processors/types.ts +++ b/plugins/catalog-backend/src/ingestion/processors/types.ts @@ -14,10 +14,27 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; import { EntityRelationSpec } from '../../processing/types'; +/** + * Holds the entity location information. + * + * @remarks + * + * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. + * This flag is then set to indicate that the file can be not present. + * default value: 'required'. + * + * @public + */ +export type LocationSpec = { + type: string; + target: string; + presence?: 'optional' | 'required'; +}; + /** * @public */ diff --git a/plugins/catalog-backend/src/ingestion/processors/util/parse.ts b/plugins/catalog-backend/src/ingestion/processors/util/parse.ts index 5637170f9b..0beaf1cd4c 100644 --- a/plugins/catalog-backend/src/ingestion/processors/util/parse.ts +++ b/plugins/catalog-backend/src/ingestion/processors/util/parse.ts @@ -14,15 +14,15 @@ * limitations under the License. */ -import { - Entity, - LocationSpec, - stringifyLocationRef, -} from '@backstage/catalog-model'; +import { Entity, stringifyLocationRef } from '@backstage/catalog-model'; import lodash from 'lodash'; import yaml from 'yaml'; import * as result from '../results'; -import { CatalogProcessorParser, CatalogProcessorResult } from '../types'; +import { + CatalogProcessorParser, + CatalogProcessorResult, + LocationSpec, +} from '../types'; /** @public */ export function* parseEntityYaml( diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 7d7a185231..eccf583e4b 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -14,8 +14,9 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { RecursivePartial } from '../util/RecursivePartial'; +import { LocationSpec } from './processors'; /** @public */ export type LocationAnalyzer = { diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts index bdfc623278..0853484408 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.test.ts @@ -21,7 +21,6 @@ import { Entity, EntityPolicies, LocationEntity, - LocationSpec, } from '@backstage/catalog-model'; import { ScmIntegrations } from '@backstage/integration'; import { @@ -29,6 +28,7 @@ import { CatalogProcessorCache, CatalogProcessorEmit, CatalogProcessorParser, + LocationSpec, results, } from '../ingestion'; import { CatalogRulesEnforcer } from '../ingestion/CatalogRules'; diff --git a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts index 2ffaa2912f..9649bc937b 100644 --- a/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts +++ b/plugins/catalog-backend/src/processing/DefaultCatalogProcessingOrchestrator.ts @@ -18,7 +18,6 @@ import { Entity, EntityPolicy, LocationEntity, - LocationSpec, parseLocationRef, stringifyEntityRef, stringifyLocationRef, @@ -36,6 +35,7 @@ import { Logger } from 'winston'; import { CatalogProcessor, CatalogProcessorParser, + LocationSpec, } from '../ingestion/processors'; import * as results from '../ingestion/processors/results'; import { diff --git a/plugins/catalog-backend/src/processing/util.ts b/plugins/catalog-backend/src/processing/util.ts index a4fa984dc1..5cf7821371 100644 --- a/plugins/catalog-backend/src/processing/util.ts +++ b/plugins/catalog-backend/src/processing/util.ts @@ -19,7 +19,6 @@ import { entityEnvelopeSchemaValidator, entitySchemaValidator, LocationEntity, - LocationSpec, ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, stringifyEntityRef, @@ -28,6 +27,7 @@ import { JsonObject, JsonValue } from '@backstage/types'; import { InputError } from '@backstage/errors'; import { ScmIntegrationRegistry } from '@backstage/integration'; import path from 'path'; +import { LocationSpec } from '../ingestion'; export function isLocationEntity(entity: Entity): entity is LocationEntity { return entity.kind === 'Location'; diff --git a/plugins/catalog-backend/src/providers/DefaultLocationStore.ts b/plugins/catalog-backend/src/providers/DefaultLocationStore.ts index f93afedbaa..9d5971508f 100644 --- a/plugins/catalog-backend/src/providers/DefaultLocationStore.ts +++ b/plugins/catalog-backend/src/providers/DefaultLocationStore.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/catalog-model'; import { Location } from '@backstage/catalog-client'; import { ConflictError, NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; @@ -23,7 +22,7 @@ import { DbLocationsRow } from '../database/tables'; import { getEntityLocationRef } from '../processing/util'; import { EntityProvider, EntityProviderConnection } from './types'; import { locationSpecToLocationEntity } from '../util/conversion'; -import { LocationStore } from '../service'; +import { LocationInput, LocationStore } from '../service'; export class DefaultLocationStore implements LocationStore, EntityProvider { private _connection: EntityProviderConnection | undefined; @@ -34,25 +33,25 @@ export class DefaultLocationStore implements LocationStore, EntityProvider { return 'DefaultLocationStore'; } - async createLocation(spec: LocationSpec): Promise { + async createLocation(input: LocationInput): Promise { const location = await this.db.transaction(async tx => { - // Attempt to find a previous location matching the spec + // Attempt to find a previous location matching the input const previousLocations = await this.locations(tx); - // TODO: when location id's are a compilation of spec target we can remove this full + // TODO: when location id's are a compilation of input target we can remove this full // lookup of locations first and just grab the by that instead. const previousLocation = previousLocations.some( - l => spec.type === l.type && spec.target === l.target, + l => input.type === l.type && input.target === l.target, ); if (previousLocation) { throw new ConflictError( - `Location ${spec.type}:${spec.target} already exists`, + `Location ${input.type}:${input.target} already exists`, ); } const inner: DbLocationsRow = { id: uuid(), - type: spec.type, - target: spec.target, + type: input.type, + target: input.target, }; await tx('locations').insert(inner); diff --git a/plugins/catalog-backend/src/service/AuthorizedLocationService.ts b/plugins/catalog-backend/src/service/AuthorizedLocationService.ts index 13557102c9..077f56c737 100644 --- a/plugins/catalog-backend/src/service/AuthorizedLocationService.ts +++ b/plugins/catalog-backend/src/service/AuthorizedLocationService.ts @@ -15,7 +15,7 @@ */ import { Location } from '@backstage/catalog-client'; -import { LocationSpec, Entity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { NotAllowedError, NotFoundError } from '@backstage/errors'; import { catalogLocationCreatePermission, @@ -26,7 +26,7 @@ import { AuthorizeResult, PermissionAuthorizer, } from '@backstage/plugin-permission-common'; -import { LocationService } from './types'; +import { LocationInput, LocationService } from './types'; export class AuthorizedLocationService implements LocationService { constructor( @@ -35,7 +35,7 @@ export class AuthorizedLocationService implements LocationService { ) {} async createLocation( - spec: LocationSpec, + spec: LocationInput, dryRun: boolean, options?: { authorizationToken?: string; diff --git a/plugins/catalog-backend/src/service/DefaultLocationService.ts b/plugins/catalog-backend/src/service/DefaultLocationService.ts index 8bc02e24f6..c6b5eaf162 100644 --- a/plugins/catalog-backend/src/service/DefaultLocationService.ts +++ b/plugins/catalog-backend/src/service/DefaultLocationService.ts @@ -15,7 +15,6 @@ */ import { Entity, - LocationSpec, ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, stringifyEntityRef, @@ -25,7 +24,7 @@ import { CatalogProcessingOrchestrator, DeferredEntity, } from '../processing/types'; -import { LocationService, LocationStore } from './types'; +import { LocationInput, LocationService, LocationStore } from './types'; import { locationSpecToMetadataName } from '../util/conversion'; export class DefaultLocationService implements LocationService { @@ -35,13 +34,13 @@ export class DefaultLocationService implements LocationService { ) {} async createLocation( - spec: LocationSpec, + input: LocationInput, dryRun: boolean, ): Promise<{ location: Location; entities: Entity[]; exists?: boolean }> { if (dryRun) { - return this.dryRunCreateLocation(spec); + return this.dryRunCreateLocation(input); } - const location = await this.store.createLocation(spec); + const location = await this.store.createLocation(input); return { location, entities: [] }; } @@ -93,7 +92,7 @@ export class DefaultLocationService implements LocationService { } private async dryRunCreateLocation( - spec: LocationSpec, + spec: LocationInput, ): Promise<{ location: Location; entities: Entity[]; exists?: boolean }> { // Run the existence check in parallel with the processing const existsPromise = this.store diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 755134c3d9..8db15cb4a1 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -18,11 +18,11 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { NotFoundError } from '@backstage/errors'; import type { Location } from '@backstage/catalog-client'; -import type { Entity, LocationSpec } from '@backstage/catalog-model'; +import type { Entity } from '@backstage/catalog-model'; import express from 'express'; import request from 'supertest'; import { EntitiesCatalog } from '../catalog'; -import { LocationService, RefreshService } from './types'; +import { LocationInput, LocationService, RefreshService } from './types'; import { basicEntityFilter } from './request'; import { createRouter } from './createRouter'; import { AuthorizeResult } from '@backstage/plugin-permission-common'; @@ -299,7 +299,7 @@ describe('createRouter readonly disabled', () => { const spec = { typez: 'b', target: 'c', - } as unknown as LocationSpec; + } as unknown as LocationInput; const response = await request(app) .post('/locations') @@ -311,7 +311,7 @@ describe('createRouter readonly disabled', () => { }); it('passes the body down', async () => { - const spec: LocationSpec = { + const spec: LocationInput = { type: 'b', target: 'c', }; @@ -339,7 +339,7 @@ describe('createRouter readonly disabled', () => { }); it('supports dry run', async () => { - const spec: LocationSpec = { + const spec: LocationInput = { type: 'b', target: 'c', }; @@ -506,7 +506,7 @@ describe('createRouter readonly enabled', () => { describe('POST /locations', () => { it('is not allowed', async () => { - const spec: LocationSpec = { + const spec: LocationInput = { type: 'b', target: 'c', }; @@ -522,7 +522,7 @@ describe('createRouter readonly enabled', () => { }); it('supports dry run', async () => { - const spec: LocationSpec = { + const spec: LocationInput = { type: 'b', target: 'c', }; diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index a4d911a421..56121f4155 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -32,7 +32,7 @@ import { } from './request'; import { disallowReadonlyMode, - locationSpec, + locationInput, validateRequestBody, } from './util'; import { RefreshOptions, LocationService, RefreshService } from './types'; @@ -175,7 +175,7 @@ export async function createRouter( if (locationService) { router .post('/locations', async (req, res) => { - const location = await validateRequestBody(req, locationSpec); + const location = await validateRequestBody(req, locationInput); const dryRun = yn(req.query.dryRun, { default: false }); // when in dryRun addLocation is effectively a read operation so we don't @@ -218,9 +218,9 @@ export async function createRouter( router.post('/analyze-location', async (req, res) => { const body = await validateRequestBody( req, - z.object({ location: locationSpec }), + z.object({ location: locationInput }), ); - const schema = z.object({ location: locationSpec }); + const schema = z.object({ location: locationInput }); const output = await locationAnalyzer.analyzeLocation(schema.parse(body)); res.status(200).json(output); }); diff --git a/plugins/catalog-backend/src/service/index.ts b/plugins/catalog-backend/src/service/index.ts index fd1b31b9d1..e1c7f54475 100644 --- a/plugins/catalog-backend/src/service/index.ts +++ b/plugins/catalog-backend/src/service/index.ts @@ -19,6 +19,7 @@ export type { RefreshService, RefreshOptions, LocationStore, + LocationInput, } from './types'; export { createRouter } from './createRouter'; export type { RouterOptions } from './createRouter'; diff --git a/plugins/catalog-backend/src/service/types.ts b/plugins/catalog-backend/src/service/types.ts index c10ccda14b..02268ab63c 100644 --- a/plugins/catalog-backend/src/service/types.ts +++ b/plugins/catalog-backend/src/service/types.ts @@ -14,16 +14,28 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { Location } from '@backstage/catalog-client'; +/** + * Holds the information required to create a new location in the catalog location store. + * + * @public + */ +export interface LocationInput { + type: string; + target: string; + /** @deprecated This field is ignored and will be removed */ + presence?: 'optional' | 'required'; +} + /** * The location service manages entity locations. * @public */ export interface LocationService { createLocation( - spec: LocationSpec, + location: LocationInput, dryRun: boolean, options?: { authorizationToken?: string; @@ -67,7 +79,7 @@ export interface RefreshService { * Interacts with the database to manage locations. * @public */ export interface LocationStore { - createLocation(spec: LocationSpec): Promise; + createLocation(location: LocationInput): Promise; listLocations(): Promise; getLocation(id: string): Promise; deleteLocation(id: string): Promise; diff --git a/plugins/catalog-backend/src/service/util.ts b/plugins/catalog-backend/src/service/util.ts index 09f1c2d8cf..9a914aadcb 100644 --- a/plugins/catalog-backend/src/service/util.ts +++ b/plugins/catalog-backend/src/service/util.ts @@ -40,7 +40,7 @@ export async function requireRequestBody(req: Request): Promise { return body; } -export const locationSpec = z +export const locationInput = z .object({ type: z.string(), target: z.string(), diff --git a/plugins/catalog-backend/src/util/conversion.ts b/plugins/catalog-backend/src/util/conversion.ts index 9dd5ce7986..75ed4f5e96 100644 --- a/plugins/catalog-backend/src/util/conversion.ts +++ b/plugins/catalog-backend/src/util/conversion.ts @@ -17,13 +17,13 @@ import { Entity, LocationEntityV1alpha1, - LocationSpec, ANNOTATION_LOCATION, ANNOTATION_ORIGIN_LOCATION, stringifyEntityRef, stringifyLocationRef, } from '@backstage/catalog-model'; import { createHash } from 'crypto'; +import { LocationSpec } from '../ingestion'; export function locationSpecToMetadataName(location: LocationSpec) { const hash = createHash('sha1') diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index bd507d892a..fb1469cb05 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -18,7 +18,7 @@ import { GithubCredentialsProvider } from '@backstage/integration'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { Knex } from 'knex'; -import { LocationSpec } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger as Logger_2 } from 'winston'; import { Octokit } from 'octokit'; import { PluginDatabaseManager } from '@backstage/backend-common'; diff --git a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts b/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts index c7d5db38c1..43559fcd5f 100644 --- a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts +++ b/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts @@ -17,7 +17,6 @@ import { Entity, getEntityName, - LocationSpec, parseEntityRef, RELATION_OWNED_BY, RELATION_OWNER_OF, @@ -25,6 +24,7 @@ import { import { CatalogProcessor, CatalogProcessorEmit, + LocationSpec, results, } from '@backstage/plugin-catalog-backend'; import { diff --git a/plugins/techdocs/api-report.md b/plugins/techdocs/api-report.md index 768363f8fb..7d554a293c 100644 --- a/plugins/techdocs/api-report.md +++ b/plugins/techdocs/api-report.md @@ -15,7 +15,6 @@ import { Entity } from '@backstage/catalog-model'; import { EntityName } from '@backstage/catalog-model'; import { FetchApi } from '@backstage/core-plugin-api'; import { IdentityApi } from '@backstage/core-plugin-api'; -import { LocationSpec } from '@backstage/catalog-model'; import { PropsWithChildren } from 'react'; import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; diff --git a/plugins/techdocs/src/types.ts b/plugins/techdocs/src/types.ts index dd35e255b6..fbe6f4b870 100644 --- a/plugins/techdocs/src/types.ts +++ b/plugins/techdocs/src/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity, LocationSpec } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; export type TechDocsMetadata = { site_name: string; @@ -22,5 +22,5 @@ export type TechDocsMetadata = { }; export type TechDocsEntityMetadata = Entity & { - locationMetadata?: LocationSpec; + locationMetadata?: { type: string; target: string }; };