2017-03-01 20:07:21 -03:00
[![Join the chat at https://gitter.im/go-task/task ](https://badges.gitter.im/go-task/task.svg )](https://gitter.im/go-task/task?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
2017-02-28 09:14:11 -03:00
# 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][make].
## Installation
If you have a Go environment setup, you can simply run:
```bash
go get -u -v github.com/go-task/task/cmd/task
```
2017-02-28 09:37:07 -03:00
Or you can download from the [releases][releases] page and add to your `PATH` .
2017-02-28 09:14:11 -03:00
## Usage
2017-02-28 18:57:56 -03:00
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:
2017-02-28 09:14:11 -03:00
```yml
build:
cmds:
- go build -v -i main.go
assets:
cmds:
- gulp
```
Running the tasks is as simple as running:
```bash
task assets build
```
If Bash is available (Linux and Windows while on Git Bash), the commands will
2017-02-28 18:57:56 -03:00
run in Bash, otherwise will fallback to `cmd` (on Windows).
2017-02-28 09:14:11 -03:00
2017-03-01 19:54:21 -03:00
### Running task in another dir
By default, tasks will be executed in the directory where the Taskfile is
located. But you can easily make the task run in another folder informing
`dir` :
```yml
js:
dir: www/public/js
cmds:
- gulp
```
2017-02-28 09:14:11 -03:00
### Task dependencies
2017-02-28 18:57:56 -03:00
You may have tasks that depends on others. Just pointing them on `deps` will
run them automatically:
2017-02-28 09:14:11 -03:00
```yml
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:
```yml
assets:
deps: [js, css]
js:
cmds:
- npm run buildjs
css:
cmds:
- npm run buildcss
```
### 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.
```yml
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` .
[make]: https://www.gnu.org/software/make/
2017-02-28 09:37:07 -03:00
[releases]: https://github.com/go-task/task/releases