diff --git a/.changeset/cuddly-snakes-kick.md b/.changeset/cuddly-snakes-kick.md new file mode 100644 index 0000000000..1a6def9249 --- /dev/null +++ b/.changeset/cuddly-snakes-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +New backend plugins with cli are now created using the new backend system diff --git a/packages/cli/src/lib/new/factories/backendPlugin.test.ts b/packages/cli/src/lib/new/factories/backendPlugin.test.ts index 5c1d496e49..c5930592a3 100644 --- a/packages/cli/src/lib/new/factories/backendPlugin.test.ts +++ b/packages/cli/src/lib/new/factories/backendPlugin.test.ts @@ -79,13 +79,13 @@ describe('backendPlugin factory', () => { 'Executing Template:', 'copying .eslintrc.js', 'templating README.md.hbs', + 'templating index.ts.hbs', 'templating package.json.hbs', 'copying index.ts', - 'templating run.ts.hbs', 'copying setupTests.ts', 'copying router.test.ts', 'copying router.ts', - 'templating standaloneServer.ts.hbs', + 'templating plugin.ts.hbs', 'Installing:', `moving plugins${sep}test-backend`, 'backend adding dependency', @@ -98,15 +98,6 @@ describe('backendPlugin factory', () => { 'backstage-plugin-test-backend': '^1.0.0', }, }); - const standaloneServerFile = await fs.readFile( - mockDir.resolve('plugins/test-backend/src/service/standaloneServer.ts'), - 'utf-8', - ); - - expect(standaloneServerFile).toContain( - `const logger = options.logger.child({ service: 'test-backend' });`, - ); - expect(standaloneServerFile).toContain(`.addRouter('/test', router);`); expect(Task.forCommand).toHaveBeenCalledTimes(2); expect(Task.forCommand).toHaveBeenCalledWith('yarn install', { diff --git a/packages/cli/src/lib/version.ts b/packages/cli/src/lib/version.ts index 9c19a3a8c4..baf0e945e6 100644 --- a/packages/cli/src/lib/version.ts +++ b/packages/cli/src/lib/version.ts @@ -20,7 +20,6 @@ import { paths } from './paths'; import { Lockfile } from './versioning'; /* eslint-disable @backstage/no-relative-monorepo-imports */ - /* This is a list of all packages used by the templates. If dependencies are added or removed, this list should be updated as well. @@ -33,7 +32,6 @@ This does not create an actual dependency on these packages and does not bring i Rollup will extract the value of the version field in each package at build time without leaving any imports in place. */ - import { version as backendCommon } from '../../../../packages/backend-common/package.json'; import { version as backendPluginApi } from '../../../../packages/backend-plugin-api/package.json'; import { version as backendTestUtils } from '../../../../packages/backend-test-utils/package.json'; @@ -46,9 +44,11 @@ import { version as devUtils } from '../../../../packages/dev-utils/package.json import { version as testUtils } from '../../../../packages/test-utils/package.json'; import { version as scaffolderNode } from '../../../../plugins/scaffolder-node/package.json'; import { version as theme } from '../../../../packages/theme/package.json'; +import { version as backendDefaults } from '../../../../packages/backend-defaults/package.json'; export const packageVersions: Record = { '@backstage/backend-common': backendCommon, + '@backstage/backend-defaults': backendDefaults, '@backstage/backend-plugin-api': backendPluginApi, '@backstage/backend-test-utils': backendTestUtils, '@backstage/cli': cli, diff --git a/packages/cli/templates/default-backend-plugin/dev/index.ts b/packages/cli/templates/default-backend-plugin/dev/index.ts new file mode 100644 index 0000000000..9d74c82508 --- /dev/null +++ b/packages/cli/templates/default-backend-plugin/dev/index.ts @@ -0,0 +1,9 @@ +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('@backstage/plugin-auth-backend-module-guest-provider')); +backend.add(import('../src')); + +backend.start(); diff --git a/packages/cli/templates/default-backend-plugin/package.json.hbs b/packages/cli/templates/default-backend-plugin/package.json.hbs index 2b860260ac..cbf41b80a8 100644 --- a/packages/cli/templates/default-backend-plugin/package.json.hbs +++ b/packages/cli/templates/default-backend-plugin/package.json.hbs @@ -29,6 +29,8 @@ }, "dependencies": { "@backstage/backend-common": "{{versionQuery '@backstage/backend-common'}}", + "@backstage/backend-defaults": "{{versionQuery '@backstage/backend-defaults'}}", + "@backstage/backend-plugin-api": "{{versionQuery '@backstage/backend-plugin-api'}}", "@backstage/config": "{{versionQuery '@backstage/config'}}", "@types/express": "{{versionQuery '@types/express' '4.17.6'}}", "express": "{{versionQuery 'express' '4.17.1'}}", diff --git a/packages/cli/templates/default-backend-plugin/src/index.ts b/packages/cli/templates/default-backend-plugin/src/index.ts deleted file mode 100644 index 47af95cb35..0000000000 --- a/packages/cli/templates/default-backend-plugin/src/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './service/router'; diff --git a/packages/cli/templates/default-backend-plugin/src/index.ts.hbs b/packages/cli/templates/default-backend-plugin/src/index.ts.hbs new file mode 100644 index 0000000000..c04b266c28 --- /dev/null +++ b/packages/cli/templates/default-backend-plugin/src/index.ts.hbs @@ -0,0 +1,2 @@ +export * from './service/router'; +export { {{pluginVar}} as default } from './plugin'; diff --git a/packages/cli/templates/default-backend-plugin/src/plugin.ts.hbs b/packages/cli/templates/default-backend-plugin/src/plugin.ts.hbs new file mode 100644 index 0000000000..cdc30b561b --- /dev/null +++ b/packages/cli/templates/default-backend-plugin/src/plugin.ts.hbs @@ -0,0 +1,32 @@ +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; + +/** + * {{pluginVar}} backend plugin + * + * @public + */ +export const {{pluginVar}} = createBackendPlugin({ + pluginId: '{{pluginVar}}', + register(env) { + env.registerInit({ + deps: { + httpRouter: coreServices.httpRouter, + logger: coreServices.logger, + }, + async init({ + httpRouter, + logger, + }) { + httpRouter.use( + await createRouter({ + logger, + }), + ); + }, + }); + }, +}); diff --git a/packages/cli/templates/default-backend-plugin/src/run.ts.hbs b/packages/cli/templates/default-backend-plugin/src/run.ts.hbs deleted file mode 100644 index 79c6bd6da8..0000000000 --- a/packages/cli/templates/default-backend-plugin/src/run.ts.hbs +++ /dev/null @@ -1,17 +0,0 @@ -import { getRootLogger } from '@backstage/backend-common'; -import yn from 'yn'; -import { startStandaloneServer } from './service/standaloneServer'; - -const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7007; -const enableCors = yn(process.env.PLUGIN_CORS, { default: false }); -const logger = getRootLogger(); - -startStandaloneServer({ port, enableCors, logger }).catch(err => { - logger.error(err); - process.exit(1); -}); - -process.on('SIGINT', () => { - logger.info('CTRL+C pressed; exiting.'); - process.exit(0); -}); diff --git a/packages/cli/templates/default-backend-plugin/src/service/router.ts b/packages/cli/templates/default-backend-plugin/src/service/router.ts index c15bac5892..ff7134e59d 100644 --- a/packages/cli/templates/default-backend-plugin/src/service/router.ts +++ b/packages/cli/templates/default-backend-plugin/src/service/router.ts @@ -1,10 +1,10 @@ import { errorHandler } from '@backstage/backend-common'; +import { LoggerService } from '@backstage/backend-plugin-api'; import express from 'express'; import Router from 'express-promise-router'; -import { Logger } from 'winston'; export interface RouterOptions { - logger: Logger; + logger: LoggerService; } export async function createRouter( @@ -19,6 +19,7 @@ export async function createRouter( logger.info('PONG!'); response.json({ status: 'ok' }); }); + router.use(errorHandler()); return router; } diff --git a/packages/cli/templates/default-backend-plugin/src/service/standaloneServer.ts.hbs b/packages/cli/templates/default-backend-plugin/src/service/standaloneServer.ts.hbs deleted file mode 100644 index 3433ed22ce..0000000000 --- a/packages/cli/templates/default-backend-plugin/src/service/standaloneServer.ts.hbs +++ /dev/null @@ -1,34 +0,0 @@ -import { createServiceBuilder } from '@backstage/backend-common'; -import { Server } from 'http'; -import { Logger } from 'winston'; -import { createRouter } from './router'; - -export interface ServerOptions { - port: number; - enableCors: boolean; - logger: Logger; -} - -export async function startStandaloneServer( - options: ServerOptions, -): Promise { - const logger = options.logger.child({ service: '{{id}}-backend' }); - logger.debug('Starting application server...'); - const router = await createRouter({ - logger, - }); - - let service = createServiceBuilder(module) - .setPort(options.port) - .addRouter('/{{id}}', router); - if (options.enableCors) { - service = service.enableCors({ origin: 'http://localhost:3000' }); - } - - return await service.start().catch(err => { - logger.error(err); - process.exit(1); - }); -} - -module.hot?.accept();