Skip to content

zakuro9715/z

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Z

Go codecov Go Report Card License: GPL v3

Z is a simple and useful task runner.

Overview

Philosophy

  • Simple
  • Easy
  • Intuitive
  • Useful

Features

  • Nested tasks
  • Default task
  • Alias
  • Shorthand
  • And more...

Installation

Via gobinaries

curl -sSL gobinaries.com/zakuro9715/z | sh

By go install

go install github.com/zakuro9715/z

Compare with other tools

Z is strongly inspired by Robo

Good

  • Easy to use
  • Simple configuration
  • Easy to install

Bad

  • No nested tasks
  • Not enough features
  • No default task

Make

Good

  • Easy to use
  • Run anyware

Cons

  • Make is not task runner
  • Makefile is difficult
  • No nested tasks

npm script

Pros

  • Easy to use
  • Simple configuration
  • No extra tool is required in nodejs project.

Cons

  • Not suitable for other than nodejs project
  • No nested tasks
  • script must be one-liner

Task (go-task/task)

Pros

  • Many features
  • Good documentation

Cons

  • No nested tasks
  • Too many features

Usage

z tasks... args...

Config

Run

Run with specified shell (default: sh)

tasks:
    hello:
        run:
            - echo hello1
            - echo hello2
$ z hello

# It runs
sh -c "echo hello1"
sh -c "echo hello2"

run can be omitted

tasks:
  hello: echo hello

Shorthand

tasks:
    hello.world: echo hello world
$ z hello world
hello world
$ z hello.world
hello world

Args or flags

You can specify args and flags. They are passed to each commands

$ z hello world

# It runs
sh -c "echo hello1 world"
sh -c "echo hello2 world"

Default task

You can use default task

default: hello.world
tasks:
    hello:
        tasks:
            world: echo hello world
$ z
hello world

Task Alias

tasks:
    hello.world: echo hello world
    helloworld:
        z: hello.world
$z helloworld
hello world

Env

env:
    - KEY=VALUE
tasks:
    echo: echo $KEY
$ z echo
VALUE

Variable

var:
    seq: seq 3
tasks:
    count: {{seq}} | cat  # seq 10
$ z count
1
2
3

PATH

You can specify additional PATH

tasks:
    hello:
        path: ./bin
        run: command-in-bin-dir

Use cases

Examples

See also Examples Test

tasks:
  compile:
    run:
      - clang $@
    desc: Compile
    hooks:
      pre: echo Compiling
      post: echo Compiled
    tasks:
      main:
        run:
          - z -c examples/cc.yaml compile main.c
shell: bash                        # Shell to run commands
default: hello.world               # Default task. hello.world -> z hello world
env:
  MESSAGE: message                 # It used if environment variable does not exist.
var:
  value: value
tasks:                             # Task list
  hello:                           # Task name
    desc: Say hello                # Task description
    run:                           # Commands to run
      - echo hello                 # `bash -c "echo hello {args}`
      - echo bye                   # `bash -c "echo bye {args}"`
    args:
      required: true               # Required one more arguments
      default: you                 # Default argument
    hooks:                         # hooks
      pre: echo saying hello       # pre hook
      post: echo said hello        # post hook
    tasks:                         # Sub task list
      script:
        run: examples/hello.sh     # Run script
      script.with_path:
        path: examples             # Add path
        run: hello.sh
      python:
        shell: python
        run: print('hello python')

  hello.world:                     # Sub task shorthand (Task will be 'z hello world')
    run:
      - z hello -- world           # Args are passed all commands
                                   # so it runs 'bash -c "echo hello world"' and 'bash -c "echo bye world"
                                   # after -- is args (not subtask name)
  echo: echo                       # Shorthand command ('run' can be omitted').
  echo.twice:                      # Multi commands can be used
    - echo
    - echo
  echo.env.message: echo $MESSAGE  # use env
  echo.env.message2:
    env: MESSAGE=message2          # task local default env
    run: echo $MESSAGE
  echo.var.value: echo {{value}}   # use var
  helloworld: { z: hello.world }   # Alias to other task
default: npm.script
tasks:
  npm.script: npm run