cmd/task | ||
example | ||
vendor | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
file.go | ||
goreleaser.yml | ||
LICENSE | ||
README.md | ||
task.go | ||
Taskfile.yml |
Task - Simple "Make" alternative
Task is a simple tool that allows you to easily run development and build tasks. Task is written in Go, but can be used to develop any language. It aims to be simpler and easier to use then GNU Make.
Installation
If you have a Go environment setup, you can simply run:
go get -u -v github.com/go-task/task/cmd/task
Or you can download from the releases page and add to your PATH
.
Usage
Create a file called Taskfile.yml
in the root of the project.
(Taskfile.toml
and Taskfile.json
are also supported, but YAML is used in
the documentation). The cmds
key should contains the commands of a task:
build:
cmds:
- go build -v -i main.go
assets:
cmds:
- gulp
Running the tasks is as simple as running:
task assets build
If Bash is available (Linux and Windows while on Git Bash), the commands will
run in Bash, otherwise will fallback to cmd
(on Windows).
Task dependencies
You may have tasks that depends on others. Just pointing them on deps
will
run them automatically:
build:
deps: [assets]
cmds:
- go build -v -i main.go
assets:
cmds:
- gulp
In the above example, assets
will always run right before build
if you run
task build
.
A task can have only dependencies and no commands to group tasks together:
assets:
deps: [js, css]
js:
cmds:
- npm run buildjs
css:
cmds:
- npm run buildcss
Each task can only be run once. If it is included from another dependend task causing a cyclomatic dependency, execution will be stopped.
task1:
deps: [task2]
task2:
deps: [task1]
Will stop at the moment the dependencies of task2
are executed.
Prevent task from running when not necessary
If a task generates something, you can inform Task the source and generated files, to Task will prevent to run them if not necessary.
build:
deps: [js, css]
cmds:
- go build -v -i main.go
js:
cmds:
- npm run buildjs
sources:
- js/src/**/*.js
generates:
- public/bundle.js
css:
cmds:
- npm run buildcss
sources:
- css/src/*.css
generates:
- public/bundle.css
sources
and generates
should be file patterns. When both are given, Task
will compare the modification date/time of the files to determine if it's
necessary to run the task. If not, it will just print
Task "js" is up to date
.