Skip to content

coderaiser/madrun

Folders and files

NameName
Last commit message
Last commit date

Latest commit

3a6a06f Β· Jan 19, 2024
Nov 9, 2023
Dec 9, 2023
Sep 14, 2023
Jul 6, 2023
Jul 20, 2022
Nov 10, 2021
May 1, 2023
Feb 12, 2021
Jun 17, 2022
Jul 6, 2023
Oct 30, 2023
Nov 26, 2020
May 27, 2022
Jan 19, 2024
Jan 25, 2019
Jul 6, 2023
Feb 12, 2021
Jan 19, 2024
Jul 6, 2023

Repository files navigation

🏎 Madrun License NPM version Build Status Coverage Status

image

CLI tool to run multiple npm-scripts in a madly comfortable way. Can be used together with 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:

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:

npm run lint
npm test

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

madrun <script>

To run specified script.

Completion

You can enable tab-completion of npm scripts similar to npm's completion using:

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:

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

MADRUN_NAME

MADRUN_NAME will output name of current directory:

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:

npm i madrun -D

Let's create file .madrun.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:

madrun lint
> putout .

For series run you can use:

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

Related

  • redrun - CLI tool to run multiple npm-scripts fast.

License

MIT