UNPKG

baldrick-broth

Version:
81 lines (71 loc) 2.26 kB
import {type Command} from 'commander'; import {type BuildModelValidation, type TaskModel} from './build-model.js'; import {coloration} from './coloration.js'; import {createTaskAction} from './create-task-action.js'; import {version} from './version.js'; const createTaskDescription = (task: TaskModel): string => { const descriptions = [task.description ? task.description : task.title]; if (task.motivation !== undefined) { descriptions.push( '\n' + coloration.motivation(`Motivation: ${task.motivation}`) ); } return descriptions.join('\n'); }; export const createCommands = ( program: Command, buildModelValidation: BuildModelValidation ) => { program .name('baldrick-broth') .description('CLI for build automation and running tasks') .version(version); if (buildModelValidation.status === 'success') { const { value, value: {workflows}, } = buildModelValidation; for (const workflowKey in workflows) { const workflow = workflows[workflowKey]; if (workflow === undefined) { continue; } const workflowCmd = program.command(workflowKey); workflowCmd.summary(workflow.title); if (workflow.description !== undefined) { workflowCmd.description(workflow.description); } for (const taskId in workflow.tasks) { const task = workflow.tasks[taskId]; if (task === undefined) { continue; } const taskCommand = workflowCmd.command(taskId); taskCommand.summary(task.title); task.main.name = 'main'; if (task.before) { task.before.name = 'before'; } if (task.after) { task.after.name = 'after'; } taskCommand.description(createTaskDescription(task)); taskCommand.action( createTaskAction({ build: value, task: {...task, name: `${workflowKey}::${taskId}`}, }) ); if (task.parameters !== undefined) { for (const parameter of task.parameters) { taskCommand.option( parameter.flags, parameter.description, parameter.default ); } } } } } };