runme
A task runner using bash.

Install
With cargo
cargo install --force runme
Binaries on macOS, Linux, Windows
Download from Github Releases, unzip and add runme to your $PATH.
GitHub Actions
extractions/setup-crate can be used to install just in a GitHub Actions workflow.
- uses: extractions/setup-crate@v1
with:
owner: sigoden
name: runme
Why use runme?
runme provides a cross platform way to define and execute custom commands specific to a codebase.
The less work you have to do when performing repetitive tasks like building, testing, running, etc, the easier your job becomes. After you've configured it through a Runmefile.sh, a task runner can do most of that mundane work for you—and your team—with basically zero effort.
Linux, MacOS, and Windows are supported
runme binaries are available in linux, macos, and windows.
runme depends on bash. Linux/macos has built-in bash. If git is installed on windows, runme will automatically find and use git bash
GNU tools like ls, rm, grep, find, sed, awk... are also available, use them freely and confidently.
Task is just function
Adds a task by putting @cmd above a function.
# @cmd Build project
# @cmd Run tests
Run
runme --runme-crate build testto quickly create a boilerplate Runmefile.sh.
Task accepts flags, options and positional arguments
# @cmd A simple task
# @flag -f --flag A flag
# @option --opt A option
# @arg arg A positional argument
$ runme cmd -h
A simple task
USAGE:
Runmefile.sh cmd [OPTIONS] [ARG]
ARGS:
<ARG> A positional argument
OPTIONS:
-f, --flag A flag
-h, --help Print help information
--opt <OPT> A option
$ runme cmd -f --opt foo README.md
flag: 1
opt: foo
arg: README.md
@cmd, @flag, option, @arg are comment tags. see argc comment tags for more details.
Shell variables are also available.
# @cmd
$ runme build foo bar
$@: foo bar
$1: foo
$2: bar
$#: 2
Task can have aliases
# @cmd
# @alias t,tst
$ runme t
Test...
Task can have pre and post dependencies
Tasks can depend on other tasks. Dependencies are established by calling functions.
# @cmd
# @cmd
# @cmd
$ runme bar
foo
bar
baz
Task can be semantically grouped
Tasks can be grouped with _, -, @, ., :.
# @cmd
# @cmd
# @cmd
# @cmd
The default task
If the main function exists, calling runme without any subcommands will call the function, otherwise print a help message and exit.
# @cmd
# @cmd
$ runme
foo
bar
Informative tasks listings and beautiful help printings
See snippets above, runme prints a beautiful help message listing all tasks along with their descriptions and aliases.
You can also use runme <task> -h to print a help message containing the description of task flags, options and positional arguments.
Advanced Topics
CLI Usage
In order to distinguish with task script's flags and options, all runme cli options are prefixed with --runme
runme --help display task script's help information, runme --runme-help display runme cli's help information.
A task management & automation tool using bash - https://github.com/sigoden/runme
USAGE:
runme --runme-eval SCRIPT [ARGS...] Parse arguments `eval $(runme --runme-eval "$0" "$@")`
runme --runme-create [TASKS...] Create a boilerplate runmefile
runme --runme-file Print runmefile path
runme --runme-help Print help information
runme --runme-version Print version information
Completions
Shell completion scripts are available for bash/zsh/powershell.
Customize shell path
You can use environment variable RUNME_SHELL to customize shell path.
RUNME_SHELL="C:\\Program Files\\Git\\bin\\bash.exe"
Customize script name
By default, runme searches for runme script file of the following:
- Runmefile.sh
- runmefile.sh
- RUNMEFILE.sh
- Runmefile
- runmefile
- RUNMEFILE
You can use environment variable RUNME_SCRIPT to custom script name.
RUNME_SCRIPT=taskfile.sh
License
Copyright (c) 2022 runme-developers.
runme is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
See the LICENSE-APACHE and LICENSE-MIT files for license details.