diff --git a/.changeset/twenty-worms-enjoy.md b/.changeset/twenty-worms-enjoy.md new file mode 100644 index 0000000000..ef820a3c9e --- /dev/null +++ b/.changeset/twenty-worms-enjoy.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-backend': minor +--- + +**DEPRECATION**: Deprecated `ScaffolderEntitiesProcessor`, which should now instead be imported from `@backstage/plugin-catalog-backend-module-scaffolder-entity-model`. + +`catalogModuleTemplateKind` was also moved to that package and renamed to `catalogModuleScaffolderEntityModel`, without any deprecation since it was an alpha export. diff --git a/.changeset/wet-donuts-fry.md b/.changeset/wet-donuts-fry.md new file mode 100644 index 0000000000..1f4c8dc4fc --- /dev/null +++ b/.changeset/wet-donuts-fry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-scaffolder-entity-model': minor +--- + +Added a dedicated module to collect the `ScaffolderEntitiesProcessor` and `catalogModuleTemplateKind`. diff --git a/docs/features/software-catalog/extending-the-model.md b/docs/features/software-catalog/extending-the-model.md index 4520bf60ca..52ef565837 100644 --- a/docs/features/software-catalog/extending-the-model.md +++ b/docs/features/software-catalog/extending-the-model.md @@ -467,7 +467,7 @@ The next step is to create a custom processor for your new entity kind. This will be used within the catalog to make sure that it's able to ingest and validate entities of our new kind. Just like with the definition package, you can find inspiration in for example the existing -[ScaffolderEntitiesProcessor](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts). +[ScaffolderEntitiesProcessor](https://github.com/backstage/backstage/tree/master/plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.ts). We also provide a high-level example of what a catalog process for a custom entity might look like: diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 9b726fb307..2d5be63261 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -34,6 +34,7 @@ "@backstage/plugin-azure-devops-backend": "workspace:^", "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", "@backstage/plugin-entity-feedback-backend": "workspace:^", diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index cf7734c089..4e99732a11 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -23,6 +23,9 @@ backend.add(import('@backstage/plugin-app-backend/alpha')); backend.add(import('@backstage/plugin-azure-devops-backend')); backend.add(import('@backstage/plugin-badges-backend')); backend.add(import('@backstage/plugin-catalog-backend-module-unprocessed')); +backend.add( + import('@backstage/plugin-catalog-backend-module-scaffolder-entity-model'), +); backend.add(import('@backstage/plugin-catalog-backend/alpha')); backend.add(import('@backstage/plugin-devtools-backend')); backend.add(import('@backstage/plugin-entity-feedback-backend')); diff --git a/packages/backend/package.json b/packages/backend/package.json index d7f8a9c403..7872ada1aa 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -40,6 +40,7 @@ "@backstage/plugin-azure-sites-backend": "workspace:^", "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-code-coverage-backend": "workspace:^", diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index 7afd0a0cb7..223acab818 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -15,11 +15,11 @@ */ import { CatalogBuilder } from '@backstage/plugin-catalog-backend'; -import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backend'; +import { ScaffolderEntitiesProcessor } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; +import { UnprocessedEntitiesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; -import { UnprocessedEntitiesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; export default async function createPlugin( env: PluginEnvironment, diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/.eslintrc.js b/plugins/catalog-backend-module-scaffolder-entity-model/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/catalog-backend-module-scaffolder-entity-model/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/README.md b/plugins/catalog-backend-module-scaffolder-entity-model/README.md new file mode 100644 index 0000000000..c7535df66d --- /dev/null +++ b/plugins/catalog-backend-module-scaffolder-entity-model/README.md @@ -0,0 +1,3 @@ +# @backstage/plugin-catalog-backend-module-scaffolder-entity-model + +Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin. diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md b/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md new file mode 100644 index 0000000000..f9861959b7 --- /dev/null +++ b/plugins/catalog-backend-module-scaffolder-entity-model/api-report.md @@ -0,0 +1,29 @@ +## API Report File for "@backstage/plugin-catalog-backend-module-scaffolder-entity-model" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; +import { CatalogProcessor } from '@backstage/plugin-catalog-node'; +import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; +import { Entity } from '@backstage/catalog-model'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; + +// @public +const catalogModuleScaffolderEntityModel: () => BackendFeature; +export default catalogModuleScaffolderEntityModel; + +// @public +export class ScaffolderEntitiesProcessor implements CatalogProcessor { + // (undocumented) + getProcessorName(): string; + // (undocumented) + postProcessEntity( + entity: Entity, + _location: LocationSpec, + emit: CatalogProcessorEmit, + ): Promise; + // (undocumented) + validateEntityKind(entity: Entity): Promise; +} +``` diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json new file mode 100644 index 0000000000..9d8ab167a5 --- /dev/null +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -0,0 +1,49 @@ +{ + "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", + "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public" + }, + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "typesVersions": { + "*": { + "package.json": [ + "package.json" + ] + } + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", + "@backstage/plugin-scaffolder-common": "workspace:^" + }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/scaffolder-backend/src/modules/index.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/index.ts similarity index 65% rename from plugins/scaffolder-backend/src/modules/index.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/index.ts index 993a66815a..b2cd6eadde 100644 --- a/plugins/scaffolder-backend/src/modules/index.ts +++ b/plugins/catalog-backend-module-scaffolder-entity-model/src/index.ts @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Backstage Authors + * Copyright 2020 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,4 +14,11 @@ * limitations under the License. */ -export { catalogModuleTemplateKind } from './catalogModuleTemplateKind'; +/** + * Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin. + * + * @packageDocumentation + */ + +export * from './processor'; +export { catalogModuleScaffolderEntityModel as default } from './module'; diff --git a/plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.test.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/module.test.ts similarity index 82% rename from plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.test.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/module.test.ts index 7b8b99f5e2..f9111c1be5 100644 --- a/plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.test.ts +++ b/plugins/catalog-backend-module-scaffolder-entity-model/src/module.test.ts @@ -15,16 +15,16 @@ */ import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { ScaffolderEntitiesProcessor } from '../processor'; -import { catalogModuleTemplateKind } from './catalogModuleTemplateKind'; +import { ScaffolderEntitiesProcessor } from './processor'; +import { catalogModuleScaffolderEntityModel } from './module'; import { startTestBackend } from '@backstage/backend-test-utils'; -describe('catalogModuleTemplateKind', () => { +describe('catalogModuleScaffolderEntityModel', () => { it('should register the extension point', async () => { const extensionPoint = { addProcessor: jest.fn() }; await startTestBackend({ extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], - features: [catalogModuleTemplateKind()], + features: [catalogModuleScaffolderEntityModel()], }); expect(extensionPoint.addProcessor).toHaveBeenCalledWith( diff --git a/plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/module.ts similarity index 74% rename from plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/module.ts index 81d3dc3e93..8ed763d32c 100644 --- a/plugins/scaffolder-backend/src/modules/catalogModuleTemplateKind.ts +++ b/plugins/catalog-backend-module-scaffolder-entity-model/src/module.ts @@ -16,16 +16,17 @@ import { createBackendModule } from '@backstage/backend-plugin-api'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; -import { ScaffolderEntitiesProcessor } from '../processor'; +import { ScaffolderEntitiesProcessor } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; /** - * Registers support for the Template kind to the catalog backend plugin. + * Registers support for the scaffolder specific entity model (e.g. the Template + * kind) to the catalog backend plugin. * - * @alpha + * @public */ -export const catalogModuleTemplateKind = createBackendModule({ - moduleId: 'templateKind', +export const catalogModuleScaffolderEntityModel = createBackendModule({ pluginId: 'catalog', + moduleId: 'scaffolderEntityModel', register(env) { env.registerInit({ deps: { diff --git a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.test.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.test.ts similarity index 100% rename from plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.test.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.test.ts diff --git a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.ts similarity index 96% rename from plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.ts index 1de381a8ff..e597d74233 100644 --- a/plugins/scaffolder-backend/src/processor/ScaffolderEntitiesProcessor.ts +++ b/plugins/catalog-backend-module-scaffolder-entity-model/src/processor/ScaffolderEntitiesProcessor.ts @@ -32,7 +32,11 @@ import { templateEntityV1beta3Validator, } from '@backstage/plugin-scaffolder-common'; -/** @public */ +/** + * Adds support for scaffolder specific entity kinds to the catalog. + * + * @public + */ export class ScaffolderEntitiesProcessor implements CatalogProcessor { getProcessorName(): string { return 'ScaffolderEntitiesProcessor'; diff --git a/plugins/scaffolder-backend/src/processor/index.ts b/plugins/catalog-backend-module-scaffolder-entity-model/src/processor/index.ts similarity index 100% rename from plugins/scaffolder-backend/src/processor/index.ts rename to plugins/catalog-backend-module-scaffolder-entity-model/src/processor/index.ts diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 20def133ad..2eb0187a94 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -15,9 +15,6 @@ import { ResourcePermission } from '@backstage/plugin-permission-common'; import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateParametersV1beta3 } from '@backstage/plugin-scaffolder-common'; -// @alpha -export const catalogModuleTemplateKind: () => BackendFeature; - // @alpha (undocumented) export const createScaffolderActionConditionalDecision: ( permission: ResourcePermission<'scaffolder-action'>, diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 7fe4964827..17e13131cf 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -5,12 +5,9 @@ ```ts import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-node'; import { CatalogApi } from '@backstage/catalog-client'; -import { CatalogProcessor } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorEmit } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; import { Duration } from 'luxon'; -import { Entity } from '@backstage/catalog-model'; import { executeShellCommand as executeShellCommand_2 } from '@backstage/plugin-scaffolder-node'; import { ExecuteShellCommandOptions } from '@backstage/plugin-scaffolder-node'; import express from 'express'; @@ -20,7 +17,6 @@ import { HumanDuration } from '@backstage/types'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { JsonObject } from '@backstage/types'; import { Knex } from 'knex'; -import { LocationSpec } from '@backstage/plugin-catalog-common'; import { Logger } from 'winston'; import { Octokit } from 'octokit'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; @@ -30,6 +26,7 @@ import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { RESOURCE_TYPE_SCAFFOLDER_ACTION } from '@backstage/plugin-scaffolder-common/alpha'; import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder-common/alpha'; +import { ScaffolderEntitiesProcessor as ScaffolderEntitiesProcessor_2 } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; @@ -881,19 +878,8 @@ export interface RouterOptions { // @public @deprecated export type RunCommandOptions = ExecuteShellCommandOptions; -// @public (undocumented) -export class ScaffolderEntitiesProcessor implements CatalogProcessor { - // (undocumented) - getProcessorName(): string; - // (undocumented) - postProcessEntity( - entity: Entity, - _location: LocationSpec, - emit: CatalogProcessorEmit, - ): Promise; - // (undocumented) - validateEntityKind(entity: Entity): Promise; -} +// @public @deprecated +export const ScaffolderEntitiesProcessor: typeof ScaffolderEntitiesProcessor_2; // @public @deprecated export type SerializedTask = SerializedTask_2; diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 0399684144..781bf1b572 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -56,6 +56,7 @@ "@backstage/integration": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", diff --git a/plugins/scaffolder-backend/src/alpha.ts b/plugins/scaffolder-backend/src/alpha.ts index 07228fab88..4c4885413b 100644 --- a/plugins/scaffolder-backend/src/alpha.ts +++ b/plugins/scaffolder-backend/src/alpha.ts @@ -14,6 +14,5 @@ * limitations under the License. */ -export * from './modules'; export * from './service'; export { scaffolderPlugin as default } from './ScaffolderPlugin'; diff --git a/plugins/scaffolder-backend/src/deprecated.ts b/plugins/scaffolder-backend/src/deprecated.ts index d1a0f9ad5b..a1bcc30564 100644 --- a/plugins/scaffolder-backend/src/deprecated.ts +++ b/plugins/scaffolder-backend/src/deprecated.ts @@ -24,6 +24,7 @@ import { fetchContents as fetchContentsNode, } from '@backstage/plugin-scaffolder-node'; import { JsonObject } from '@backstage/types'; +import { ScaffolderEntitiesProcessor as ScaffolderEntitiesProcessorModule } from '@backstage/plugin-catalog-backend-module-scaffolder-entity-model'; /** * @public @@ -75,3 +76,11 @@ export const executeShellCommand = executeShellCommandNode; * @deprecated Use `fetchContents` from `@backstage/plugin-scaffolder-node` instead */ export const fetchContents = fetchContentsNode; + +/** + * Adds support for scaffolder specific entity kinds to the catalog. + * + * @public + * @deprecated Import from `@backstage/plugin-catalog-backend-module-scaffolder-entity-model` instead + */ +export const ScaffolderEntitiesProcessor = ScaffolderEntitiesProcessorModule; diff --git a/plugins/scaffolder-backend/src/index.ts b/plugins/scaffolder-backend/src/index.ts index ba2c25f80a..649a5df233 100644 --- a/plugins/scaffolder-backend/src/index.ts +++ b/plugins/scaffolder-backend/src/index.ts @@ -23,6 +23,5 @@ export * from './scaffolder'; export * from './service/router'; export * from './lib'; -export * from './processor'; export * from './deprecated'; diff --git a/yarn.lock b/yarn.lock index c8e21815dc..b2d5611f74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5667,6 +5667,21 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-catalog-backend-module-scaffolder-entity-model@workspace:^, @backstage/plugin-catalog-backend-module-scaffolder-entity-model@workspace:plugins/catalog-backend-module-scaffolder-entity-model": + version: 0.0.0-use.local + resolution: "@backstage/plugin-catalog-backend-module-scaffolder-entity-model@workspace:plugins/catalog-backend-module-scaffolder-entity-model" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" + "@backstage/plugin-scaffolder-common": "workspace:^" + languageName: unknown + linkType: soft + "@backstage/plugin-catalog-backend-module-unprocessed@workspace:^, @backstage/plugin-catalog-backend-module-unprocessed@workspace:plugins/catalog-backend-module-unprocessed": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-unprocessed@workspace:plugins/catalog-backend-module-unprocessed" @@ -8637,6 +8652,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" @@ -25868,6 +25884,7 @@ __metadata: "@backstage/plugin-azure-devops-backend": "workspace:^" "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" "@backstage/plugin-entity-feedback-backend": "workspace:^" @@ -25909,6 +25926,7 @@ __metadata: "@backstage/plugin-azure-sites-backend": "workspace:^" "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-code-coverage-backend": "workspace:^"