feat: new backend plugins to use new backend system

new plugins created with cli will now use the new backend system by
default

Signed-off-by: Heikki Hellgren <heikki.hellgren@op.fi>
This commit is contained in:
Heikki Hellgren
2024-03-12 11:24:29 +02:00
parent f1812deee3
commit bdf9ec131f
11 changed files with 57 additions and 67 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
New backend plugins with cli are now created using the new backend system
@@ -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', {
+2 -2
View File
@@ -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<string, string> = {
'@backstage/backend-common': backendCommon,
'@backstage/backend-defaults': backendDefaults,
'@backstage/backend-plugin-api': backendPluginApi,
'@backstage/backend-test-utils': backendTestUtils,
'@backstage/cli': cli,
@@ -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();
@@ -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'}}",
@@ -1 +0,0 @@
export * from './service/router';
@@ -0,0 +1,2 @@
export * from './service/router';
export { {{pluginVar}} as default } from './plugin';
@@ -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,
}),
);
},
});
},
});
@@ -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);
});
@@ -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;
}
@@ -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<Server> {
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();