Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/coderaiser/madrun

🏎 CLI tool to run multiple npm-scripts in a madly comfortable way
https://github.com/coderaiser/madrun

cli javascript nodejs npm npm-scripts redrun run

Last synced: 3 months ago
JSON representation

🏎 CLI tool to run multiple npm-scripts in a madly comfortable way

Awesome Lists containing this project

README

        

# 🏎 Madrun [![License][LicenseIMGURL]][LicenseURL] [![NPM version][NPMIMGURL]][NPMURL] [![Build Status][BuildStatusIMGURL]][BuildStatusURL] [![Coverage Status][CoverageIMGURL]][CoverageURL]

![image](https://user-images.githubusercontent.com/1573141/223524904-4175548f-1e30-4745-bf2e-c2f4ea39fef5.png)

[NPMURL]: https://npmjs.org/package/madrun "npm"
[NPMIMGURL]: https://img.shields.io/npm/v/madrun.svg?style=flat
[BuildStatusURL]: https://github.com/coderaiser/madrun/actions?query=workflow%3A%22Node+CI%22 "Build Status"
[BuildStatusIMGURL]: https://github.com/coderaiser/madrun/workflows/Node%20CI/badge.svg
[LicenseURL]: https://tldrlegal.com/license/mit-license "MIT License"
[LicenseIMGURL]: https://img.shields.io/badge/license-MIT-317BF9.svg?style=flat
[CoverageURL]: https://coveralls.io/github/coderaiser/madrun?branch=master
[CoverageIMGURL]: https://coveralls.io/repos/coderaiser/madrun/badge.svg?branch=master&service=github

CLI tool to run multiple npm-scripts in a madly comfortable way. Can be used together with [redrun](https://github.com/coderaiser/redrun).

## Install

```
npm i madrun -g
```

# Usage

First thing you should do is:

- ✅ create `.madrun.js` file with all scripts written in **JavaScript**;
- ✅ update `package.json` scripts to use **madrun**;

This can be done using:

```sh
madrun --init
```

When you create new script, you can run it with: `madrun lint test`.
Run `madrun --init` again, to update `package.json`, so you can use:

```sh
npm run lint
npm test
```

Then you can run `madrun` without args to see list of a scripts. Or run:

```
madrun
```

To run specified script.

# Completion

You can enable tab-completion of npm scripts similar to [npm's completion](https://docs.npmjs.com/cli/completion) using:

```sh
madrun-completion >> ~/.bashrc
madrun-completion >> ~/.zshrc
```

You may also pipe the output of madrun-completion to a file such as `/usr/local/etc/bash_completion.d/madrun` if you have a system that will read that file for you.

## Options

`Madrun` can be configured using `env variables`.

### MADRUN_PWD

`MADRUN_PWD` will output current directory path:

```sh
MADRUN_PWD=1 madrun lint
> putout lib test .madrun.js (/home/coderaiser/cloudcmd)
```

### MADRUN_NAME

`MADRUN_NAME` will output name of current directory:

```sh
MADRUN_NAME=1 madrun lint
> putout lib test .madrun.js (cloudcmd)
```

## API

`madrun` supports next `API` set:

### run(name, [opt, env])

Run script by a name or regexp.

- `name` - name of a script
- `opt` - options to run with
- `env` - object with `env` variables
- `scripts` - all scripts set (need for embedding only)

### series(names, [opt, env, scripts])

Run scripts by a name or regexp one-by-one.

- `name` - array of names of scrips
- `opt` - options to run with
- `env` - object with `env` variables
- `scripts` - all scripts set (need for embedding only)

### parallel (names, [opt, env, scripts])

Run scripts by a name or regexp parallel.

- `name` - array of names of scrips
- `opt` - options to run with
- `env` - object with `env` variables
- `scripts` - all scripts set (need for embedding only)

### cutEnv(name, [opt, env])

Same as `run`, but returns result without `env`.

- `name` - name of a script
- `opt` - options to run with
- `env` - object with `env` variables
- `scripts` - all scripts set (need for embedding only)

## Example

Let's install `madrun` and save it as `devDependency` with:

```sh
npm i madrun -D
```

Let's create file `.madrun.js`:

```js
import {run, cutEnv} from 'madrun';

const env = {
CI: 1,
};

export default {
'lint': () => 'putout .',
'fix:lint': async () => await run('lint', '--fix', {
NODE_ENV: 'development',
}),
'lint:env': () => ['putout .', {
CI: 1,
}],
'env:lint': () => [env, 'putout .'],
'lint:no-env': async () => await cutEnv('lint:env'),
};
```

Now you can call any of listed scripts with help of 🏎 **Madrun**:

```sh
madrun lint
> putout .
```

For **series run** you can use:

```sh
madrun lint:*
> CI=1 putout . && putout .
```

## Related

- [redrun](https://github.com/coderaiser/redrun) - CLI tool to run multiple npm-scripts fast.

## License

MIT