PROG := s3-genindex MODULE := git.ipng.ch/ipng/s3-genindex NATIVE_ARCH := $(shell go env GOARCH) VERSION := ${shell head -1 debian/changelog | sed -n 's/.*(\([^)]*\)).*/\1/p'} COMMIT_HASH := $(shell git rev-parse --short HEAD 2>/dev/null || echo unknown) DATE := $(shell date -u +%Y-%m-%dT%H:%M:%SZ) LDFLAGS := -s -w \ -X 'main.Version=$(VERSION)' \ -X 'main.Commit=$(COMMIT_HASH)' \ -X 'main.Date=$(DATE)' # CGO_ENABLED=0 yields a fully static binary so the same .deb runs on # any glibc/musl Linux of the matching arch. The AWS SDK and the rest # of this codebase are pure Go, so this has no behavioural impact # beyond switching net/dns to the pure-Go resolver. export CGO_ENABLED := 0 .PHONY: help all build build-amd64 build-arm64 test pkg-deb fmt fixstyle vet lint check clean help: ## Show this help @printf "Usage: make \n\nTargets:\n" @awk -F ':.*## ' '/^[A-Za-z][A-Za-z0-9_-]*:.*## / {printf " %-16s %s\n", $$1, $$2}' $(MAKEFILE_LIST) all: build ## Alias for build (native arch) build: ## Build the binary for the host architecture mkdir -p build/$(NATIVE_ARCH) go build -ldflags "$(LDFLAGS)" -o build/$(NATIVE_ARCH)/$(PROG) ./cmd/$(PROG) build-amd64: ## Cross-build the binary for linux/amd64 mkdir -p build/amd64 GOOS=linux GOARCH=amd64 go build -ldflags "$(LDFLAGS)" -o build/amd64/$(PROG) ./cmd/$(PROG) build-arm64: ## Cross-build the binary for linux/arm64 mkdir -p build/arm64 GOOS=linux GOARCH=arm64 go build -ldflags "$(LDFLAGS)" -o build/arm64/$(PROG) ./cmd/$(PROG) test: ## Run all Go unit tests go test ./... pkg-deb: build-amd64 build-arm64 ## Build .deb packages for amd64 and arm64 debian/build-deb.sh $(PROG) amd64 $(VERSION) debian/build-deb.sh $(PROG) arm64 $(VERSION) fmt: ## go fmt everything go fmt ./... fixstyle: ## Reformat the entire tree with gofmt gofmt -w . vet: ## go vet everything go vet ./... lint: ## golangci-lint, if installed @if command -v golangci-lint >/dev/null 2>&1; then golangci-lint run; else echo "golangci-lint not installed, skipping"; fi check: fmt vet lint test ## Format, vet, lint, and test clean: ## Remove build artifacts rm -rf build/ rm -f $(PROG) coverage.out coverage.html find . -name index.html -delete