version: '3' env: GOOS: sh: go env GOOS GOARCH: sh: go env GOARCH DESTDIR: /usr/local/sbin tasks: default: cmds: - task: build-all setup: desc: setup directories internal: true cmds: - mkdir -p bin status: - test -d bin build-all: desc: build all binaries cmds: - for: { var: BINARIES } task: native-build-{{.ITEM}} vars: BINARY: '{{.ITEM}}' vars: BINARIES: sh: ls cmd/ install-all: desc: install all binaries cmds: - for: { var: BINARIES } task: install vars: BINARY: '{{.ITEM}}' vars: BINARIES: sh: ls cmd/ matrix-build-all: desc: build all binaries cmds: - for: { var: BINARIES } task: matrix-build-{{.ITEM}} vars: BINARY: '{{.ITEM}}' vars: BINARIES: sh: ls cmd/ build-*: desc: build a binary cmd: | GOOS={{.GOOS}} GOARCH={{.GOARCH}} go build -o bin/{{.BINARY}}_{{.GOOS}}_{{.GOARCH}} ./cmd/{{.BINARY}} vars: BINARY: '{{index .MATCH 0}}' sources: - '**/*.go' generates: - bin/{{.BINARY}}_{{.GOOS}}_{{.GOARCH}} deps: - setup native-build-*: desc: build a native binary cmd: | go build -o bin/{{.BINARY}} ./cmd/{{.BINARY}} vars: BINARY: '{{index .MATCH 0}}' sources: - '**/*.go' generates: - bin/{{.BINARY}} deps: - setup matrix-build-*: desc: cross compile a binary cmds: - for: matrix: GOOS: [linux, darwin] GOARCH: [amd64, arm64] task: build-{{.BINARY}} vars: GOOS: '{{.ITEM.GOOS}}' GOARCH: '{{.ITEM.GOARCH}}' - task: build-{{.BINARY}} vars: GOOS: windows GOARCH: amd64 vars: BINARY: '{{index .MATCH 0}}' update: desc: update dependencies cmds: - go get -u ./... - go mod tidy install: desc: install a binary cmd: | sudo install -m 0755 bin/{{.BINARY}} $DESTDIR/{{.BINARY}} env: DESTDIR: /usr/local/sbin requires: vars: [BINARY]