|
1 | 1 | unexport GOFLAGS |
2 | 2 |
|
3 | | -GOOS?=linux |
4 | | -TESTOPTS ?= |
5 | | -GOARCH?=amd64 |
6 | | -GOENV=GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS= |
| 3 | +GOOS ?= linux |
| 4 | +GOARCH ?= amd64 |
| 5 | +GOENV = GOOS=${GOOS} GOARCH=${GOARCH} CGO_ENABLED=0 GOFLAGS= |
7 | 6 | GOPATH := $(shell go env GOPATH | awk -F: '{print $1}') |
8 | | -HOME?=$(shell mktemp -d) |
| 7 | +BIN_DIR := $(GOPATH)/bin |
| 8 | +HOME ?= $(shell echo ~) |
9 | 9 |
|
10 | | -GOLANGCI_LINT_VERSION=v2.1.5 |
11 | | - |
12 | | -GORELEASER_VERSION=v2.8.2 |
| 10 | +GOLANGCI_LINT_VERSION = v2.1.5 |
| 11 | +GORELEASER_VERSION = v2.8.2 |
13 | 12 |
|
14 | 13 | # Ensure go modules are enabled: |
15 | | -export GO111MODULE=on |
16 | | -export GOPROXY=https://proxy.golang.org |
| 14 | +export GO111MODULE = on |
| 15 | +export GOPROXY = https://proxy.golang.org |
17 | 16 |
|
18 | 17 | # Disable CGO so that we always generate static binaries: |
19 | | -export CGO_ENABLED=0 |
| 18 | +export CGO_ENABLED = 0 |
| 19 | + |
| 20 | +.DEFAULT_GOAL := help |
20 | 21 |
|
21 | | -default: build |
| 22 | +.PHONY: help |
| 23 | +help: ## Show this help message |
| 24 | + @echo "Available targets:" |
| 25 | + @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-20s\033[0m %s\n", $$1, $$2}' |
22 | 26 |
|
23 | 27 | .PHONY: build |
24 | | -build: |
25 | | - $(GOENV) go build -o build/$(PROJECT_NAME) . |
| 28 | +build: ## Build the application |
| 29 | + @echo "Building the application..." |
| 30 | + goreleaser build --snapshot --clean --single-target |
26 | 31 |
|
27 | 32 | .PHONY: install |
28 | | -install: build |
29 | | - cp build/srepd ~/.local/bin/$(PROJECT_NAME) |
30 | | - |
31 | | -.PHONY: mod |
32 | | -mod: |
| 33 | +install: ## Install the application to $(GOPATH)/bin |
| 34 | + @echo "Installing the application..." |
| 35 | + go build -o ${BIN_DIR}/srepd . |
| 36 | + |
| 37 | +.PHONY: install-local |
| 38 | +install-local: build ## Install the application locally to ~/.local/bin |
| 39 | + @echo "Installing the application locally..." |
| 40 | + cp dist/*/srepd $(HOME)/.local/bin/srepd |
| 41 | + |
| 42 | +.PHONY: tidy |
| 43 | +tidy: ## Tidy up go modules |
| 44 | + @echo "Tidying up go modules..." |
33 | 45 | go mod tidy |
34 | 46 |
|
35 | 47 | .PHONY: test |
36 | | -test: |
| 48 | +test: ## Run tests |
| 49 | + @echo "Running tests..." |
37 | 50 | go test ./... -v $(TESTOPTS) |
38 | 51 |
|
39 | 52 | .PHONY: coverage |
40 | | -coverage: |
| 53 | +coverage: ## Generate test coverage report |
| 54 | + @echo "Generating test coverage report..." |
41 | 55 | hack/codecov.sh |
42 | 56 |
|
43 | | -# Installed using instructions from: https://golangci-lint.run/usage/install/#linux-and-windows |
44 | | -getlint: |
45 | | - @mkdir -p $(GOPATH)/bin |
46 | | - @ls $(GOPATH)/bin/golangci-lint 1>/dev/null 2>&1 || (echo "Installing golangci-lint..." && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(GOPATH)/bin $(GOLANGCI_LINT_VERSION)) |
| 57 | +.PHONY: getlint |
| 58 | +getlint: ## Install golangci-lint if not already installed |
| 59 | + @echo "Checking for golangci-lint..." |
| 60 | + @which golangci-lint >/dev/null 2>&1 || (echo "Installing golangci-lint..." && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(BIN_DIR) $(GOLANGCI_LINT_VERSION)) |
47 | 61 |
|
48 | 62 | .PHONY: lint |
49 | | -lint: getlint |
50 | | - $(GOPATH)/bin/golangci-lint --version |
51 | | - $(GOPATH)/bin/golangci-lint run --timeout 5m |
| 63 | +lint: getlint ## Run golangci-lint |
| 64 | + @echo "Running golangci-lint..." |
| 65 | + $(BIN_DIR)/golangci-lint --version |
| 66 | + $(BIN_DIR)/golangci-lint run --timeout 5m |
| 67 | + |
| 68 | +.PHONY: vet |
| 69 | +vet: ## Run go vet to catch common mistakes |
| 70 | + @echo "Running go vet..." |
| 71 | + go vet ./... |
| 72 | + |
| 73 | +.PHONY: check |
| 74 | +check: fmt lint vet ## Run all code checks (fmt, lint, vet) |
| 75 | + @echo "Running all code checks..." |
52 | 76 |
|
53 | 77 | .PHONY: ensure-goreleaser |
54 | | -ensure-goreleaser: |
55 | | - @ls $(GOPATH)/bin/goreleaser 1>/dev/null 2>&1 || go install github.com/goreleaser/goreleaser/v2@${GORELEASER_VERSION} |
| 78 | +ensure-goreleaser: ## Ensure goreleaser is installed |
| 79 | + @echo "Checking for goreleaser..." |
| 80 | + @which goreleaser >/dev/null 2>&1 || go install github.com/goreleaser/goreleaser/v2@${GORELEASER_VERSION} |
56 | 81 |
|
57 | 82 | .PHONY: release |
58 | | -release: ensure-goreleaser |
| 83 | +release: ensure-goreleaser ## Create a release using goreleaser |
| 84 | + @echo "Creating a release..." |
59 | 85 | GITHUB_TOKEN=$$(jq -r .goreleaser_token ~/.config/goreleaser/goreleaser_token) && \ |
60 | 86 | export GITHUB_TOKEN && \ |
61 | 87 | goreleaser release --clean |
62 | 88 |
|
63 | 89 | .PHONY: fmt |
64 | | -fmt: |
65 | | - gofmt -s -l -w cmd pkg tests |
| 90 | +fmt: ## Format the code |
| 91 | + @echo "Formatting the code..." |
| 92 | + gofmt -s -l -w cmd pkg |
66 | 93 |
|
67 | 94 | .PHONY: clean |
68 | | -clean: |
69 | | - rm -rf \ |
70 | | - build/* |
71 | | - |
72 | | - rm -rf \ |
73 | | - dist/* |
| 95 | +clean: ## Clean up build artifacts |
| 96 | + @echo "Cleaning up build artifacts..." |
| 97 | + rm -rf build/* dist/* |
| 98 | + |
| 99 | +.PHONY: run |
| 100 | +run: ## Run the application locally |
| 101 | + @echo "Running the application..." |
| 102 | + go run main.go |
0 commit comments