In-development PoC of a tiny, development and CI-friendly task-runner.
- tests!
- autocomplete task names
- allow multiple manifests (
oh.compile.js
=>oh compile.css
,oh.test.js
=>oh test.app
)
- small, simple API
- verbose by default
- fails visibly then kills the process on error, so that any errors cannot go unnoticed e.g. on a CI
- make really just wants to make things, and can be too restrictive e.g. it's hard to pass args or use modules from npm
- npm scripts can be too terse
- gulp/grunt et al are complex and often rely on 3rd party plugins
Install oh: npm i -g oh
or yarn global add oh
.
Then create a task manifest called oh.js
, for example this one:
// oh.js
module.exports = {
__before() {
this.log('this happens before the tasks start');
},
main() {
return this.run('logOpts').then(() => this.run('other'));
},
other() {
return this.run(['other2', 'ls']).then(() => this.log('ran others'));
},
other2() {
return new Promise(resolve => {
setTimeout(resolve, 2000);
});
},
ls() {
return this.exec('ls');
},
logOpts() {
this.log(this.args);
},
__after() {
this.log('this happens after the tasks end');
}
};
Now you can run oh main
, oh ls
etc.
You can also run multiple tasks e.g. oh other other2
. They will run in series.
Oh provides some options:
-h, --help output usage information [boolean]
-v, --version output the version number [boolean]
-q, --quiet only log error output from tasks [boolean]
--oh path to an oh.js manifest [string]
Any other arguments you provide are passed directly through to your tasks e.g.
> oh main --dev # this.args.dev === true
> oh logOpts --greeting 'hi there' # this.args.greeting === 'hi there'
Any function that you export from oh.js
becomes a task.
The following helpers are available:
Run other tasks defined in oh.js
. An array of task names will run in parallel.
Returns a promise that resolves once the task(s) completes.
Executes a string as a terminal command, using local binaries if they're available (like npm
scripts).
Returns a promise that resolves once the command completes.
An object representing any options in the command, except h
, help
, v
and version
.
Tell yourself something about whats going on.
Tell yourself something about what you've done or should do now.
Stop everything, with an explanation. As with all errors, this will kill the process to prevent errors going unnoticed.
Two optional setup/teardown-style tasks are available:
Do something before the tasks start e.g. check the version of node your running in, npm i
etc.
Do something after the tasks end e.g. clean up artefacts, restore previous state etc.
yarn install
yarn link
to add the local binary to your path (you needyarn@^0.19.0
forlink
to work)- only tried with Node 6 so far
oh.js
task manifest – this is the file you'd expect to see in a project rootindex.js
the application that runs the tasks inoh.js
bin
the scriptoh ...
runs on the command line