taskkit
Version:
57 lines (55 loc) • 1.5 kB
JavaScript
const path = require('path');
const runshell = require('runshell');
const Logr = require('logr');
const log = Logr.createLogger({
reporters: {
cliFancy: {
reporter: require('logr-cli-fancy')
},
bell: {
reporter: require('logr-reporter-bell')
}
}
});
module.exports = function(name, task, runner) {
return async function() {
log([name], `Running ${name}...`);
const start = new Date().getTime();
try {
const { results } = await runshell(`${path.join(__dirname)}/runner.js`, {
env: {
TASKKIT_NAME: name,
TASKKIT_TASK: task,
FORCE_COLOR: 1
},
onMessage(msg) {
if (msg.type === 'run') {
runner.run(msg.task, (e) => {
log([msg.task], 'error', e);
});
}
},
logger(tags, msg) {
if (typeof tags === 'string') {
msg = tags;
tags = [];
}
msg = msg.replace(/\n$/, '');
//TODO: remove when all tasks are on latest taskkit-task
if (msg.indexOf('::') !== -1) {
console.log(msg); //eslint-disable-line no-console
} else {
log([name, ...tags], msg);
}
}
});
const end = new Date().getTime();
const duration = (end - start) / 1000;
log([name], `Finished in ${duration} seconds`);
return results;
} catch (err) {
log([name, 'error'], err);
throw err;
}
};
};