Ir al contenido

Task (go-task) - Corredor de Tareas Moderno

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

PlataformaComando
Scriptsh -c "$(curl -sSL https://taskfile.dev/install.sh)"
macOS/Linux (Homebrew)brew install go-task
Arch Linuxsudo pacman -S go-task
Go installgo install github.com/go-task/task/v3/cmd/task@latest
Windows (Scoop)scoop install task
Verificartask --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

ComandoDescripción
taskEjecuta la tarea default
task buildEjecuta una tarea nombrada
task test buildEjecuta varias tareas en orden
task --list (-l)Lista tareas con descripciones
task --list-allLista todas las tareas (incl. sin desc)
task --summary buildMuestra el detalle de una tarea
task VAR=value buildPasa una variable
task -- arg1 arg2Reenvía argumentos CLI a la tarea ({{.CLI_ARGS}})

Dependencies & Ordering

ClaveComportamiento
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 depsLas dependencias se ejecutan concurrentemente por predeterminado
--parallelEjecuta tareas dadas en paralelo

Up-to-Date Checks (Skip Unneeded Work)

tasks:
  build:
    sources:
      - "**/*.go"
    generates:
      - myapp
    cmds:
      - go build -o myapp ./cmd/app
ClaveEfecto
sourcesEntradas a fingerprint
generatesSalidas esperadas
`method: checksumtimestamp
status: [ ... ]Comprobaciones de shell personalizadas para actualizado

Si las fuentes no cambian, Task omite el comando.

Variables & Templating

CaracterísticaEjemplo
Vars de tarea/globalesvars: { NAME: value }
Variables de entornoenv: { CGO_ENABLED: "0" }
Dotenvdotenv: ['.env']
Templating{{.NAME}}, {{.CLI_ARGS}}, funciones de plantilla Go
Variables dinámicassh: para calcular una var desde un comando

Includes & Watching

CaracterísticaCómo
Includesincludes: { docs: ./docs/Taskfile.yml }task docs:build
NamespacingLas tareas incluidas se llaman namespace:task
Modo de observacióntask --watch build (reejecuta en cambios de código fuente)
-wForma 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

AspectoTaskMakejust
SintaxisYAMLMakefilerecetas just
LenguajeGo (binario único)C (ubicuo)Rust
Comprobaciones de actualizaciónSí (sources/generates)Sí (timestamps)No (corredor de comando)
Observación de archivosIntegrada (--watch)NoNo (empareja con watchexec)
Mejor paraFanáticos de YAML, multiplataformaGráficos de compilación clásicosEjecución simple de comandos

Consulta también just para una alternativa de corredor de comandos y watchexec para observación de archivos independiente.

Resources