Task (go-task) - Cheatsheet Task Runner Moderne
Task (a.k.a. go-task) est un task runner et outil de build qui vise à être une alternative plus simple à Make. Tu définis les tâches dans un Taskfile.yml simple — avec dépendances, variables, includes et vérifications à jour — et les exécutes avec task <name>. C”est écrit en Go et livré comme un binaire unique indépendant, avec un comportement multiplateforme et file-watching intégré. C”est un excellent choix quand ton équipe préfère YAML à la syntaxe de Make.
Installation
| Plateforme | Commande |
|---|
| 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 |
| Vérification | task --version |
Un Taskfile Basique
# 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
Exécuter les Tâches
| Commande | Description |
|---|
task | Exécuter la tâche default |
task build | Exécuter une tâche nommée |
task test build | Exécuter plusieurs tâches dans l”ordre |
task --list (-l) | Lister les tâches avec descriptions |
task --list-all | Lister toutes les tâches (incl. sans description) |
task --summary build | Afficher le détail d”une tâche |
task VAR=value build | Transmettre une variable |
task -- arg1 arg2 | Transmettre les args CLI à la tâche ({{.CLI_ARGS}}) |
Dépendances et Ordonnancement
| Clé | Comportement |
|---|
deps: [a, b] | Exécuter a et b (en parallèle) avant cette tâche |
cmds: [{task: x}] | Appeler une autre tâche comme une étape (séquentielle) |
Parallélisme deps | Les dépendances s”exécutent concurremment par défaut |
--parallel | Exécuter les tâches données en parallèle |
Vérifications À Jour (Ignorer le Travail Non Nécessaire)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| Clé | Effet |
|---|
sources | Entrées à fingerprinter |
generates | Sorties attendues |
| `method: checksum | timestamp |
status: [ ... ] | Vérifications shell personnalisées à jour |
Si les sources sont inchangées, Task ignore la commande.
Variables et Templating
| Fonctionnalité | Exemple |
|---|
| Vars tâche/global | vars: { NAME: value } |
| Vars d”env | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: [''.env''] |
| Templating | {{.NAME}}, {{.CLI_ARGS}}, foncs de template Go |
| Vars dynamiques | sh: pour calculer une var à partir d”une commande |
Includes et Watching
| Fonctionnalité | Comment |
|---|
| Includes | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| Namespacing | Les tâches incluses s”appellent namespace:task |
| Mode watch | task --watch build (réexécuter sur changements source) |
-w | Forme courte de --watch |
Flux de Travail Courants
# Découvrir ce qu''un projet peut faire
task --list
# Exécuter CI localement exactement comme le pipeline
task ci
# Itérer : reconstruire sur chaque changement source
task --watch build
# Passer les arguments
task test -- -run TestLogin
Task vs Make vs just
| Aspect | Task | Make | just |
|---|
| Syntaxe | YAML | Makefile | recettes just |
| Langage | Go (binaire unique) | C (omniprésent) | Rust |
| Vérifications à jour | Oui (sources/generates) | Oui (timestamps) | Non (runner de commande) |
| File-watching | Intégré (--watch) | Non | Non (associer avec watchexec) |
| Meilleur pour | Fans YAML, multiplateforme | Graphiques de build classiques | Simple command running |
Voir aussi just pour une alternative command-runner et watchexec pour l”observation de fichiers autonome.
Ressources