Task (go-task) - Cheatsheet de Task Runner Moderno
Task (a.k.a. go-task) é um task runner e build tool que visa ser uma alternativa mais simples a Make. Você define tasks em um Taskfile.yml — com dependências, variáveis, includes e up-to-date checks — e rode-os com task <name>. É escrito em Go e é entregue como um single binary livre de dependências, com comportamento multiplataforma e file watching built-in. É uma escolha forte quando seu time prefere YAML a sintaxe Make.
Instalação
| Platform | Command |
|---|
| Script | sh -c "$(curl -sSL https://taskfile.dev/install.sh)" |
| macOS/Linux (Homebrew) | brew install go-task |
| Arch Linux | sudo pacman -S go-task |
| Go install | go install github.com/go-task/task/v3/cmd/task@latest |
| Windows (Scoop) | scoop install task |
| Verificar | task --version |
Um Taskfile Básico
# Taskfile.yml
version: '3'
vars:
BINARY: myapp
tasks:
build:
desc: Build the binary
cmds:
- go build -o {{.BINARY}} ./cmd/app
test:
desc: Run tests
cmds:
- go test ./...
ci:
desc: Lint, test, build
deps: [test]
cmds:
- task: build
Executando Tasks
| Command | Descrição |
|---|
task | Execute a task default |
task build | Execute uma task nomeada |
task test build | Execute várias tasks em ordem |
task --list (-l) | Liste tasks com descrições |
task --list-all | Liste todas as tasks (incl. sem-desc) |
task --summary build | Mostre detalhe de uma task |
task VAR=value build | Passe uma variável |
task -- arg1 arg2 | Encaminhe CLI args para a task ({{.CLI_ARGS}}) |
Dependências & Ordenação
| Key | Comportamento |
|---|
deps: [a, b] | Execute a e b (em paralelo) antes dessa task |
cmds: [{task: x}] | Chame outra task como step (sequencial) |
deps paralelism | Dependências rodam concorrentemente por padrão |
--parallel | Execute tasks dadas em paralelo |
Verificações Up-to-Date (Pule Trabalho Desnecessário)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| Key | Efeito |
|---|
sources | Inputs para fingerprint |
generates | Expected outputs |
| `method: checksum | timestamp |
status: [ ... ] | Verificações shell customizadas para up-to-date |
Se sources estão inalterados, Task pula o comando.
Variáveis & Templating
| Feature | Example |
|---|
| Task/global vars | vars: { NAME: value } |
| Env vars | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: ['.env'] |
| Templating | {{.NAME}}, {{.CLI_ARGS}}, funcs Go template |
| Dynamic vars | sh: para computar uma var de um comando |
Includes & Watching
| Feature | Como |
|---|
| Includes | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| Namespacing | Tasks inclusos são chamados namespace:task |
| Watch mode | task --watch build (rerun em mudanças de source) |
-w | Forma curta de --watch |
Fluxos de Trabalho Comuns
# Descubra o que um projeto pode fazer
task --list
# Execute CI localmente exatamente como o pipeline faz
task ci
# Iterar: reconstrua em toda mudança de source
task --watch build
# Passe argumentos através
task test -- -run TestLogin
Task vs Make vs just
| Aspecto | Task | Make | just |
|---|
| Sintaxe | YAML | Makefile | just recipes |
| Linguagem | Go (single binary) | C (ubíquo) | Rust |
| Up-to-date checks | Sim (sources/generates) | Sim (timestamps) | Não (command runner) |
| File watching | Built-in (--watch) | Não | Não (emparelhe com watchexec) |
| Melhor para | Fãs YAML, multiplataforma | Gráficos de build clássicos | Execução de comando simples |
Veja também just para uma alternativa command-runner e watchexec para standalone file watching.
Recursos