From 661c787b150d6b7882f593e1b95c7b1f870da4f6 Mon Sep 17 00:00:00 2001 From: Matt Benson Date: Mon, 6 Nov 2023 19:15:59 -0600 Subject: [PATCH] refactor: const + infer type for workflow runner iterations Signed-off-by: Matt Benson --- .../tasks/NunjucksWorkflowRunner.ts | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 9d0ab0ad06..4f0d6f7091 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -276,31 +276,29 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { return; } } - - const iterations = new Array(); - if (step.each) { - const each = await this.render(step.each, context, renderTemplate); - iterations.push( - ...Object.keys(each).map((key: any) => { - return { each: { key, value: each[key] } }; - }), - ); - } else { - iterations.push({}); - } - for (const iteration of iterations) { + const iterations = ( + step.each + ? Object.entries(this.render(step.each, context, renderTemplate)).map( + ([key, value]) => ({ + each: { key, value }, + }), + ) + : [{}] + ).map(i => ({ + ...i, // Secrets are only passed when templating the input to actions for security reasons - iteration.input = - (step.input && - this.render( + input: step.input + ? this.render( step.input, - { ...context, ...iteration, secrets: task.secrets ?? {} }, + { ...context, ...i, ...task }, renderTemplate, - )) ?? - {}; + ) + : {}, + })); + for (const iteration of iterations) { let actionId = action.id; - if (Object.hasOwn(iteration, 'each')) { - actionId += `[${(iteration.each as JsonObject).key}]`; + if (iteration.each) { + actionId += `[${iteration.each.key}]`; } if (action.schema?.input) { const validateResult = validateJsonSchema( @@ -343,7 +341,7 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { ); } await action.handler({ - input: iteration.input as JsonObject, + input: iteration.input, secrets: task.secrets ?? {}, logger: taskLogger, logStream: streamLogger,