scaffolder-backend: add support for deep templating in task steps

Co-authored-by: Johan Haals <johan.haals@gmail.com>
This commit is contained in:
Patrik Oldsberg
2021-02-19 11:45:04 +01:00
parent fe2a804742
commit cf792300a7
@@ -94,22 +94,20 @@ export class TaskWorker {
throw new Error(`Action '${step.action}' does not exist`);
}
const parameters: { [name: string]: JsonValue } = {};
for (const [name, maybeTemplateStr] of Object.entries(
step.parameters ?? {},
)) {
if (typeof maybeTemplateStr === 'string') {
const value = handlebars.compile(maybeTemplateStr, {
noEscape: true,
strict: true,
data: false,
preventIndent: true,
})(templateCtx);
parameters[name] = value;
} else {
parameters[name] = maybeTemplateStr;
}
}
const parameters = JSON.parse(
JSON.stringify(step.parameters),
(_key, value) => {
if (typeof value === 'string') {
return handlebars.compile(value, {
noEscape: true,
strict: true,
data: false,
preventIndent: true,
})(templateCtx);
}
return value;
},
);
const stepOutputs: { [name: string]: JsonValue } = {};
@@ -138,16 +136,19 @@ export class TaskWorker {
}
}
const output = Object.fromEntries(
Object.entries(task.spec.output).map(([name, templateStr]) => {
const value = handlebars.compile(templateStr, {
noEscape: true,
strict: true,
data: false,
preventIndent: true,
})(templateCtx);
return [name, value];
}),
const output = JSON.parse(
JSON.stringify(task.spec.output),
(_key, value) => {
if (typeof value === 'string') {
return handlebars.compile(value, {
noEscape: true,
strict: true,
data: false,
preventIndent: true,
})(templateCtx);
}
return value;
},
);
await task.complete('completed', { output });