From ac0dd751cd62f99bdd49ea181caf22b231417162 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 14 Oct 2024 14:51:00 +0200 Subject: [PATCH] cli: update scaffolder-module template Signed-off-by: Patrik Oldsberg --- .../scaffolder-module/package.json.hbs | 4 ++- .../src/actions/example.test.ts | 24 ++++++++++++++ .../src/actions/{example => }/example.ts | 10 ++++-- .../src/actions/example/example.test.ts | 32 ------------------- .../src/actions/example/index.ts | 7 ---- .../scaffolder-module/src/actions/index.ts | 1 - .../scaffolder-module/src/index.ts.hbs | 2 +- .../src/{actions/example => }/module.ts | 6 ++-- 8 files changed, 38 insertions(+), 48 deletions(-) create mode 100644 packages/cli/templates/scaffolder-module/src/actions/example.test.ts rename packages/cli/templates/scaffolder-module/src/actions/{example => }/example.ts (77%) delete mode 100644 packages/cli/templates/scaffolder-module/src/actions/example/example.test.ts delete mode 100644 packages/cli/templates/scaffolder-module/src/actions/example/index.ts delete mode 100644 packages/cli/templates/scaffolder-module/src/actions/index.ts rename packages/cli/templates/scaffolder-module/src/{actions/example => }/module.ts (77%) diff --git a/packages/cli/templates/scaffolder-module/package.json.hbs b/packages/cli/templates/scaffolder-module/package.json.hbs index a6e6b5c5bc..25cd8616f2 100644 --- a/packages/cli/templates/scaffolder-module/package.json.hbs +++ b/packages/cli/templates/scaffolder-module/package.json.hbs @@ -29,10 +29,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/backend-plugin-api": "{{versionQuery '@backstage/backend-plugin-api'}}", "@backstage/plugin-scaffolder-node": "{{versionQuery '@backstage/plugin-scaffolder-node'}}" }, "devDependencies": { - "@backstage/cli": "{{versionQuery '@backstage/cli'}}" + "@backstage/cli": "{{versionQuery '@backstage/cli'}}", + "@backstage/plugin-scaffolder-node-test-utils": "{{versionQuery '@backstage/plugin-scaffolder-node-test-utils'}}" }, "files": [ "dist" diff --git a/packages/cli/templates/scaffolder-module/src/actions/example.test.ts b/packages/cli/templates/scaffolder-module/src/actions/example.test.ts new file mode 100644 index 0000000000..2e6020c240 --- /dev/null +++ b/packages/cli/templates/scaffolder-module/src/actions/example.test.ts @@ -0,0 +1,24 @@ +import { createExampleAction } from './example'; +import {createMockActionContext} from '@backstage/plugin-scaffolder-node-test-utils' + +describe('createExampleAction', () => { + it('should call action', async () => { + const action = createExampleAction(); + + await expect(action.handler(createMockActionContext({ + input: { + myParameter: 'test', + }, + }))).resolves.toBeUndefined() + }); + + it('should fail when passing foo', async () => { + const action = createExampleAction(); + + await expect(action.handler(createMockActionContext({ + input: { + myParameter: 'foo', + }, + }))).rejects.toThrow("myParameter cannot be 'foo'") + }); +}); diff --git a/packages/cli/templates/scaffolder-module/src/actions/example/example.ts b/packages/cli/templates/scaffolder-module/src/actions/example.ts similarity index 77% rename from packages/cli/templates/scaffolder-module/src/actions/example/example.ts rename to packages/cli/templates/scaffolder-module/src/actions/example.ts index 2b05c7fe38..7e47a89bcc 100644 --- a/packages/cli/templates/scaffolder-module/src/actions/example/example.ts +++ b/packages/cli/templates/scaffolder-module/src/actions/example.ts @@ -9,14 +9,14 @@ import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; * * @public */ -export function createAcmeExampleAction() { +export function createExampleAction() { // For more information on how to define custom actions, see // https://backstage.io/docs/features/software-templates/writing-custom-actions return createTemplateAction<{ myParameter: string; }>({ id: 'acme:example', - description: 'Runs Yeoman on an installed Yeoman generator', + description: 'Runs an example action', schema: { input: { type: 'object', @@ -24,7 +24,7 @@ export function createAcmeExampleAction() { properties: { myParameter: { title: 'An example parameter', - description: 'This is the schema for our example parameter', + description: "This is an example parameter, don't set it to foo", type: 'string', }, }, @@ -35,6 +35,10 @@ export function createAcmeExampleAction() { `Running example template with parameters: ${ctx.input.myParameter}`, ); + if (ctx.input.myParameter === 'foo') { + throw new Error(`myParameter cannot be 'foo'`); + } + await new Promise(resolve => setTimeout(resolve, 1000)); }, }); diff --git a/packages/cli/templates/scaffolder-module/src/actions/example/example.test.ts b/packages/cli/templates/scaffolder-module/src/actions/example/example.test.ts deleted file mode 100644 index d0e5374f3f..0000000000 --- a/packages/cli/templates/scaffolder-module/src/actions/example/example.test.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { PassThrough } from 'stream'; -import { createAcmeExampleAction } from './example'; - -describe('acme:example', () => { - afterEach(() => { - jest.resetAllMocks(); - }); - - it('should call action', async () => { - const action = createAcmeExampleAction(); - - const logger = { info: jest.fn() }; - - await action.handler({ - input: { - myParameter: 'test', - }, - workspacePath: '/tmp', - logger: logger as any, - logStream: new PassThrough(), - output: jest.fn(), - createTemporaryDirectory() { - // Usage of createMockDirectory is recommended for testing of filesystem operations - throw new Error('Not implemented'); - }, - }); - - expect(logger.info).toHaveBeenCalledWith( - 'Running example template with parameters: test', - ); - }); -}); diff --git a/packages/cli/templates/scaffolder-module/src/actions/example/index.ts b/packages/cli/templates/scaffolder-module/src/actions/example/index.ts deleted file mode 100644 index 06ce5befc0..0000000000 --- a/packages/cli/templates/scaffolder-module/src/actions/example/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { scaffolderModule } from './module'; - -/* - @deprecated - this way of importing modules will soon be unsupported, and you should use `backend.add(import(...))` instead. -*/ -export { createAcmeExampleAction } from './example'; -export default scaffolderModule; diff --git a/packages/cli/templates/scaffolder-module/src/actions/index.ts b/packages/cli/templates/scaffolder-module/src/actions/index.ts deleted file mode 100644 index ab6642ebb0..0000000000 --- a/packages/cli/templates/scaffolder-module/src/actions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './example'; diff --git a/packages/cli/templates/scaffolder-module/src/index.ts.hbs b/packages/cli/templates/scaffolder-module/src/index.ts.hbs index 3690e43b8e..58d5da4a57 100644 --- a/packages/cli/templates/scaffolder-module/src/index.ts.hbs +++ b/packages/cli/templates/scaffolder-module/src/index.ts.hbs @@ -5,4 +5,4 @@ * @packageDocumentation */ -export * from './actions'; +export { scaffolderModule as default } from './module'; diff --git a/packages/cli/templates/scaffolder-module/src/actions/example/module.ts b/packages/cli/templates/scaffolder-module/src/module.ts similarity index 77% rename from packages/cli/templates/scaffolder-module/src/actions/example/module.ts rename to packages/cli/templates/scaffolder-module/src/module.ts index 238268dcec..56ec38ac33 100644 --- a/packages/cli/templates/scaffolder-module/src/actions/example/module.ts +++ b/packages/cli/templates/scaffolder-module/src/module.ts @@ -1,12 +1,12 @@ import { createBackendModule } from "@backstage/backend-plugin-api"; import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha'; -import { createAcmeExampleAction } from "./example"; +import { createExampleAction } from "./actions/example"; /** * A backend module that registers the action into the scaffolder */ export const scaffolderModule = createBackendModule({ - moduleId: 'acme:example', + moduleId: 'example-action', pluginId: 'scaffolder', register({ registerInit }) { registerInit({ @@ -14,7 +14,7 @@ export const scaffolderModule = createBackendModule({ scaffolderActions: scaffolderActionsExtensionPoint }, async init({ scaffolderActions}) { - scaffolderActions.addActions(createAcmeExampleAction()); + scaffolderActions.addActions(createExampleAction()); } }); },