baldrick-broth
Version:
Build automation tool and task runner
56 lines (55 loc) • 2.29 kB
JavaScript
import { coloration } from './coloration.js';
import { createTaskAction } from './create-task-action.js';
import { version } from './version.js';
const createTaskDescription = (task) => {
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, 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);
}
}
}
}
}
};