Pular para o conteúdo

Task (go-task) - Cheatsheet de Task Runner Moderno

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

PlatformCommand
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

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

CommandDescrição
taskExecute a task default
task buildExecute uma task nomeada
task test buildExecute várias tasks em ordem
task --list (-l)Liste tasks com descrições
task --list-allListe todas as tasks (incl. sem-desc)
task --summary buildMostre detalhe de uma task
task VAR=value buildPasse uma variável
task -- arg1 arg2Encaminhe CLI args para a task ({{.CLI_ARGS}})

Dependências & Ordenação

KeyComportamento
deps: [a, b]Execute a e b (em paralelo) antes dessa task
cmds: [{task: x}]Chame outra task como step (sequencial)
deps paralelismDependências rodam concorrentemente por padrão
--parallelExecute 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
KeyEfeito
sourcesInputs para fingerprint
generatesExpected outputs
`method: checksumtimestamp
status: [ ... ]Verificações shell customizadas para up-to-date

Se sources estão inalterados, Task pula o comando.

Variáveis & Templating

FeatureExample
Task/global varsvars: { NAME: value }
Env varsenv: { CGO_ENABLED: "0" }
Dotenvdotenv: ['.env']
Templating{{.NAME}}, {{.CLI_ARGS}}, funcs Go template
Dynamic varssh: para computar uma var de um comando

Includes & Watching

FeatureComo
Includesincludes: { docs: ./docs/Taskfile.yml }task docs:build
NamespacingTasks inclusos são chamados namespace:task
Watch modetask --watch build (rerun em mudanças de source)
-wForma 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

AspectoTaskMakejust
SintaxeYAMLMakefilejust recipes
LinguagemGo (single binary)C (ubíquo)Rust
Up-to-date checksSim (sources/generates)Sim (timestamps)Não (command runner)
File watchingBuilt-in (--watch)NãoNão (emparelhe com watchexec)
Melhor paraFãs YAML, multiplataformaGráficos de build clássicosExecução de comando simples

Veja também just para uma alternativa command-runner e watchexec para standalone file watching.

Recursos