diff --git a/packages/catalog-model/src/kinds/TemplateEntityV1beta2.test.ts b/packages/catalog-model/src/kinds/TemplateEntityV1beta2.test.ts index ee064360c4..60f3de9e59 100644 --- a/packages/catalog-model/src/kinds/TemplateEntityV1beta2.test.ts +++ b/packages/catalog-model/src/kinds/TemplateEntityV1beta2.test.ts @@ -106,4 +106,19 @@ describe('templateEntityV1beta2Validator', () => { delete (entity as any).spec.steps; await expect(validator.check(entity)).rejects.toThrow(/steps/); }); + + it('accepts step with missing id', async () => { + delete (entity as any).spec.steps[0].id; + await expect(validator.check(entity)).resolves.toBe(true); + }); + + it('accepts step with missing name', async () => { + delete (entity as any).spec.steps[0].name; + await expect(validator.check(entity)).resolves.toBe(true); + }); + + it('rejects step with missing action', async () => { + delete (entity as any).spec.steps[0].action; + await expect(validator.check(entity)).rejects.toThrow(/action/); + }); }); diff --git a/packages/catalog-model/src/kinds/TemplateEntityV1beta2.ts b/packages/catalog-model/src/kinds/TemplateEntityV1beta2.ts index 3de280b632..c78e7f85d5 100644 --- a/packages/catalog-model/src/kinds/TemplateEntityV1beta2.ts +++ b/packages/catalog-model/src/kinds/TemplateEntityV1beta2.ts @@ -35,8 +35,8 @@ export interface TemplateEntityV1beta2 extends Entity { type: string; parameters?: JsonObject | JsonObject[]; steps: Array<{ - id: string; - name: string; + id?: string; + name?: string; action: string; parameters?: JsonObject; }>; diff --git a/packages/catalog-model/src/schema/kinds/Template.v1beta2.schema.json b/packages/catalog-model/src/schema/kinds/Template.v1beta2.schema.json index 1209136338..bd9999f8bd 100644 --- a/packages/catalog-model/src/schema/kinds/Template.v1beta2.schema.json +++ b/packages/catalog-model/src/schema/kinds/Template.v1beta2.schema.json @@ -111,7 +111,7 @@ "items": { "type": "object", "description": "A description of the step to execute.", - "required": ["id", "name", "action"], + "required": ["action"], "properties": { "id": { "type": "string", diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 9d6f40bef0..65b9039e27 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -360,7 +360,11 @@ export async function createRouter( taskSpec = { values, - steps: template.spec.steps, + steps: template.spec.steps.map((step, index) => ({ + ...step, + id: step.id ?? `step-${index + 1}`, + name: step.name ?? step.action, + })), output: template.spec.output ?? {}, }; } else {