-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
156 lines (134 loc) · 4.5 KB
/
Makefile
File metadata and controls
156 lines (134 loc) · 4.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# See https://tech.davis-hansson.com/p/make/
SHELL := bash
.DELETE_ON_ERROR:
.SHELLFLAGS := -eu -o pipefail -c
.DEFAULT_GOAL := all
MAKEFLAGS += --warn-undefined-variables
MAKEFLAGS += --no-builtin-rules
MAKEFLAGS += --no-print-directory
BIN := .tmp/bin
export PATH := $(abspath $(BIN)):$(PATH)
export GOBIN := $(abspath $(BIN))
LICENSE_TYPE := proprietary
COPYRIGHT_HOLDER := Peter Edge
COPYRIGHT_YEARS := 2026
LICENSE_IGNORE := --ignore testdata/
UNAME_OS := $(shell uname -s)
UNAME_ARCH := $(shell uname -m)
BUF_VERSION := v1.66.0
GO_MOD_GOTOOLCHAIN := go1.26.0
GOLANGCI_LINT_VERSION := v2.10.1
ifeq ($(UNAME_OS),Darwin)
GOLANGCI_LINT_OS := darwin
else ifeq ($(UNAME_OS),Linux)
GOLANGCI_LINT_OS := linux
endif
ifeq ($(UNAME_ARCH),x86_64)
GOLANGCI_LINT_ARCH := amd64
else ifeq ($(UNAME_ARCH),arm64)
GOLANGCI_LINT_ARCH := arm64
else ifeq ($(UNAME_ARCH),aarch64)
GOLANGCI_LINT_ARCH := arm64
else
GOLANGCI_LINT_ARCH := $(UNAME_ARCH)
endif
MDBOOK_VERSION := 0.5.2
ifeq ($(UNAME_OS),Darwin)
MDBOOK_OS := apple-darwin
ifeq ($(UNAME_ARCH),arm64)
MDBOOK_ARCH := aarch64
else
MDBOOK_ARCH := x86_64
endif
else ifeq ($(UNAME_OS),Linux)
MDBOOK_OS := unknown-linux-gnu
MDBOOK_ARCH := $(UNAME_ARCH)
endif
GO_GET_PKGS ?=
.PHONY: help
help: ## Describe useful make targets
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "%-30s %s\n", $$1, $$2}'
.PHONY: all
all: ## lint and test (default)
$(MAKE) lint
$(MAKE) test
.PHONY: clean
clean: ## Delete intermediate build artifacts
git clean -Xdf
.PHONY: build
build: ## Build all packages
go build ./...
.PHONY: test
test: ## Run unit tests
go test -vet=off -race ./...
.PHONY: lint
lint: $(BIN)/golangci-lint ## Lint
@$(MAKE) checknodiffgenerated
go vet ./...
golangci-lint run --modules-download-mode=readonly --timeout=3m0s
buf lint
.PHONY: lintfix
lintfix: $(BIN)/golangci-lint ## Automatically fix some lint errors
golangci-lint run --fix --modules-download-mode=readonly --timeout=3m0s
.PHONY: install
install: ## Install all binaries
go install ./...
.PHONY: generate
generate: $(BIN)/buf $(BIN)/protoc-gen-go $(BIN)/license-header ## Regenerate code and licenses
buf generate
license-header --license-type "$(LICENSE_TYPE)" --copyright-holder "$(COPYRIGHT_HOLDER)" --year-range "$(COPYRIGHT_YEARS)" $(LICENSE_IGNORE)
@echo gofmt -s -w GO_FILES
@gofmt -s -w $(shell find . -name '*.go')
buf format -w
.PHONY: checknodiffgenerated
checknodiffgenerated:
@ if [[ -d .git || -f .git ]]; then \
$(MAKE) __checknodiffgeneratedinternal; \
else \
echo "skipping make checknodiffgenerated due to no .git repository" >&2; \
fi
.PHONY: upgrade
upgrade: ## Upgrade dependencies
go mod edit -toolchain=$(GO_MOD_GOTOOLCHAIN)
go get -u -t ./... $(GO_GET_PKGS)
go mod tidy -v
.PHONY: book
book: $(BIN)/mdbook ## Serve the book locally
cd ./book && $(abspath $(BIN)/mdbook) serve --open --port 3000
.PHONY: bookbuild
bookbuild: $(BIN)/mdbook ## Build the book for static hosting
cd ./book && $(abspath $(BIN)/mdbook) build
$(BIN)/buf: Makefile
@mkdir -p $(BIN)
go install github.com/bufbuild/buf/cmd/buf@$(BUF_VERSION)
$(BIN)/license-header: Makefile
@mkdir -p $(BIN)
go install github.com/bufbuild/buf/private/pkg/licenseheader/cmd/license-header@$(BUF_VERSION)
$(BIN)/golangci-lint: Makefile
$(eval DIR=$(abspath $(BIN)))
@mkdir -p $(DIR)
$(eval GOLANGCI_LINT_TMP := $(shell mktemp -d))
cd $(GOLANGCI_LINT_TMP); \
curl -fsSL -o $(GOLANGCI_LINT_TMP)/golangci-lint.tar.gz \
https://github.com/golangci/golangci-lint/releases/download/$(GOLANGCI_LINT_VERSION)/golangci-lint-$(subst v,,$(GOLANGCI_LINT_VERSION))-$(GOLANGCI_LINT_OS)-$(GOLANGCI_LINT_ARCH).tar.gz && \
tar zxf $(GOLANGCI_LINT_TMP)/golangci-lint.tar.gz --strip-components 1 && \
cp golangci-lint $(DIR)/golangci-lint
@rm -rf $(GOLANGCI_LINT_TMP)
.PHONY: $(BIN)/protoc-gen-go
$(BIN)/protoc-gen-go:
@mkdir -p $(BIN)
go install google.golang.org/protobuf/cmd/protoc-gen-go
# Download the mdbook binary from GitHub releases.
$(BIN)/mdbook: Makefile
$(eval DIR=$(abspath $(BIN)))
@mkdir -p $(DIR)
$(eval MDBOOK_TMP := $(shell mktemp -d))
cd $(MDBOOK_TMP); \
curl -fsSL "https://github.com/rust-lang/mdBook/releases/download/v$(MDBOOK_VERSION)/mdbook-v$(MDBOOK_VERSION)-$(MDBOOK_ARCH)-$(MDBOOK_OS).tar.gz" -o mdbook.tar.gz && \
tar -xzf mdbook.tar.gz && \
mv mdbook $(DIR)/mdbook
@rm -rf "$(MDBOOK_TMP)"
.PHONY: __checknodiffgeneratedinternal
__checknodiffgeneratedinternal:
@echo bash etc/script/checknodiffgenerated.bash make generate
@bash etc/script/checknodiffgenerated.bash $(MAKE) generate