Zum Inhalt springen

Task (go-task) - Moderner Task-Runner-Spickzettel

Task (go-task) - Moderner Task-Runner-Spickzettel

Task (a.k.a. go-task) ist ein Task-Runner und Build-Tool, das darauf abzielt, eine einfachere Make-Alternative zu sein. Du definierst Tasks in einer YAML Taskfile.yml — mit Abhängigkeiten, Variablen, Includes und Up-To-Date-Checks — und führe sie mit task <name> aus. Es ist in Go geschrieben und wird als einzelne abhängigkeitsfreie Binärdatei versandt, mit plattformübergreifendem Verhalten und eingebautem Datei-Beobachter. Es ist eine starke Wahl, wenn dein Team YAML gegenüber Make’s Syntax bevorzugt.

Installation

PlattformBefehl
Skriptsh -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
Verifizierentask --version

Eine grundlegende 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

Tasks ausführen

BefehlBeschreibung
taskFühre die default-Task aus
task buildFühre eine benannte Task aus
task test buildMehrere Tasks der Reihe nach ausführen
task --list (-l)Tasks mit Beschreibungen auflisten
task --list-allAlle Tasks auflisten (incl. kein-Desc)
task --summary buildZeige eine Task’s Detail
task VAR=value buildÜbergebe eine Variable
task -- arg1 arg2Leite CLI-Argumente zur Task weiter ({{.CLI_ARGS}})

Abhängigkeiten & Bestellung

SchlüsselVerhalten
deps: [a, b]Führe a und b (parallel) vor dieser Task aus
cmds: [{task: x}]Rufe eine andere Task als Schritt auf (sequenziell)
deps ParallelismusAbhängigkeiten laufen standardmäßig gleichzeitig
--parallelGegebene Tasks parallel ausführen

Up-To-Date-Checks (Skip Unneeded Work)

tasks:
  build:
    sources:
      - "**/*.go"
    generates:
      - myapp
    cmds:
      - go build -o myapp ./cmd/app
SchlüsselEffekt
sourcesInputs zum Fingerprint
generatesErwartete Ausgaben
`method: checksumtimestamp
status: [ ... ]Benutzerdefinierte Shell-Checks für Up-To-Date

Wenn Quellen unverändert sind, Task springt den Befehl.

Variablen & Templating

FeatureBeispiel
Task/Globale Variablenvars: { NAME: value }
Env-Variablenenv: { CGO_ENABLED: "0" }
Dotenvdotenv: ['.env']
Templating{{.NAME}}, {{.CLI_ARGS}}, Go-Template-Funcs
Dynamische Variablensh: um eine Var aus einem Befehl zu berechnen

Includes & Watching

FeatureWie
Includesincludes: { docs: ./docs/Taskfile.yml }task docs:build
NamespacingEingebundene Tasks heißen namespace:task
Watch-Modustask --watch build (Rerun bei Source-Änderungen)
-wKurzform von --watch

Häufige Workflows

# Entdecke, was ein Projekt tun kann
task --list

# Führe CI lokal exakt wie die Pipeline aus
task ci

# Iteriere: Bei jeder Source-Änderung neu bauen
task --watch build

# Übergebe Argumente durch
task test -- -run TestLogin

Task vs Make vs just

AspektTaskMakejust
SyntaxYAMLMakefilejust Rezepte
SpracheGo (einzelne Binärdatei)C (ubiquitär)Rust
Up-To-Date-ChecksJa (sources/generates)Ja (Timestamps)Nein (Command Runner)
Datei-BeobachtungEingebaut (--watch)NeinNein (Paar mit watchexec)
Best fürYAML-Fans, PlattformübergreifendKlassische Build-GraphenEinfache Command-Ausführung

Siehe auch just für eine Command-Runner-Alternative und watchexec für eigenständige Datei-Beobachtung.

Ressourcen