diff --git a/docs/integrations/bitbucketServer/discovery.md b/docs/integrations/bitbucketServer/discovery.md index a66db83806..150e92f11b 100644 --- a/docs/integrations/bitbucketServer/discovery.md +++ b/docs/integrations/bitbucketServer/discovery.md @@ -30,14 +30,12 @@ yarn --cwd packages/backend add @backstage/plugin-catalog-backend-module-bitbuck ```ts // optional if you want HTTP endpojnts to receive external events -// backend.add(import('@backstage/plugin-events-backend/alpha')); +// backend.add(import('@backstage/plugin-events-backend')); // optional if you want to use AWS SQS instead of HTTP endpoints to receive external events -// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs/alpha')); +// backend.add(import('@backstage/plugin-events-backend-module-aws-sqs')); +backend.add(import('@backstage/plugin-events-backend-module-bitbucket-server')); backend.add( - import('@backstage/plugin-events-backend-module-bitbucket-server/alpha'), -); -backend.add( - import('@backstage/plugin-catalog-backend-module-bitbucket-server/alpha'), + import('@backstage/plugin-catalog-backend-module-bitbucket-server'), ); ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 45edfa150f..41c4fabd69 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -59,7 +59,6 @@ "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-events-node": "workspace:^", - "node-fetch": "^2.7.0", "p-throttle": "^4.1.1", "uuid": "^11.0.0" }, @@ -67,7 +66,6 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-events-backend-test-utils": "workspace:^", - "@types/node-fetch": "^2.5.12", "luxon": "^3.0.0", "msw": "^1.0.0" }, diff --git a/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md b/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md index 06212c3c60..7082701333 100644 --- a/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md +++ b/plugins/catalog-backend-module-bitbucket-server/report-alpha.api.md @@ -3,11 +3,5 @@ > 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'; - -// @alpha (undocumented) -const _feature: BackendFeature; -export default _feature; - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-bitbucket-server/report.api.md b/plugins/catalog-backend-module-bitbucket-server/report.api.md index add82b0a90..cdbe714be3 100644 --- a/plugins/catalog-backend-module-bitbucket-server/report.api.md +++ b/plugins/catalog-backend-module-bitbucket-server/report.api.md @@ -6,7 +6,7 @@ import { AuthService } from '@backstage/backend-plugin-api'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { BitbucketServerIntegrationConfig } from '@backstage/integration'; -import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogService } from '@backstage/plugin-catalog-node'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-node'; @@ -77,7 +77,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { parser?: BitbucketServerLocationParser; schedule?: SchedulerServiceTaskRunner; scheduler?: SchedulerService; - catalogApi?: CatalogApi; + catalogApi?: CatalogService; auth?: AuthService; }, ): BitbucketServerEntityProvider[]; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts index cba672ce49..706d03bd5d 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/alpha.ts @@ -14,8 +14,4 @@ * limitations under the License. */ -import { default as feature } from './module'; - -/** @alpha */ -const _feature = feature; -export default _feature; +import {} from './module'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts b/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts index a29b0ae4ff..6deb47ca6a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/lib/BitbucketServerClient.ts @@ -197,6 +197,7 @@ export type BitbucketServerPagedResponse = { values: T[]; nextPageStart: number; }; + /** * @public */ diff --git a/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts index 2d68b6ef49..d66ef4e2a2 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/module/catalogModuleBitbucketServerEntityProvider.ts @@ -18,10 +18,8 @@ import { coreServices, createBackendModule, } from '@backstage/backend-plugin-api'; -import { - catalogProcessingExtensionPoint, - catalogServiceRef, -} from '@backstage/plugin-catalog-node/alpha'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node/alpha'; import { eventsServiceRef } from '@backstage/plugin-events-node'; import { BitbucketServerEntityProvider } from '../providers/BitbucketServerEntityProvider'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index 81699550bd..ba4e3e0411 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -18,7 +18,7 @@ import { SchedulerService, SchedulerServiceTaskRunner, SchedulerServiceTaskInvocationDefinition, - AuthService, + BackstageCredentials, } from '@backstage/backend-plugin-api'; import { mockServices, @@ -26,6 +26,7 @@ import { } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { + CatalogService, DeferredEntity, EntityProviderConnection, locationSpecToLocationEntity, @@ -39,8 +40,8 @@ import { import { BitbucketServerPagedResponse } from '../lib'; import { Entity, LocationEntity } from '@backstage/catalog-model'; import { BitbucketServerEvents } from '../lib/index'; -import { CatalogApi } from '@backstage/catalog-client'; import { DefaultEventsService } from '@backstage/plugin-events-node'; +import { catalogServiceMock } from '@backstage/plugin-catalog-node/testUtils'; class PersistingTaskRunner implements SchedulerServiceTaskRunner { private tasks: SchedulerServiceTaskInvocationDefinition[] = []; @@ -163,11 +164,6 @@ function setupRepositoryReqHandler(defaultBranch: string) { ); } -// const authService = { -// getPluginRequestToken: async ({onBehalfOf, targetPluginId}) => { -// return { token: 'fake-token' }; -// }, -// } as any as AuthService; const repoPushEvent: BitbucketServerEvents.RefsChangedEvent = { eventKey: 'repo:refs_changed', date: '2017-09-19T09:45:32+1000', @@ -771,9 +767,7 @@ describe('BitbucketServerEntityProvider', () => { setupRepositoryReqHandler('master'); - authService.getPluginRequestToken.mockResolvedValue({ - token: 'fake-token', - }); + // authService.getOwnServiceCredentials(); const config = new ConfigReader({ integrations: { @@ -797,13 +791,14 @@ describe('BitbucketServerEntityProvider', () => { }, }); - const catalogApi = { + const catalogApi = catalogServiceMock.mock({ getEntities: async ( request: { filter: Record }, - options: { token: string }, + credentials: { credentials: BackstageCredentials }, ): Promise<{ items: Entity[] }> => { if ( - options.token !== 'fake-token' || + credentials.credentials !== + (await authService.getOwnServiceCredentials()) || request.filter.kind !== 'Location' || request.filter[`metadata.annotations.${host}/repo-url`] !== `${test1RepoUrl}/kept-module:${targetPath}` @@ -814,14 +809,14 @@ describe('BitbucketServerEntityProvider', () => { items: [keptModule], }; }, - }; + }); const provider = BitbucketServerEntityProvider.fromConfig(config, { - catalogApi: catalogApi as any as CatalogApi, + catalogApi: catalogApi, logger, schedule, events, - auth: authService as any as AuthService, + auth: authService, })[0]; await provider.connect(entityProviderConnection); @@ -869,13 +864,14 @@ describe('BitbucketServerEntityProvider', () => { }, }); - const catalogApi = { + const catalogApi = catalogServiceMock.mock({ getEntities: async ( request: { filter: Record }, - options: { token: string }, + credentials: { credentials: BackstageCredentials }, ): Promise<{ items: Entity[] }> => { if ( - options.token !== 'fake-token' || + credentials.credentials !== + (await authService.getOwnServiceCredentials()) || request.filter.kind !== 'Location' || request.filter[`metadata.annotations.${host}/repo-url`] !== `${test1RepoUrl}/kept-module:${targetPath}` @@ -886,13 +882,14 @@ describe('BitbucketServerEntityProvider', () => { items: [keptModule], }; }, - }; + }); + const provider = BitbucketServerEntityProvider.fromConfig(config, { - catalogApi: catalogApi as any as CatalogApi, + catalogApi: catalogApi, logger, schedule, events, - auth: authService as any as AuthService, + auth: authService, })[0]; await provider.connect(entityProviderConnection); @@ -940,22 +937,13 @@ describe('BitbucketServerEntityProvider', () => { }, }); - const catalogApi = { - getEntities: async ( - _request: { filter: Record }, - _options: { token: string }, - ): Promise<{ items: Entity[] }> => { - return { - items: [], - }; - }, - }; + const catalogApi = catalogServiceMock({ entities: [] }); const provider = BitbucketServerEntityProvider.fromConfig(config, { - catalogApi: catalogApi as any as CatalogApi, + catalogApi: catalogApi, logger, schedule, events, - auth: authService as any as AuthService, + auth: authService, })[0]; await provider.connect(entityProviderConnection); @@ -1010,22 +998,13 @@ describe('BitbucketServerEntityProvider', () => { }, }); - const catalogApi = { - getEntities: async ( - _request: { filter: Record }, - _options: { token: string }, - ): Promise<{ items: Entity[] }> => { - return { - items: [], - }; - }, - }; + const catalogApi = catalogServiceMock({ entities: [] }); const provider = BitbucketServerEntityProvider.fromConfig(config, { - catalogApi: catalogApi as any as CatalogApi, + catalogApi: catalogApi as any as CatalogService, logger, schedule, events, - auth: authService as any as AuthService, + auth: authService, })[0]; await provider.connect(entityProviderConnection); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts index c6df6a19b4..b462f8756a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts @@ -25,6 +25,7 @@ import { EntityProvider, EntityProviderConnection, DeferredEntity, + CatalogService, } from '@backstage/plugin-catalog-node'; import * as uuid from 'uuid'; import { BitbucketServerClient, paginated } from '../lib'; @@ -38,13 +39,13 @@ import { } from './BitbucketServerLocationParser'; import { AuthService, + BackstageCredentials, LoggerService, SchedulerService, SchedulerServiceTaskRunner, } from '@backstage/backend-plugin-api'; import { BitbucketServerEvents } from '../lib'; import { EventsService } from '@backstage/plugin-events-node'; -import { CatalogApi } from '@backstage/catalog-client'; const TOPIC_REPO_REFS_CHANGED = 'bitbucketServer.repo:refs_changed'; @@ -63,7 +64,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { private readonly logger: LoggerService; private readonly scheduleFn: () => Promise; private connection?: EntityProviderConnection; - private readonly catalogApi?: CatalogApi; + private readonly catalogApi?: CatalogService; private readonly events?: EventsService; private readonly auth?: AuthService; private eventConfigErrorThrown = false; @@ -78,7 +79,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { parser?: BitbucketServerLocationParser; schedule?: SchedulerServiceTaskRunner; scheduler?: SchedulerService; - catalogApi?: CatalogApi; + catalogApi?: CatalogService; auth?: AuthService; }, ): BitbucketServerEntityProvider[] { @@ -127,7 +128,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { logger: LoggerService, taskRunner: SchedulerServiceTaskRunner, parser?: BitbucketServerLocationParser, - catalogApi?: CatalogApi, + catalogApi?: CatalogService, events?: EventsService, auth?: AuthService, ) { @@ -294,19 +295,14 @@ export class BitbucketServerEntityProvider implements EntityProvider { * @returns Boolean */ private canHandleEvents(): boolean { - if ( - this.catalogApi !== undefined && - this.catalogApi !== null && - this.auth !== undefined && - this.auth !== null - ) { + if (this.catalogApi && this.auth) { return true; } if (!this.eventConfigErrorThrown) { this.eventConfigErrorThrown = true; throw new Error( - `${this.getProviderName()} not well configured to handle repo:push. Missing CatalogApi and/or TokenManager.`, + `${this.getProviderName()} not well configured to handle repo:push. Missing CatalogApi and/or AuthService.`, ); } @@ -387,11 +383,10 @@ export class BitbucketServerEntityProvider implements EntityProvider { this.logger.error('Failed to create location entity.'); return; } - const { token } = await this.auth!.getPluginRequestToken({ - onBehalfOf: await this.auth!.getOwnServiceCredentials(), - targetPluginId: 'catalog', // e.g. 'catalog' - }); - const existing = await this.findExistingLocations(catalogRepoUrl, token); + const existing = await this.findExistingLocations( + catalogRepoUrl, + await this.auth!.getOwnServiceCredentials(), + ); const stillExisting: LocationEntity[] = []; const removed: DeferredEntity[] = []; existing.forEach(item => { @@ -486,13 +481,13 @@ export class BitbucketServerEntityProvider implements EntityProvider { private async findExistingLocations( catalogRepoUrl: string, - token: string, + credentials: BackstageCredentials, ): Promise { const filter: Record = {}; filter.kind = 'Location'; filter[`metadata.annotations.${this.targetAnnotation}`] = catalogRepoUrl; - return this.catalogApi!.getEntities({ filter }, { token }).then( + return this.catalogApi!.getEntities({ filter }, { credentials }).then( result => result.items, ) as Promise; } diff --git a/plugins/events-backend-module-bitbucket-server/README.md b/plugins/events-backend-module-bitbucket-server/README.md index 2c8fdff092..4950015010 100644 --- a/plugins/events-backend-module-bitbucket-server/README.md +++ b/plugins/events-backend-module-bitbucket-server/README.md @@ -32,17 +32,5 @@ yarn add --cwd packages/backend @backstage/plugin-events-backend-module-bitbucke ```ts // packages/backend/src/index.ts -backend.add( - import('@backstage/plugin-events-backend-module-bitbucket-server/alpha'), -); -``` - -### Legacy Backend System - -```ts -// packages/backend/src/plugins/events.ts -const eventRouter = new BitbucketCloudEventRouter({ - events: env.events, -}); -await eventRouter.subscribe(); +backend.add(import('@backstage/plugin-events-backend-module-bitbucket-server')); ``` diff --git a/plugins/events-backend-module-bitbucket-server/package.json b/plugins/events-backend-module-bitbucket-server/package.json index 4f38cb1f05..4cfe424618 100644 --- a/plugins/events-backend-module-bitbucket-server/package.json +++ b/plugins/events-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-server", - "version": "0.1.0", + "version": "0.0.0", "backstage": { "role": "backend-plugin-module", "pluginId": "events", diff --git a/plugins/events-backend-module-bitbucket-server/report-alpha.api.md b/plugins/events-backend-module-bitbucket-server/report-alpha.api.md index 61559711f3..47b9068604 100644 --- a/plugins/events-backend-module-bitbucket-server/report-alpha.api.md +++ b/plugins/events-backend-module-bitbucket-server/report-alpha.api.md @@ -3,12 +3,5 @@ > 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'; - -// @public -const eventsModuleBitbucketServerEventRouter: BackendFeature; -export default eventsModuleBitbucketServerEventRouter; -export { eventsModuleBitbucketServerEventRouter }; - // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/events-backend-module-bitbucket-server/report.api.md b/plugins/events-backend-module-bitbucket-server/report.api.md index e0b55a5f57..916f7fa2ab 100644 --- a/plugins/events-backend-module-bitbucket-server/report.api.md +++ b/plugins/events-backend-module-bitbucket-server/report.api.md @@ -4,18 +4,6 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; -import { EventParams } from '@backstage/plugin-events-node'; -import { EventsService } from '@backstage/plugin-events-node'; -import { SubTopicEventRouter } from '@backstage/plugin-events-node'; - -// @public -export class BitbucketServerEventRouter extends SubTopicEventRouter { - constructor(options: { events: EventsService }); - // (undocumented) - protected determineSubTopic(params: EventParams): string | undefined; - // (undocumented) - protected getSubscriberId(): string; -} // @public const eventsModuleBitbucketServerEventRouter: BackendFeature; diff --git a/plugins/events-backend-module-bitbucket-server/src/alpha.ts b/plugins/events-backend-module-bitbucket-server/src/alpha.ts index c741a37f24..588ee62daa 100644 --- a/plugins/events-backend-module-bitbucket-server/src/alpha.ts +++ b/plugins/events-backend-module-bitbucket-server/src/alpha.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export { eventsModuleBitbucketServerEventRouter } from './service/eventsModuleBitbucketServerEventRouter'; -export { eventsModuleBitbucketServerEventRouter as default } from './service/eventsModuleBitbucketServerEventRouter'; +import {} from './service/eventsModuleBitbucketServerEventRouter'; diff --git a/plugins/events-backend-module-bitbucket-server/src/index.ts b/plugins/events-backend-module-bitbucket-server/src/index.ts index afa3e204d2..6cf9aeb5e2 100644 --- a/plugins/events-backend-module-bitbucket-server/src/index.ts +++ b/plugins/events-backend-module-bitbucket-server/src/index.ts @@ -21,6 +21,5 @@ * @packageDocumentation */ -export { BitbucketServerEventRouter } from './router/BitbucketServerEventRouter'; export { eventsModuleBitbucketServerEventRouter } from './service/eventsModuleBitbucketServerEventRouter'; export { eventsModuleBitbucketServerEventRouter as default } from './service/eventsModuleBitbucketServerEventRouter'; diff --git a/yarn.lock b/yarn.lock index 4605124ba9..783947ce26 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5749,10 +5749,8 @@ __metadata: "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-events-backend-test-utils": "workspace:^" "@backstage/plugin-events-node": "workspace:^" - "@types/node-fetch": ^2.5.12 luxon: ^3.0.0 msw: ^1.0.0 - node-fetch: ^2.7.0 p-throttle: ^4.1.1 uuid: ^11.0.0 languageName: unknown @@ -20110,7 +20108,7 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.5.12, @types/node-fetch@npm:^2.6.4, @types/node-fetch@npm:^2.6.9": +"@types/node-fetch@npm:^2.6.4, @types/node-fetch@npm:^2.6.9": version: 2.6.12 resolution: "@types/node-fetch@npm:2.6.12" dependencies: