-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathMakefile
187 lines (160 loc) · 3.77 KB
/
Makefile
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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
.ONESHELL:
SHELL := /bin/bash
ROOT_MODULE_NAME = github.com/xenitab/go-oidc-middleware
TEST_PACKAGES = $(shell go list ./... | grep -v "internal/oidctesting" | grep -v "internal/coverage")
TEST_PACKAGES_CSV = $(shell echo -n $(TEST_PACKAGES) | sed "s/ /,/g")
PKGS = $(shell find ./ -name go.mod | sed "s/go.mod//g" | sort)
PKGS_CLEAN = $(shell find ./ -name go.mod | sed "s/go.mod//g" | grep -v "./examples/" | grep -v "./internal/coverage/" | sort)
RELEASE_MODULES = $(shell find ./ -name go.mod | grep -Ev "^./go.mod$$|^./examples/|^./internal/coverage/" | sed -e "s|^./||g" -e "s|/go.mod$$||g")
.PHONY: all
.SILENT: all
all: tidy lint fmt vet test build-examples
.PHONY: lint
.SILENT: lint
lint:
set -e
ROOT_DIR=$(PWD)
for pkg in $(PKGS_CLEAN); do
(
echo $$pkg: golangci-lint run
cd $$pkg
golangci-lint run -c $${ROOT_DIR}/.golangci.yaml
)
done
.PHONY: fmt
.SILENT: fmt
fmt:
set -e
for pkg in $(PKGS); do
(
echo $$pkg: go fmt
cd $$pkg
go fmt ./...
)
done
.PHONY: tidy
.SILENT: tidy
tidy:
set -e
for pkg in $(PKGS); do
(
echo $$pkg: go mod tidy
cd $$pkg
go mod tidy
)
done
.PHONY: vet
.SILENT: vet
vet:
set -e
for pkg in $(PKGS); do
(
echo $$pkg: go vet
cd $$pkg
go vet ./...
)
done
.SILENT: test
.PHONY: test
test:
set -e
for pkg in $(PKGS_CLEAN); do
(
echo $$pkg: go test
cd $$pkg
go test -timeout 30s -cover ./...
)
done
.SILENT: go-update
.PHONY: go-update
go-update:
set -e
for pkg in $(PKGS); do
(
echo $$pkg: go get -u ./...
cd $$pkg
go mod tidy
go get -u ./...
go mod tidy
)
done
.SILENT: bench
.PHONY: bench
bench:
set -e
ROOT_DIR=$(PWD)
mkdir -p $${ROOT_DIR}/tmp/
echo -n > $${ROOT_DIR}/tmp/bench.txt
for pkg in $(PKGS_CLEAN); do
(
echo $$pkg: go test -bench
cd $$pkg
go test -timeout 4m -run="-" -bench=".*" | tee -a $${ROOT_DIR}/tmp/bench.txt
)
done
.PHONY: cover
.SILENT: cover
cover:
set -e
export GOEXPERIMENT=nocoverageredesign # https://github.com/golang/go/issues/65570
ROOT_DIR=$(PWD)
mkdir -p $${ROOT_DIR}/tmp/
for pkg in $(PKGS_CLEAN); do
(
echo $$pkg: go test -coverprofile
cd $$pkg
PKG_NAME=$$(basename $$(pwd))
if [[ "$${pkg}" == "./" ]]; then
go test -timeout 1m -coverpkg=$(TEST_PACKAGES_CSV) -coverprofile=$${ROOT_DIR}/tmp/$${PKG_NAME}_coverage.out ./...
else
go test -timeout 1m -coverpkg=./...,$(TEST_PACKAGES_CSV) -coverprofile=$${ROOT_DIR}/tmp/$${PKG_NAME}_coverage.out ./...
fi
)
done
echo "mode: set" > $${ROOT_DIR}/tmp/coverage_merged.out
COVERAGE_FILES=$$(find $${ROOT_DIR}/tmp/ -name "*_coverage.out")
for coverage_file in $${COVERAGE_FILES}; do
tail -n +2 $${coverage_file} >> $${ROOT_DIR}/tmp/coverage_merged.out
done
(
cd ./internal/coverage
if [[ $${CI} == "true" ]]; then
go tool cover -func=$${ROOT_DIR}/tmp/coverage_merged.out
else
go tool cover -html=$${ROOT_DIR}/tmp/coverage_merged.out
fi
)
.PHONY: build-examples
.SILENT: build-examples
build-examples:
set -e
cd examples/
go mod tidy
go fmt ./...
go vet ./...
echo build-examples: Start
go build -o ../bin/api ./api
go build -o ../bin/pkce-cli ./pkce-cli
echo build-examples: Success
.PHONY: release-modules
.SILENT: release-modules
release-modules:
set -e
if [[ -z "$${RELEASE_VERSION}" ]]; then
echo The variable RELEASE_VERSION is empty. 1>&2
exit 1
fi
if [[ "$${CI}" != "true" ]]; then
echo release-modules should only be run in CI. 1>&2
exit 1
fi
for module in $(RELEASE_MODULES); do
(
cd $$module
go mod edit -require "$(ROOT_MODULE_NAME)@$${RELEASE_VERSION}"
go mod tidy
git add go.mod
git commit -m "bump $(ROOT_MODULE_NAME) to $${RELEASE_VERSION} in $(ROOT_MODULE_NAME)/$${module}"
git tag --message "$(ROOT_MODULE_NAME)/$${module} $${RELEASE_VERSION}" $${module}/$${RELEASE_VERSION}
)
done