A cli task runner.
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
First, define a simple Runmefile.sh
in your project.
```sh
set -e
build() { echo Run build }
test() { echo Run test }
eval $(runme --runme-eval "$0" "$@") ```
Then, try running one of your commands!
runme build
runme test
You can also run runme --runme-create build test
to quickly create boilerplate Runmefile.sh.
Runme uses
argc
to parse Runmefile.
@cmd
,@alias
are comment tags.
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, linting, 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
binary is available in linux, macos, and windows.
runme
depends on bash. Linux/macos has built-in bash. In windows, git is frequently used, runme automatically locates and uses bash that comes with git.
Environments that support bash usually also support GNU tools, so you can use ls
, rm
, grep
, sed
, awk
... in Runmefile freely and confidently.
To define a new task foo
, simply create the foo
function and add the @cmd
comment tag above it.
```sh
task1() { echo Run task1 } ```
```sh
task2() { 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=v1 v2 flag: 1 opt: v1 arg: v2 ```
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() {} ```
When runme
is invoked without a task name, it runs the main
function.
If the main
function does not exist, runme will print help information.
```sh main() { foo bar }
foo() { echo foo }
bar() { echo baz } ```
$ runme
foo
bar
runme --help
or runme --h
will print a help text listing all tasks along with their descriptions and aliases.
runme <task> --help
or runme <task> -h
will print a help text containing the description of task's flags, options and positional arguments.
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.