From 72bada65ef0988aca4517b24cb6c5178f93a67ee Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sun, 9 Feb 2025 13:22:52 +0100 Subject: [PATCH] cli/new: remove ability to define custom prompts Signed-off-by: Patrik Oldsberg --- .../collectPortableTemplateInput.test.ts | 30 ++++++++++-- .../collectPortableTemplateInput.ts | 47 ++----------------- .../new/preparation/loadPortableTemplate.ts | 10 ---- packages/cli/src/lib/new/types.ts | 1 - 4 files changed, 31 insertions(+), 57 deletions(-) diff --git a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.test.ts b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.test.ts index 51b778e3e1..e90e35ba45 100644 --- a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.test.ts +++ b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.test.ts @@ -23,13 +23,21 @@ describe('collectTemplateParams', () => { config: { isUsingDefaultTemplates: false, templatePointers: [], - globals: {}, + globals: { + baseVersion: '0.1.0', + license: 'Apache-2.0', + private: true, + packagePrefix: '@internal/', + pluginInfix: 'plugin-', + }, } satisfies PortableTemplateConfig, template: { id: 'test', templatePath: '/test', targetPath: '/example', role: 'frontend-plugin' as const, + files: [], + templateValues: {}, }, prefilledParams: { pluginId: 'test', @@ -46,11 +54,19 @@ describe('collectTemplateParams', () => { builtInParams: { owner: 'me', }, + packageParams: { + packageName: '@internal/plugin-test', + packagePath: 'plugins/test', + }, params: { + license: 'Apache-2.0', + packageName: '@internal/plugin-test', + packageVersion: '0.1.0', + privatePackage: true, pluginId: 'test', owner: 'me', }, - globals: {}, + globals: baseOptions.config.globals, }); }); @@ -70,11 +86,19 @@ describe('collectTemplateParams', () => { builtInParams: { owner: undefined, }, + packageParams: { + packageName: '@internal/plugin-other', + packagePath: 'plugins/other', + }, params: { + license: 'Apache-2.0', + packageName: '@internal/plugin-other', + packageVersion: '0.1.0', + privatePackage: true, pluginId: 'other', owner: undefined, }, - globals: {}, + globals: baseOptions.config.globals, }); }); }); diff --git a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts index 798494c65f..3655933be9 100644 --- a/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts +++ b/packages/cli/src/lib/new/preparation/collectPortableTemplateInput.ts @@ -23,14 +23,11 @@ import { PortableTemplateInputBuiltInParams, PortableTemplateInputRoleParams, PortableTemplateParams, - PortableTemplatePrompt, PortableTemplateRole, } from '../types'; import { PortableTemplate } from '../types'; import { resolvePackageParams } from './resolvePackageParams'; -const RESERVED_PROMPT_NAMES = ['name', 'pluginId', 'moduleId', 'owner']; - type CollectTemplateParamsOptions = { config: PortableTemplateConfig; template: PortableTemplate; @@ -44,13 +41,11 @@ export async function collectPortableTemplateInput( const codeOwnersFilePath = await getCodeownersFilePath(paths.targetRoot); - const rolePrompts = getPromptsForRole(template.role); + const prompts = getPromptsForRole(template.role); - const buildInPrompts = codeOwnersFilePath ? [ownerPrompt()] : []; - - const templatePrompts = template.prompts?.map(customPrompt) ?? []; - - const prompts = [...rolePrompts, ...buildInPrompts, ...templatePrompts]; + if (codeOwnersFilePath) { + prompts.push(ownerPrompt()); + } const needsAnswer = []; const prefilledAnswers = {} as PortableTemplateParams; @@ -186,37 +181,3 @@ export function ownerPrompt(): DistinctQuestion { }, }; } - -export function customPrompt(prompt: PortableTemplatePrompt): DistinctQuestion { - if (RESERVED_PROMPT_NAMES.includes(prompt.id)) { - throw new Error( - `Prompt ID '${prompt.id}' is reserved and cannot be used in a template`, - ); - } - return { - type: 'input', - name: prompt.id, - message: prompt.prompt, - validate: (value: string) => { - if (!value) { - return `Please provide a value for ${prompt.id}`; - } else if (prompt.validate) { - let valid: boolean; - let message: string; - switch (prompt.validate) { - case 'backstage-id': - valid = /^[a-z0-9]+(-[a-z0-9]+)*$/.test(value); - message = - 'Value must be lowercase and contain only letters, digits, and dashes.'; - break; - default: - throw new Error( - `There is no built-in validator with the following id: ${prompt.validate}`, - ); - } - return valid || message; - } - return true; - }, - }; -} diff --git a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts index 1976e3b895..79c528460b 100644 --- a/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts +++ b/packages/cli/src/lib/new/preparation/loadPortableTemplate.ts @@ -36,16 +36,6 @@ const templateDefinitionSchema = z template: z.string(), targetPath: z.string(), role: z.enum(TEMPLATE_ROLES), - prompts: z - .array( - z.object({ - id: z.string(), - prompt: z.string(), - validate: z.string().optional(), - default: z.union([z.string(), z.boolean(), z.number()]).optional(), - }), - ) - .optional(), additionalActions: z.array(z.string()).optional(), templateValues: z.record(z.string()).optional(), }) diff --git a/packages/cli/src/lib/new/types.ts b/packages/cli/src/lib/new/types.ts index b55ae23d28..4521ff1867 100644 --- a/packages/cli/src/lib/new/types.ts +++ b/packages/cli/src/lib/new/types.ts @@ -69,7 +69,6 @@ export type PortableTemplate = { description?: string; targetPath: string; role: PortableTemplateRole; - prompts?: PortableTemplatePrompt[]; additionalActions?: string[]; files: PortableTemplateFile[]; templateValues: Record;