From 2c675620e168728f598d64f3dccb4f5b1bddcdde Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 10 Feb 2025 10:30:05 +0100 Subject: [PATCH] cli/new: add support for predefined template parameters Signed-off-by: Patrik Oldsberg --- .../src/lib/new/preparation/collectPortableTemplateInput.ts | 6 ++++-- .../src/lib/new/preparation/loadPortableTemplate.test.ts | 3 +++ .../cli/src/lib/new/preparation/loadPortableTemplate.ts | 5 +++-- packages/cli/src/lib/new/types.ts | 1 + packages/cli/templates/scaffolder-module.yaml | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts index 85798953a9..ae7dcd413a 100644 --- a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts +++ b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts @@ -47,11 +47,13 @@ export async function collectPortableTemplateInput( prompts.push(ownerPrompt()); } + const parameters = { ...template.parameters, ...prefilledParams }; + const needsAnswer = []; const prefilledAnswers = {} as PortableTemplateParams; for (const prompt of prompts) { - if (prompt.name && prefilledParams[prompt.name] !== undefined) { - prefilledAnswers[prompt.name] = prefilledParams[prompt.name]; + if (prompt.name && parameters[prompt.name] !== undefined) { + prefilledAnswers[prompt.name] = parameters[prompt.name]; } else { needsAnswer.push(prompt); } diff --git a/packages/cli/src/lib/new/preparation/loadPortableTemplate.test.ts b/packages/cli/src/lib/new/preparation/loadPortableTemplate.test.ts index 4e44d783b1..74892ebceb 100644 --- a/packages/cli/src/lib/new/preparation/loadPortableTemplate.test.ts +++ b/packages/cli/src/lib/new/preparation/loadPortableTemplate.test.ts @@ -24,6 +24,8 @@ describe('loadTemplate', () => { 'path/to/template1.yaml': ` template: template1 role: frontend-plugin + parameters: + foo: bar `, 'path/to/template1/hello.txt': 'hello world', }, @@ -38,6 +40,7 @@ describe('loadTemplate', () => { id: 'template1', role: 'frontend-plugin', files: [{ path: 'hello.txt', content: 'hello world' }], + parameters: { foo: 'bar' }, templateValues: {}, }); }); diff --git a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts index adfea71c74..6d2c2ec624 100644 --- a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts +++ b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts @@ -34,6 +34,7 @@ const templateDefinitionSchema = z .object({ role: z.enum(TEMPLATE_ROLES), template: z.string(), + parameters: z.record(z.string()).optional(), templateValues: z.record(z.string()).optional(), }) .strict(); @@ -62,7 +63,7 @@ export async function loadPortableTemplate( ); } - const { role, template, templateValues = {} } = parsed.data; + const { role, template, parameters = {}, templateValues = {} } = parsed.data; const templatePath = resolvePath(dirname(pointer.target), template); const filePaths = await recursiveReaddir(templatePath).catch(error => { @@ -91,5 +92,5 @@ export async function loadPortableTemplate( } } - return { id: pointer.id, role, files, templateValues }; + return { id: pointer.id, role, files, parameters, templateValues }; } diff --git a/packages/cli/src/lib/new/types.ts b/packages/cli/src/lib/new/types.ts index acb4347e75..6937ac2817 100644 --- a/packages/cli/src/lib/new/types.ts +++ b/packages/cli/src/lib/new/types.ts @@ -74,6 +74,7 @@ export type PortableTemplate = { id: string; role: PortableTemplateRole; files: PortableTemplateFile[]; + parameters: Record; templateValues: Record; }; diff --git a/packages/cli/templates/scaffolder-module.yaml b/packages/cli/templates/scaffolder-module.yaml index 047ebae2de..fb43ee7c5c 100644 --- a/packages/cli/templates/scaffolder-module.yaml +++ b/packages/cli/templates/scaffolder-module.yaml @@ -1,6 +1,6 @@ role: backend-plugin-module template: ./scaffolder-module -params: +parameters: pluginId: scaffolder templateValues: moduleVar: '{{ camelCase pluginId }}Module{{ upperFirst ( camelCase moduleId ) }}'