๐Ÿš€ gogo

A simple task runner. Define tasks in YAML, run them from anywhere.

๐Ÿ“„

Simple YAML Config

Define tasks with commands, dependencies, variables, and environment in a single gogo.yaml.

โšก

Incremental Builds

SHA-256 source checksums or generates: timestamp comparison skip work that is already up to date.

๐Ÿ“ฆ

Source Presets

Reuse named glob lists (built-in go and go-vendored, or define your own).

๐Ÿ‘๏ธ

Watch Mode

Polls sources at a configurable interval: and re-runs tasks when they change.

๐Ÿ”—

Concurrent Dependencies

Independent deps: run in parallel and are deduplicated within a single invocation.

๐Ÿงฎ

Variables

Template expansion, shell-evaluated sh: values, and built-in {{.GIT_*}} and {{.TASK_FILE_DIR}}.

๐Ÿ“จ

Dotenv

Global and per-task .env files, with deterministic precedence rules.

๐Ÿ”

Secrets

Inject 1Password values into tasks using op:// references; op run handles auth.

โœ…

Preconditions & Requires

Guard tasks with shell-evaluated checks or required vars / env before they run.

๐Ÿ–ฅ๏ธ

Platform Filtering

Restrict tasks to specific OS/arch with platforms: [linux/amd64, darwin].

๐Ÿ“‚

Includes & Flatten

Split task files across subdirectories (includes:) or merge sibling files into one namespace (flatten:).

๐Ÿ”

Dry Run

gogo -n <task> prints the full plan without executing commands.

Quick Example

# gogo.yaml
tasks:
  # Build the project
  build:
    cmd: go build ./...
    sources: go        # built-in preset: **/*.go + go.mod + go.sum

  # Run all tests
  test:
    deps: [build]
    cmd: go test ./...
    sources: go

  # Format and lint
  lint:
    cmds:
      - gofmt -w .
      - golangci-lint run
gogo build       # run the build task
gogo test        # run tests (builds first)
gogo -w test     # watch and re-run tests on changes
gogo -l          # list tasks with descriptions
Edit this page on GitHub