Task (go-task) - Corredor de Tareas Moderno
Task (también conocido como go-task) es un corredor de tareas y herramienta de compilación que apunta a ser una alternativa más simple a Make. Defines tareas en un Taskfile.yml YAML — con dependencias, variables, includes y comprobaciones de actualización — y las ejecutas con task <name>. Está escrito en Go y se distribuye como un binario único sin dependencias, con comportamiento multiplataforma y observación de archivos integrada. Es una opción sólida cuando tu equipo prefiere YAML sobre la sintaxis de Make.
Installation
| Plataforma | 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 |
| Verificar | task --version |
A Basic Taskfile
# 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
Running Tasks
| Comando | Descripción |
|---|
task | Ejecuta la tarea default |
task build | Ejecuta una tarea nombrada |
task test build | Ejecuta varias tareas en orden |
task --list (-l) | Lista tareas con descripciones |
task --list-all | Lista todas las tareas (incl. sin desc) |
task --summary build | Muestra el detalle de una tarea |
task VAR=value build | Pasa una variable |
task -- arg1 arg2 | Reenvía argumentos CLI a la tarea ({{.CLI_ARGS}}) |
Dependencies & Ordering
| Clave | Comportamiento |
|---|
deps: [a, b] | Ejecuta a y b (en paralelo) antes de esta tarea |
cmds: [{task: x}] | Llama a otra tarea como un paso (secuencial) |
Paralelismo de deps | Las dependencias se ejecutan concurrentemente por predeterminado |
--parallel | Ejecuta tareas dadas en paralelo |
Up-to-Date Checks (Skip Unneeded Work)
tasks:
build:
sources:
- "**/*.go"
generates:
- myapp
cmds:
- go build -o myapp ./cmd/app
| Clave | Efecto |
|---|
sources | Entradas a fingerprint |
generates | Salidas esperadas |
| `method: checksum | timestamp |
status: [ ... ] | Comprobaciones de shell personalizadas para actualizado |
Si las fuentes no cambian, Task omite el comando.
Variables & Templating
| Característica | Ejemplo |
|---|
| Vars de tarea/globales | vars: { NAME: value } |
| Variables de entorno | env: { CGO_ENABLED: "0" } |
| Dotenv | dotenv: ['.env'] |
| Templating | {{.NAME}}, {{.CLI_ARGS}}, funciones de plantilla Go |
| Variables dinámicas | sh: para calcular una var desde un comando |
Includes & Watching
| Característica | Cómo |
|---|
| Includes | includes: { docs: ./docs/Taskfile.yml } → task docs:build |
| Namespacing | Las tareas incluidas se llaman namespace:task |
| Modo de observación | task --watch build (reejecuta en cambios de código fuente) |
-w | Forma corta de --watch |
Common Workflows
# Descubre qué puede hacer un proyecto
task --list
# Ejecuta CI localmente exactamente como lo hace el pipeline
task ci
# Itera: reconstruye en cada cambio de código fuente
task --watch build
# Pasa argumentos
task test -- -run TestLogin
Task vs Make vs just
| Aspecto | Task | Make | just |
|---|
| Sintaxis | YAML | Makefile | recetas just |
| Lenguaje | Go (binario único) | C (ubicuo) | Rust |
| Comprobaciones de actualización | Sí (sources/generates) | Sí (timestamps) | No (corredor de comando) |
| Observación de archivos | Integrada (--watch) | No | No (empareja con watchexec) |
| Mejor para | Fanáticos de YAML, multiplataforma | Gráficos de compilación clásicos | Ejecución simple de comandos |
Consulta también just para una alternativa de corredor de comandos y watchexec para observación de archivos independiente.
Resources