A task runner using bash.
cargo install --force runme
Download from Github Releases, unzip and add runme to your $PATH.
extractions/setup-crate can be used to install just in a GitHub Actions workflow.
yaml
- uses: extractions/setup-crate@v1
with:
owner: sigoden
name: 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.
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.
Adds a task by putting @cmd
above a function.
```sh
build() { echo Run build }
test() { echo Run test }
eval $(runme --runme-eval "$0" "$@") ```
Run
runme --runme-crate build test
to quickly create a boilerplate Runmefile.sh.
```sh
cmd() { echo "flag: $argcflag" echo "opt: $argcopt" echo "arg: $argc_arg" } ```
``` $ runme cmd -h A simple task
USAGE: Runmefile.sh cmd [OPTIONS] [ARG]
ARGS:
OPTIONS:
-f, --flag A flag
-h, --help Print help information
--opt
$ 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.
```sh
build() { echo '$@:' $@ echo '$1:' $1 echo '$2:' $2 echo '$#:' $# } ```
$ runme build foo bar
$@: foo bar
$1: foo
$2: bar
$#: 2
```sh
test() { echo "Test..." } ```
$ runme t
Test...
Tasks can depend on other tasks. Dependencies are established by calling functions.
```sh
bar() { foo; echo bar baz; }
foo() { echo foo }
baz() { echo baz } ```
$ runme bar
foo
bar
baz
Tasks can be grouped with _
, -
, @
, .
, :
.
```sh
test@unit() {}
test@bin() {}
app.build() {}
app.test() {} ```
If the main
function exists, calling runme
without any subcommands will call the function, otherwise print a help message and exit.
```sh
foo() { echo foo }
bar() { echo baz } main() { foo bar } ```
$ runme
foo
bar
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.
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
```
Shell completion scripts are available for bash/zsh/powershell.
You can use environment variable RUNME_SHELL
to customize shell path.
RUNME_SHELL="C:\\Program Files\\Git\\bin\\bash.exe"
By default, runme searches for runme script file of the following:
You can use environment variable RUNME_SCRIPT
to custom script name.
RUNME_SCRIPT=taskfile.sh
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.