All Projects β†’ egoist β†’ Maid

egoist / Maid

Licence: mit
Markdown driven task runner.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Maid

Mask
🎭 A CLI task runner defined by a simple markdown file
Stars: ✭ 495 (-75.24%)
Mutual labels:  makefile, task, markdown
taskit
A Task Runner in Bash
Stars: ✭ 35 (-98.25%)
Mutual labels:  gulp, task, runner
Phulp
The task manager for php
Stars: ✭ 294 (-85.29%)
Mutual labels:  gulp, task
Letter Boilerplate
Finest letter typesetting from the command line
Stars: ✭ 374 (-81.29%)
Mutual labels:  makefile, markdown
Assemble
Community
Stars: ✭ 3,995 (+99.85%)
Mutual labels:  gulp, markdown
taskrunner
πŸ‘ a configurable task runner written in go
Stars: ✭ 28 (-98.6%)
Mutual labels:  task, runner
lets
CLI task runner for developers - a better alternative to make
Stars: ✭ 50 (-97.5%)
Mutual labels:  task, runner
Task
A task runner / simpler Make alternative written in Go
Stars: ✭ 4,282 (+114.21%)
Mutual labels:  makefile, task
Bake
Bake is a bash task runner
Stars: ✭ 27 (-98.65%)
Mutual labels:  task, runner
Remark Boilerplate
A boilerplate to create presentations using remark, Gulp, Stylus and more.
Stars: ✭ 41 (-97.95%)
Mutual labels:  gulp, markdown
Samples Rmarkdown Metropolis
RMarkdown with Metropolis/Mtheme for Beamer
Stars: ✭ 51 (-97.45%)
Mutual labels:  makefile, markdown
duty
A simple task runner.
Stars: ✭ 36 (-98.2%)
Mutual labels:  task, runner
Runner
Simple, lightweight task runner for Bash.
Stars: ✭ 133 (-93.35%)
Mutual labels:  task, runner
tasuku
βœ… γ‚Ώγ‚Ήγ‚― β€” The minimal task runner for Node.js
Stars: ✭ 1,488 (-25.56%)
Mutual labels:  task, runner
EasyJob
πŸ”¨ EasyJob - keep and execute your PowerShell and BAT scripts from one interface
Stars: ✭ 228 (-88.59%)
Mutual labels:  task, runner
nano-staged
Tiny tool to run commands for modified, staged, and committed files in a GIT repository.
Stars: ✭ 347 (-82.64%)
Mutual labels:  task, runner
Task Easy
A simple, customizable, and lightweight priority queue for promises.
Stars: ✭ 244 (-87.79%)
Mutual labels:  task, runner
Badges
πŸ“ Markdown code for lots of small badges πŸŽ€ πŸ“Œ (shields.io, forthebadge.com etc) 😎. Contributions are welcome! Please add yours!
Stars: ✭ 2,987 (+49.42%)
Mutual labels:  makefile, markdown
Wordpress Starter
πŸ“¦ A starter template for WordPress websites
Stars: ✭ 26 (-98.7%)
Mutual labels:  makefile, gulp
Flowa
πŸ”₯Service level control flow for Node.js
Stars: ✭ 66 (-96.7%)
Mutual labels:  task, runner

maid

NPM version NPM downloads CircleCI donate chat

Markdown driven task runner.

Table of Contents

Install

You can install Maid globally:

# For npm users
npm i -g maid
# For Yarn users
yarn global add maid

Or if you want to ensure that your teammates are using the same version as you, it's recommended to install Maid locally:

# For npm users
npm i -D maid
# For Yarn users
yarn add maid --dev

PRO TIP: you can use npx or yarn command to run any locally installed executable that is inside node_modules/.bin/, e.g. use yarn maid to run the locally installed maid command.

What is a maidfile?

A maidfile is where you define tasks, in Markdown!

πŸ“ maidfile.md:

## lint

It uses ESLint to ensure code quality.

```bash
eslint --fix
```

## build

Build our main app

<!-- Following line is a maid command for running task -->

Run task `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

You can use JavaScript to write to task script too!

```js
const webpack = require('webpack')

// Async task should return a Promise
module.exports = () =>
  new Promise((resolve, reject) => {
    const compiler = webpack(require('./webpack.config'))
    compiler.run((err, stats) => {
      if (err) return reject(err)
      console.log(stats.toString('minimal'))
      resolve()
    })
  })
```

Each task is defined using h2 header and its child contents, the value of h2 header will be used as task name, its following paragraphs (optional) will be used as task description, and following code block (optional) will be used as task script.

Currently the code block languages are sh bash js javascript and more!.

Now run maid help to display the help for this maidfile:

❯ maid help

  lint        It uses ESLint to ensure code quality.
  build       Build our main app
  build:demo  You can use JavaScript to write to task script too!

❯ maid help "build*"

  build       Build our main app
  build:demo  You can use JavaScript to write to task script too!

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...
[13:46:38] Starting 'build:demo'...
webpack compiled in 734ms.
[13:46:38] Finished 'build:demo' after 734 ms...

# to get minimal logs
❯ maid build --quiet
πŸŽ‰  Successfully compiled 3 files with Babel.
webpack compiled in 734ms.

Run tasks before/after a task

You can run tasks before or after a task:

## build

Run task `deploy` after this

```bash
webpack --config config/webpack.config.js
```

## deploy

```bash
gh-pages -d dist
```

Expressions that start with Run(s)? task(s)? are treated specially. In this case if you run maid build it will also run the deploy task after build has finished.

The syntax is simple: Runs? tasks? <taskNames> (before|after) this (in parallel)? where each task name is surrounded by a pair of backticks: `.

By default a task will run before the current task. So Run task `build` would run build before the task it was described in. The presence of after anywhere in the sentence (after Run task) will cause it to be ran after. Commands run synchronously by default. The presence of in parallel in the sentence will cause it to be run in parallel.

Examples:

  • Run task `build`.
  • Run task `build` after this.
  • Run tasks `clean`, `build`, and `lint`.
  • Run tasks `build:app` `start:server` before this.
  • Run tasks `build:server` `build:client` before this in parallel.

Task hooks

Like npm scripts, when you run a command called build, when it's finished 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.

Advanced

Code block languages

bash/sh

Read command line arguments

The CLI arguments are passed to executed script, so you can access it like this:

## log

```bash
echo $1
```

Then run maid log nice and it will print nice in the console.

js/javascript

The JS script will also be evaluated.

## log

```js
console.log(process.argv)
```
Asynchronous task

For asynchonous tasks, you can export a function which returns Promise:

## build

```js
module.exports = async () => {
  const files = await readFiles('./')
  await buildFiles(files)
}
```

py/python

## log

```py
print("cool")
```

Use a custom maidfile

By default, Maid would use maidfile.md, CONTRIBUTING.md or README.md (case-insensitive) in current working directory, when you're using README.md you need to manually specify the section of the markdown you wanna use as Maid tasks like below:

## My Project

## How to use

Let me explain..

## Development

<!-- maid-tasks -->

### test

```bash
# some test scripts...
```

Unlike a maidfile.md which uses all h2 headers as tasks, in README.md only h3 headers under the specified h2 header will be used as tasks. You can add a <!-- maid-tasks --> comment right below the desired h2 header.

Alternatively, if you're not using maidfile.md, you can also use --section h2_header and --path foo.md flags to customize it.

ZSH completion

Add FPATH like following to .zshrc:

export FPATH=$(npm root -g)/maid/completion/zsh:$FPATH

Development

Maid's own development scripts are powered by itself, run maid help or node bin/cli help in this project to get more.

lint

Run ESLint to ensure code quality and code style (via Prettier).

yarn eslint . "${@:1}"

If you want to automatically fix lint errors, try adding --fix plugin to the command you run, e.g. maid lint --fix

test

Use AVA to run unit tests.

yarn ava "${@:1}"

Similar to the lint task, you can append any flags for ava command directly when you run the maid command.

toc

Generate a table of contents section in the README.md file.

yarn doctoc README.md

Contributing

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

maid Β© egoist, Released under the MIT License.
Authored and maintained by egoist with help from contributors (list).

github.com/egoist Β· GitHub @egoist Β· Twitter @_egoistlily

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].