scaffolder-backend: add support for deep templating in task steps
Co-authored-by: Johan Haals <johan.haals@gmail.com>
This commit is contained in:
@@ -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 });
|
||||
|
||||
Reference in New Issue
Block a user