Markdown driven task runner.
npm i -g maid
A maidfile is where you define tasks, in Markdown!
๐ maidfile.md:
## lint
> Run ESLint to ensure code quality
```bash
eslint --fix
```
## build
> Build our main app
> Run `build:demo` after this
```bash
# note that you can directly call binaries inside node_modules/.bin
# just like how `npm scripts` works
babel src -d lib
```
## build:demo
> Run a custom build script which is written in JS for the demo!
```js
const webpack = require('webpack')
const compiler = webpack(require('./webpack.config'))
compiler.run((err, stats) => {
console.log(err || stats.toString('minimal'))
})
```
Each task is defined as a heading 2
section, the value of heading 2 will be used as task name, the following blockquote (optional) will be used as task description, the following code block (required) will be used as task script.
Currently the code block language can be sh
bash
js
javascript
.
Now run maid help
to display the help for this maidfile:
โฏ maid help
lint Run ESLint to ensure code quality
build Build our main app
build:demo Run a custom build script which is written in JS for the demo!
โฏ maid help "build*"
build Build our main app
build:demo Run a custom build script which is written in JS for the demo!
To run a task, you can directly run maid <task_name>
โฏ maid build
[13:46:38] Starting 'build'...
๐ Successfully compiled 3 files with Babel.
[13:46:38] Finished 'build' after 363 ms...
# to get minimal logs
โฏ maid build --quiet
๐ Successfully compiled 3 files with Babel.
You can even run tasks before or after a task:
## build
> Run `deploy` after this
```bash
webpack --config config/webpack.config.js
```
## deploy
```bash
gh-pages -d dist
```
Basically blockquotes like Run `deploy` after this
is treated specicially, in this case it says run the task deploy
after this task is finished.
The syntax is simple: Run <taskNames> (before|after) this (in parallel?)
where each task name is surrounded by a pair of backticks: `
.
Like npm scripts, when you run a command called build
, when it's finised we will also run postbuild
task.
Hook syntax:
pre<taskName>
: Run before a specific task.post<taskName>
: Run after a specific task.afterAll
: Run after all tasks.beforeAll
: Run before all tasks.
For task script that is written in JavaScript, you can export a function which returns Promise:
## build
```js
module.exports = async () => {
const files = await readFiles('./')
await buildFiles(files)
}
```
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
maid ยฉ egoist, Released under the MIT License.
Authored and maintained by egoist with help from contributors (list).
github.com/egoist ยท GitHub @egoist ยท Twitter @_egoistlily