diff --git a/packages/backend/package.json b/packages/backend/package.json index 260af8c137..083779951f 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -40,6 +40,8 @@ "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-code-coverage-backend": "workspace:^", + "@backstage/plugin-events-backend": "workspace:^", + "@backstage/plugin-events-node": "workspace:^", "@backstage/plugin-graphql-backend": "workspace:^", "@backstage/plugin-jenkins-backend": "workspace:^", "@backstage/plugin-kafka-backend": "workspace:^", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index cb9c9bf580..856b7e8595 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -43,6 +43,7 @@ import auth from './plugins/auth'; import azureDevOps from './plugins/azure-devops'; import catalog from './plugins/catalog'; import codeCoverage from './plugins/codecoverage'; +import events from './plugins/events'; import kubernetes from './plugins/kubernetes'; import kafka from './plugins/kafka'; import rollbar from './plugins/rollbar'; @@ -141,10 +142,12 @@ async function main() { ); const permissionEnv = useHotMemoize(module, () => createEnv('permission')); const playlistEnv = useHotMemoize(module, () => createEnv('playlist')); + const eventsEnv = useHotMemoize(module, () => createEnv('events')); const apiRouter = Router(); apiRouter.use('/catalog', await catalog(catalogEnv)); apiRouter.use('/code-coverage', await codeCoverage(codeCoverageEnv)); + apiRouter.use('/events', await events(eventsEnv, [])); apiRouter.use('/rollbar', await rollbar(rollbarEnv)); apiRouter.use('/scaffolder', await scaffolder(scaffolderEnv)); apiRouter.use('/tech-insights', await techInsights(techInsightsEnv)); diff --git a/packages/backend/src/plugins/events.ts b/packages/backend/src/plugins/events.ts new file mode 100644 index 0000000000..2ada92a5b6 --- /dev/null +++ b/packages/backend/src/plugins/events.ts @@ -0,0 +1,45 @@ +/* + * Copyright 2022 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + EventsBackend, + HttpPostIngressEventPublisher, +} from '@backstage/plugin-events-backend'; +import { EventSubscriber } from '@backstage/plugin-events-node'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; + +export default async function createPlugin( + env: PluginEnvironment, + subscribers: EventSubscriber[], +): Promise { + const eventsRouter = Router(); + const httpRouter = Router(); + eventsRouter.use('/http', httpRouter); + + const http = HttpPostIngressEventPublisher.fromConfig({ + config: env.config, + logger: env.logger, + router: httpRouter, + }); + + await new EventsBackend(env.logger) + .addPublishers(http) + .addSubscribers(subscribers) + .start(); + + return eventsRouter; +} diff --git a/yarn.lock b/yarn.lock index 198ab4acb7..d5c72dbb57 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5541,7 +5541,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-events-backend@workspace:plugins/events-backend": +"@backstage/plugin-events-backend@workspace:^, @backstage/plugin-events-backend@workspace:plugins/events-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-events-backend@workspace:plugins/events-backend" dependencies: @@ -22341,6 +22341,8 @@ __metadata: "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-code-coverage-backend": "workspace:^" + "@backstage/plugin-events-backend": "workspace:^" + "@backstage/plugin-events-node": "workspace:^" "@backstage/plugin-graphql-backend": "workspace:^" "@backstage/plugin-jenkins-backend": "workspace:^" "@backstage/plugin-kafka-backend": "workspace:^"