Build, run, manage & maintain your projects with ease.
brmm
is a build tool designed to slot in on top of your package.json
scripts, or your Makefile
, or whatever other commands you might have, to help manage projects with multi step build processes.
brmm
is currently built with JavaScript, but can be used in any software development project where you need to run commands to develop, build, test, and deploy your project.
brmm
is a command line tool, and you can download the binary here (coming soon).
Alternatively, you can also download brmm
as an npm
package, and use it as a devDependency
in your project (if you're JavaScript inclined).
npm install --save-dev brmm
brmm
requires a config file to run. brmm
will look for config files in your working directory in the following order:
brmm.config.yml
brmm.config.yaml
brmm.config.js
brmm.config.json
# brmm.config.yml
tasks:
# brmm dev
dev:
pre: "echo 'I run before the command'" # I will run first
command: "npm run dev" # I will run when `pre` finishes
post: # I will run when `command` finishes (or is terminated)
- "echo 'post 1'" # multiple commands in series
- "echo 'post 2'"
# Mutiple commands in parallel
- { parallel: ["node server.js", "node server.js -p 8100"] }
# brmm build
build: "npm run build"
# brmm pre-push
pre-push: ["npm run lint", "npm run test", "npm run build"] # each command runs in series
# brmm test
test:
command: ["npm run test:foo", "npm run test:bar"]
# brmm parallel
parallel: { parallel: ["node server.js", "node server.js -p 8100"] }
# brmm series
series: ["echo 'series 1'", "echo 'series 2'"]
# brmm output
# you can use shell commands as long as your env supports them
output:
["OUTPUT=$(node ./long-running-process.js | grep foo) && echo $OUTPUT"]
# brmm composed
# You can reference other tasks
composed: ["echo 'composed 1'", "echo 'composed 2'", "composed_3"]
# brmm composed_3
composed_3: "echo 'composed 3'"
That's it, you're ready to go! Run your tasks with brmm <task>
.
# Start your dev task
brmm dev
# Build your project
brmm build
## You can pass arguments to your tasks too
brmm dev --port 8080
Alternatively you can specify a custom config file path with the --config
flag.
brmm --config ./path/to/brmm.config.yml
# or with short flag
brmm -c ./path/to/brmm.config.yml
Tasks are defined in your brmm.config
file as an object under the top level tasks
key. The key is the name of the task, and the value is the command to run.
The value is incredibly flexible and can be a string (single command), and array (multiple commands in series), or a special object syntax to handle pre and post command instructions, or running commands in parallel.
tasks:
# brmm dev
dev: "npm run dev"
Tasks specified in an array will run sequentially, with each task waiting for the previous task to complete.
tasks:
# brmm dev
dev: ["npm run dev", "npm run dev:watch"]
tasks:
# brmm dev
dev:
pre: "echo 'I run before the command'"
command: "npm run dev"
post: "echo 'I run after the command'"
Note: each command in command
, pre
& post
can also be a string, array or object!
tasks:
# brmm dev
dev:
parallel:
- "npm run dev:styles"
- "npm run dev:watch"
brmm
allows you to compose tasks as well. This is useful if you have a task that is a combination of other tasks.
tasks:
# brmm build
build: "npm run build"
# brmm watch
watch: "npm run watch"
# brmm dev
dev: ["build", "watch"]
To keep things simple, you can simply use a task's name to reference it in another task (see example above). However this can be an issue if you happen to have a task with the same name as a command you want to run. In this case you can also explicitly call another task by prefixing it with task:
.
tasks:
# brmm build
build: "npm run build"
# brmm watch
watch: "npm run watch"
# brmm dev
dev: ["task:build", "task:watch"]