From 6d56c7d6b99a362d26ddbdbe4d47a357c9c0af04 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 10 Feb 2025 01:28:50 +0100 Subject: [PATCH] cli/new: move description to template pointer Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/new/defaultTemplates.ts | 20 ++++++++++++---- .../new/preparation/loadPortableTemplate.ts | 24 +++++++++---------- .../preparation/loadPortableTemplateConfig.ts | 1 + .../selectTemplateInteractively.ts | 4 +++- packages/cli/src/lib/new/types.ts | 2 +- .../cli/templates/default-backend-module.yaml | 3 +-- .../cli/templates/default-backend-plugin.yaml | 3 +-- .../default-common-plugin-package.yaml | 3 +-- .../default-node-plugin-package.yaml | 3 +-- packages/cli/templates/default-plugin.yaml | 3 +-- .../default-react-plugin-package.yaml | 3 +-- .../cli/templates/node-library-package.yaml | 3 +-- packages/cli/templates/scaffolder-module.yaml | 3 +-- .../cli/templates/web-library-package.yaml | 3 +-- 14 files changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/cli/src/lib/new/defaultTemplates.ts b/packages/cli/src/lib/new/defaultTemplates.ts index b8b4d0c086..e0c820f486 100644 --- a/packages/cli/src/lib/new/defaultTemplates.ts +++ b/packages/cli/src/lib/new/defaultTemplates.ts @@ -17,52 +17,64 @@ export const defaultTemplates = [ { id: 'backend-module', + description: 'A new backend module that extends an existing backend plugin', target: require.resolve( '@backstage/cli/templates/default-backend-module.yaml', ), }, { id: 'backend-plugin', + description: 'A new backend plugin', target: require.resolve( '@backstage/cli/templates/default-backend-plugin.yaml', ), }, { id: 'plugin-common', + description: 'A new isomorphic common plugin package', target: require.resolve( '@backstage/cli/templates/default-common-plugin-package.yaml', ), }, { id: 'plugin-node', + description: 'A new Node.js library plugin package', target: require.resolve( '@backstage/cli/templates/default-node-plugin-package.yaml', ), }, { id: 'frontend-plugin', + description: 'A new frontend plugin', target: require.resolve('@backstage/cli/templates/default-plugin.yaml'), }, { id: 'plugin-react', + description: 'A new web library plugin package', target: require.resolve( '@backstage/cli/templates/default-react-plugin-package.yaml', ), }, { id: 'node-library', + description: + 'A library package, exporting shared functionality for Node.js environments', target: require.resolve( '@backstage/cli/templates/node-library-package.yaml', ), }, - { - id: 'scaffolder-module', - target: require.resolve('@backstage/cli/templates/scaffolder-module.yaml'), - }, { id: 'web-library', + description: + 'A library package, exporting shared functionality for web environments', target: require.resolve( '@backstage/cli/templates/web-library-package.yaml', ), }, + { + id: 'scaffolder-module', + description: + 'A module exporting custom actions for @backstage/plugin-scaffolder-backend', + target: require.resolve('@backstage/cli/templates/scaffolder-module.yaml'), + }, ]; diff --git a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts index 05ba267271..adfea71c74 100644 --- a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts +++ b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts @@ -32,25 +32,23 @@ import { fromZodError } from 'zod-validation-error'; const templateDefinitionSchema = z .object({ - description: z.string().optional(), - template: z.string(), role: z.enum(TEMPLATE_ROLES), + template: z.string(), templateValues: z.record(z.string()).optional(), }) .strict(); -export async function loadPortableTemplate({ - id, - target, -}: PortableTemplatePointer): Promise { - if (target.match(/https?:\/\//)) { +export async function loadPortableTemplate( + pointer: PortableTemplatePointer, +): Promise { + if (pointer.target.match(/https?:\/\//)) { throw new Error('Remote templates are not supported yet'); } const templateContent = await fs - .readFile(paths.resolveTargetRoot(target), 'utf-8') + .readFile(paths.resolveTargetRoot(pointer.target), 'utf-8') .catch(error => { throw new ForwardedError( - `Failed to load template definition from '${target}'`, + `Failed to load template definition from '${pointer.target}'`, error, ); }); @@ -59,14 +57,14 @@ export async function loadPortableTemplate({ const parsed = templateDefinitionSchema.safeParse(rawTemplate); if (!parsed.success) { throw new ForwardedError( - `Invalid template definition at '${target}'`, + `Invalid template definition at '${pointer.target}'`, fromZodError(parsed.error), ); } - const { template, templateValues = {}, ...templateData } = parsed.data; + const { role, template, templateValues = {} } = parsed.data; - const templatePath = resolvePath(dirname(target), template); + const templatePath = resolvePath(dirname(pointer.target), template); const filePaths = await recursiveReaddir(templatePath).catch(error => { throw new ForwardedError( `Failed to load template contents from '${templatePath}'`, @@ -93,5 +91,5 @@ export async function loadPortableTemplate({ } } - return { id, templateValues, ...templateData, files }; + return { id: pointer.id, role, files, templateValues }; } diff --git a/packages/cli/src/lib/new/preparation/loadPortableTemplateConfig.ts b/packages/cli/src/lib/new/preparation/loadPortableTemplateConfig.ts index 15f971e154..144d194062 100644 --- a/packages/cli/src/lib/new/preparation/loadPortableTemplateConfig.ts +++ b/packages/cli/src/lib/new/preparation/loadPortableTemplateConfig.ts @@ -40,6 +40,7 @@ const pkgJsonWithNewConfigSchema = z.object({ z .object({ id: z.string(), + description: z.string().optional(), target: z.string(), }) .strict(), diff --git a/packages/cli/src/lib/new/preparation/selectTemplateInteractively.ts b/packages/cli/src/lib/new/preparation/selectTemplateInteractively.ts index 89c788e905..c8ea266fce 100644 --- a/packages/cli/src/lib/new/preparation/selectTemplateInteractively.ts +++ b/packages/cli/src/lib/new/preparation/selectTemplateInteractively.ts @@ -36,7 +36,9 @@ export async function selectTemplateInteractively( type: 'list', name: 'id', message: 'What do you want to create?', - choices: config.templatePointers.map(t => t.id), + choices: config.templatePointers.map(t => + t.description ? `${t.id} - ${t.description}` : t.id, + ), }, ]); selectedId = answers.id; diff --git a/packages/cli/src/lib/new/types.ts b/packages/cli/src/lib/new/types.ts index cb940120fe..acb4347e75 100644 --- a/packages/cli/src/lib/new/types.ts +++ b/packages/cli/src/lib/new/types.ts @@ -38,6 +38,7 @@ export type PortableTemplateConfig = { export type PortableTemplatePointer = { id: string; + description?: string; target: string; }; @@ -71,7 +72,6 @@ export type PortableTemplateFile = { export type PortableTemplate = { id: string; - description?: string; role: PortableTemplateRole; files: PortableTemplateFile[]; templateValues: Record; diff --git a/packages/cli/templates/default-backend-module.yaml b/packages/cli/templates/default-backend-module.yaml index c3c3817510..00aeb199c9 100644 --- a/packages/cli/templates/default-backend-module.yaml +++ b/packages/cli/templates/default-backend-module.yaml @@ -1,5 +1,4 @@ -description: A new backend module that extends an existing backend plugin with additional features -template: ./default-backend-module role: backend-plugin-module +template: ./default-backend-module templateValues: moduleVar: '{{ camelCase pluginId }}Module{{ upperFirst ( camelCase moduleId ) }}' diff --git a/packages/cli/templates/default-backend-plugin.yaml b/packages/cli/templates/default-backend-plugin.yaml index 3c6107cdb0..17387fbec8 100644 --- a/packages/cli/templates/default-backend-plugin.yaml +++ b/packages/cli/templates/default-backend-plugin.yaml @@ -1,5 +1,4 @@ -description: A new backend plugin -template: ./default-backend-plugin role: backend-plugin +template: ./default-backend-plugin templateValues: pluginVar: '{{ camelCase pluginId }}Plugin' diff --git a/packages/cli/templates/default-common-plugin-package.yaml b/packages/cli/templates/default-common-plugin-package.yaml index 9e4b9677f2..f187f15423 100644 --- a/packages/cli/templates/default-common-plugin-package.yaml +++ b/packages/cli/templates/default-common-plugin-package.yaml @@ -1,3 +1,2 @@ -description: A new isomorphic common plugin package -template: ./default-common-plugin-package role: plugin-common-library +template: ./default-common-plugin-package diff --git a/packages/cli/templates/default-node-plugin-package.yaml b/packages/cli/templates/default-node-plugin-package.yaml index 1a11cbde1e..02a4e18f2a 100644 --- a/packages/cli/templates/default-node-plugin-package.yaml +++ b/packages/cli/templates/default-node-plugin-package.yaml @@ -1,3 +1,2 @@ -description: A new Node.js library plugin package -template: ./default-node-plugin-package role: plugin-node-library +template: ./default-node-plugin-package diff --git a/packages/cli/templates/default-plugin.yaml b/packages/cli/templates/default-plugin.yaml index 64a2e25988..c4f5aa4d40 100644 --- a/packages/cli/templates/default-plugin.yaml +++ b/packages/cli/templates/default-plugin.yaml @@ -1,6 +1,5 @@ -description: A new frontend plugin -template: ./default-plugin role: frontend-plugin +template: ./default-plugin templateValues: pluginVar: '{{ camelCase pluginId }}Plugin' extensionName: '{{ upperFirst ( camelCase pluginId ) }}Page' diff --git a/packages/cli/templates/default-react-plugin-package.yaml b/packages/cli/templates/default-react-plugin-package.yaml index 9216f36c43..8d9d234c83 100644 --- a/packages/cli/templates/default-react-plugin-package.yaml +++ b/packages/cli/templates/default-react-plugin-package.yaml @@ -1,3 +1,2 @@ -description: A new web library plugin package -template: ./default-react-plugin-package role: plugin-web-library +template: ./default-react-plugin-package diff --git a/packages/cli/templates/node-library-package.yaml b/packages/cli/templates/node-library-package.yaml index 2e690b5ad7..4f715f97d1 100644 --- a/packages/cli/templates/node-library-package.yaml +++ b/packages/cli/templates/node-library-package.yaml @@ -1,3 +1,2 @@ -description: A new node-library package, exporting shared functionality for backend plugins and modules -template: ./node-library-package role: node-library +template: ./node-library-package diff --git a/packages/cli/templates/scaffolder-module.yaml b/packages/cli/templates/scaffolder-module.yaml index a9ad7ddf13..047ebae2de 100644 --- a/packages/cli/templates/scaffolder-module.yaml +++ b/packages/cli/templates/scaffolder-module.yaml @@ -1,6 +1,5 @@ -description: A module exporting custom actions for @backstage/plugin-scaffolder-backend -template: ./scaffolder-module role: backend-plugin-module +template: ./scaffolder-module params: pluginId: scaffolder templateValues: diff --git a/packages/cli/templates/web-library-package.yaml b/packages/cli/templates/web-library-package.yaml index f0c1e1baae..dccdea49cb 100644 --- a/packages/cli/templates/web-library-package.yaml +++ b/packages/cli/templates/web-library-package.yaml @@ -1,3 +1,2 @@ -description: A new web-library package, exporting shared functionality for frontend plugins -template: ./web-library-package role: web-library +template: ./web-library-package