interface ApprovalPayload extends WorkflowPayload {
approved: boolean;
note: string;
}
const approvalNode = workflow.createUserInputNode<Plan, ApprovalPayload>({
name: "approval",
title: "Review deployment",
description: "Confirm whether the workflow should continue.",
params: [
{ name: "approved", flag: "--approved", type: "boolean" },
{ name: "note", flag: "--note", type: "string", control: "textarea" },
],
defaultValues: { approved: false },
format(payload) {
return {
errCode: 0,
errMessage: "",
approved: payload.values.approved === true,
note: typeof payload.values.note === "string" ? payload.values.note : "",
};
},
});
export const deployWorkflow = workflow.defineWorkflow<Input, OutputPayload>({
name: "deploy",
async run(input, context) {
const plan = await workflow.runNode(planNode, input, context);
const approval = await workflow.runNode(approvalNode, plan, context);
if (!approval.approved) {
return workflow.createOutputPayload({
items: [{ title: "Stopped", content: approval.note, contentType: "text" }],
});
}
return workflow.runNode(deployNode, plan, context);
},
});