Task (go-task) - Cheatsheet Modern Task Runner
Task (a.k.a. go-task) è un task runner e build tool che mira ad essere una Make alternativa più semplice. Definisci task in un file YAML Taskfile.yml — con dipendenze, variabili, includes, e up-to-date checks — ed eseguili con task <name>. È scritto in Go e viene fornito come un singolo binario dependency-free, con comportamento cross-platform e built-in file watching. È una scelta forte quando il tuo team preferisce YAML sopra la sintassi di Make.
Installazione
| Piattaforma | Comando |
|---|
| 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 |
| Verifica | task --version |
Un Taskfile di Base
# Taskfile.yml
version: ''3''
vars:
BINARY: myapp
tasks:
build:
desc: Build il binario
cmds:
- go build -o {{.BINARY}} ./cmd/app
test:
desc: Esegui test
cmds:
- go test ./...
ci:
desc: Lint, test, build
deps: [test]
cmds:
- task: build
Esecuzione di Task
| Comando | Descrizione |
|---|
task | Esegui il task default |
task build | Esegui un task nominato |
task test build | Esegui parecchi task in ordine |
task --list (-l) | Lista task con descrizioni |
task --list-all | Lista tutti i task (incl. no-desc) |
task --summary build | Mostra i dettagli di un task |
task VAR=value build | Passa una variabile |
task -- arg1 arg2 | Forward CLI args al task ({{.CLI_ARGS}}) |
Dipendenze & Ordinamento
| Key | Comportamento |
|---|
deps: [a, b] | Esegui a e b (in parallelo) prima di questo task |
cmds: [{task: x}] | Chiama un altro task come passo (sequenziale) |
deps parallelism | Le dipendenze eseguono concorrentemente di default |
--parallel | Esegui i task dati in parallelo |
Up-to-Date Checks (Skip Unneeded Work)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| Key | Effetto |
|---|
sources | Input a fingerprint |
generates | Expected output |
| `method: checksum | timestamp |
status: [ ... ] | Custom shell checks per up-to-date |
Se i sources sono unchancged, Task salta il comando.
Variabili & Templating
| Feature | Esempio |
|---|
| Task/global vars | vars: { NAME: value } |
| Env vars | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: [''.env''] |
| Templating | {{.NAME}}, {{.CLI_ARGS}}, Go template funcs |
| Dynamic vars | sh: per computare una var da un comando |
Includes & Watching
| Feature | Come |
|---|
| Includes | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| Namespacing | I task inclusi vengono chiamati namespace:task |
| Watch mode | task --watch build (rerun su source changes) |
-w | Short form di --watch |
Workflow Comuni
# Scopri cosa il progetto può fare
task --list
# Esegui CI localmente esattamente come la pipeline fa
task ci
# Itera: ricostruisci su ogni source change
task --watch build
# Pass through arguments
task test -- -run TestLogin
Task vs Make vs just
| Aspetto | Task | Make | just |
|---|
| Syntax | YAML | Makefile | just recipes |
| Language | Go (single binary) | C (ubiquitous) | Rust |
| Up-to-date checks | Yes (sources/generates) | Yes (timestamps) | No (command runner) |
| File watching | Built-in (--watch) | No | No (pair con watchexec) |
| Best for | YAML fans, cross-platform | Classic build graphs | Simple command running |
Vedi anche just per un command-runner alternativa e watchexec per standalone file watching.
Risorse