.PHONY: build build-all test test-race test-cover clean install

BINARY     = taskctl
MODULE     = github.com/yourname/taskctl
VERSION   ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
COMMIT    ?= $(shell git rev-parse --short HEAD 2>/dev/null || echo "none")
BUILD_DATE = $(shell date -u +%Y-%m-%dT%H:%M:%SZ)

LDFLAGS = -s -w \
  -X $(MODULE)/cmd.Version=$(VERSION) \
  -X $(MODULE)/cmd.Commit=$(COMMIT) \
  -X '$(MODULE)/cmd.BuildDate=$(BUILD_DATE)'

build:
	go build -ldflags="$(LDFLAGS)" -trimpath -o $(BINARY) .

build-all:
	GOOS=linux   GOARCH=amd64 go build -ldflags="$(LDFLAGS)" -trimpath -o dist/taskctl-linux-amd64 .
	GOOS=linux   GOARCH=arm64 go build -ldflags="$(LDFLAGS)" -trimpath -o dist/taskctl-linux-arm64 .
	GOOS=darwin  GOARCH=amd64 go build -ldflags="$(LDFLAGS)" -trimpath -o dist/taskctl-darwin-amd64 .
	GOOS=darwin  GOARCH=arm64 go build -ldflags="$(LDFLAGS)" -trimpath -o dist/taskctl-darwin-arm64 .
	GOOS=windows GOARCH=amd64 go build -ldflags="$(LDFLAGS)" -trimpath -o dist/taskctl-windows-amd64.exe .

install:
	go install -ldflags="$(LDFLAGS)" -trimpath .

test:
	go test ./...

test-race:
	go test -race -count=1 ./...

test-cover:
	go test -race -coverprofile=coverage.out ./...
	go tool cover -html=coverage.out -o coverage.html

clean:
	rm -f $(BINARY) coverage.out coverage.html
	rm -rf dist/

.DEFAULT_GOAL := build
