runme

CI Crates

A task runner using bash.

demo

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.

yaml - 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.

```sh

@cmd Build project

build() { echo Run build }

@cmd Run tests

test() { echo Run test }

eval $(runme --runme-eval "$0" "$@") ```

Run runme --runme-crate build test to quickly create a boilerplate Runmefile.sh.

Task accepts flags, options and positional arguments

```sh

@cmd A simple task

@flag -f --flag A flag

@option --opt A option

@arg arg A positional argument

cmd() { echo "flag: $argcflag" echo "opt: $argcopt" echo "arg: $argc_arg" } ```

``` $ runme cmd -h A simple task

USAGE: Runmefile.sh cmd [OPTIONS] [ARG]

ARGS: A positional argument

OPTIONS: -f, --flag A flag -h, --help Print help information --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.

```sh

@cmd

build() { echo '$@:' $@ echo '$1:' $1 echo '$2:' $2 echo '$#:' $# } ```

$ runme build foo bar $@: foo bar $1: foo $2: bar $#: 2

Task can have aliases

```sh

@cmd

@alias t,tst

test() { echo "Test..." } ```

$ runme t Test...

Task can have pre and post dependencies

Tasks can depend on other tasks. Dependencies are established by calling functions.

```sh

@cmd

bar() { foo; echo bar baz; }

@cmd

foo() { echo foo }

@cmd

baz() { echo baz } ```

$ runme bar foo bar baz

Task can be semantically grouped

Tasks can be grouped with _, -, @, ., :.

```sh

@cmd

test@unit() {}

@cmd

test@bin() {}

@cmd

app.build() {}

@cmd

app.test() {} ```

The default task

If the main function exists, calling runme without any subcommands will call the function, otherwise print a help message and exit.

```sh

@cmd

foo() { echo foo }

@cmd

bar() { echo baz } main() { foo bar } ```

$ 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:

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.