44# #### contents into ../Makefile and commenting out the include and adding a
55# #### comment about what you did and why.
66
7-
8- .PHONY : all build test push clean container-clean bin-clean version static govendor gofmt govet golint golangci-lint container
7+ DOCKERBUILDCMD =docker run -t --rm -u $(shell id -u) :$(shell id -g) \
8+ -v "$(S ) $$PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) " \
9+ -v "$(S ) $$PWD:/workdir$(DOCKERMOUNTFLAG ) " \
10+ -e CGO_ENABLED=0 \
11+ -e GOOS=$@ \
12+ -w $(S ) /workdir \
13+ $(BUILD_IMAGE )
14+
15+ DOCKERTESTCMD =docker run -t --rm -u $(shell id -u) :$(shell id -g) \
16+ -v "$(S ) $$PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) " \
17+ -v "$(S ) $$PWD:/workdir$(DOCKERMOUNTFLAG ) " \
18+ -w $(S ) /workdir \
19+ $(BUILD_IMAGE )
20+
21+ .PHONY : all build test push clean container-clean bin-clean version static gofmt govet golint golangci-lint container
922GOTMP =.gotmp
1023
1124SHELL = /bin/bash
@@ -14,7 +27,7 @@ GOFILES = $(shell find $(SRC_DIRS) -name "*.go")
1427
1528BUILD_OS = $(shell go env GOHOSTOS)
1629
17- BUILD_IMAGE ?= drud/golang-build-container:v1.11
30+ BUILD_IMAGE ?= drud/golang-build-container:v1.11.4.2
1831
1932BUILD_BASE_DIR ?= $$PWD
2033
@@ -35,6 +48,11 @@ VERSION_LDFLAGS := $(foreach v,$(VERSION_VARIABLES),-X "$(PKG)/pkg/version.$(v)=
3548LDFLAGS := -extldflags -static $(VERSION_LDFLAGS )
3649DOCKERMOUNTFLAG := :delegated
3750
51+ # In go 1.11 -mod=vendor is not autodetected; it probably will be in 1.12
52+ # See https://github.com/golang/go/issues/27227
53+ USEMODVENDOR := $(shell if [ -d vendor ]; then echo "-mod=vendor"; fi)
54+
55+
3856PWD =$(shell pwd)
3957S =
4058ifeq ($(BUILD_OS ) ,windows)
@@ -47,143 +65,70 @@ build: $(BUILD_OS)
4765
4866linux darwin windows : $(GOFILES )
4967 @echo " building $@ from $( SRC_AND_UNDER) "
50- @$(shell rm -f VERSION.txt)
51- @$(shell mkdir -p bin/$@ $(GOTMP ) /{std/$@ ,bin,src/$(PKG ) })
52- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
53- -v " $( S) $$ PWD/$( GOTMP) :/go$( DOCKERMOUNTFLAG) " \
54- -v " $( S) $$ PWD:/go/src/$( PKG) $( DOCKERMOUNTFLAG) " \
55- -v " $( S) $$ PWD/bin/$@ :/go/bin$( DOCKERMOUNTFLAG) " \
56- -v " $( S) $$ PWD/bin/$@ :/go/bin/$@ $( DOCKERMOUNTFLAG) " \
57- -v " $( S) $$ PWD/$( GOTMP) /std/$@ :/usr/local/go/pkg/$@ _amd64_static$( DOCKERMOUNTFLAG) " \
58- -e CGO_ENABLED=0 \
59- -e GOOS=$@ \
60- -w $(S ) /go/src/$(PKG ) \
61- $(BUILD_IMAGE ) \
62- go install -installsuffix static -ldflags ' $(LDFLAGS) ' $(SRC_AND_UNDER)
68+ @mkdir -p $(GOTMP ) /{.cache,pkg,src,bin}
69+ @$(DOCKERBUILDCMD ) \
70+ go install $(USEMODVENDOR) -installsuffix static -ldflags ' $(LDFLAGS) ' $(SRC_AND_UNDER)
6371 @$(shell touch $@)
72+ $( shell if [ -d $(GOTMP) ]; then chmod -R u+w $(GOTMP); fi )
6473 @echo $(VERSION) >VERSION.txt
6574
66- govendor :
67- @echo -n " Using govendor to check for missing dependencies and unused dependencies: "
68- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
69- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
70- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
71- -w $(S ) /go/src/$(PKG ) \
72- $(BUILD_IMAGE ) \
73- bash -c ' OUT=$$(govendor list +missing +unused); if [ -n "$$OUT" ]; then echo "$$OUT"; exit 1; fi'
74-
7575gofmt :
7676 @echo " Checking gofmt: "
77- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
78- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
79- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
80- -w $(S ) /go/src/$(PKG ) \
81- $(BUILD_IMAGE ) \
77+ @$(DOCKERTESTCMD ) \
8278 bash -c ' export OUT=$$(gofmt -l $(SRC_DIRS)) && if [ -n "$$OUT" ]; then echo "These files need gofmt -w: $$OUT"; exit 1; fi'
8379
8480govet :
8581 @echo " Checking go vet: "
86- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
87- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
88- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
89- -w $S /go/src/$(PKG ) \
90- $(BUILD_IMAGE ) \
82+ @$(DOCKERTESTCMD ) \
9183 bash -c ' go vet $(SRC_AND_UNDER)'
9284
9385golint :
9486 @echo " Checking golint: "
95- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
96- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
97- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
98- -w $(S ) /go/src/$(PKG ) \
99- $(BUILD_IMAGE ) \
87+ @$(DOCKERTESTCMD ) \
10088 bash -c ' export OUT=$$(golint $(SRC_AND_UNDER)) && if [ -n "$$OUT" ]; then echo "Golint problems discovered: $$OUT"; exit 1; fi'
10189
10290errcheck :
10391 @echo " Checking errcheck: "
104- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
105- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
106- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
107- -w $(S ) /go/src/$(PKG ) \
108- $(BUILD_IMAGE ) \
92+ @$(DOCKERTESTCMD ) \
10993 errcheck $(SRC_AND_UNDER )
11094
11195staticcheck :
11296 @echo " Checking staticcheck: "
113- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
114- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
115- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
116- -w $(S ) /go/src/$(PKG ) \
117- $(BUILD_IMAGE ) \
97+ @$(DOCKERTESTCMD ) \
11898 staticcheck $(SRC_AND_UNDER )
11999
120- unused :
121- @echo " Checking unused variables and functions: "
122- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
123- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
124- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
125- -w $(S ) /go/src/$(PKG ) \
126- $(BUILD_IMAGE ) \
127- unused $(SRC_AND_UNDER )
128-
129- codecoroner :
130- @echo " Checking codecoroner for unused functions: "
131- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
132- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
133- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
134- -w $(S ) /go/src/$(PKG ) \
135- $(BUILD_IMAGE ) \
136- bash -c ' OUT=$$(codecoroner -tests -ignore vendor funcs $(SRC_AND_UNDER)); if [ -n "$$OUT" ]; then echo "$$OUT"; exit 1; fi' \
137-
138-
139100varcheck :
140101 @echo " Checking unused globals and struct members: "
141- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
142- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
143- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
144- -w $(S ) /go/src/$(PKG ) \
145- $(BUILD_IMAGE ) \
146- varcheck $(SRC_AND_UNDER ) && structcheck $(SRC_AND_UNDER )
102+ @$(DOCKERTESTCMD ) \
103+ bash -c " varcheck $( SRC_AND_UNDER) && structcheck $( SRC_AND_UNDER) "
147104
148105misspell :
149106 @echo " Checking for misspellings: "
150- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
151- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
152- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
153- -w $(S ) /go/src/$(PKG ) \
154- $(BUILD_IMAGE ) \
107+ @$(DOCKERTESTCMD ) \
155108 misspell $(SRC_DIRS )
156109
157110gometalinter :
158111 @echo " gometalinter: "
159- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
160- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
161- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
162- -w $(S ) /go/src/$(PKG ) \
163- $(BUILD_IMAGE ) \
112+ @$(DOCKERTESTCMD ) \
164113 time gometalinter $(GOMETALINTER_ARGS ) $(SRC_AND_UNDER )
165114
166115golangci-lint :
167116 @echo " golangci-lint: "
168- @docker run -t --rm -u $(shell id -u) :$(shell id -g) \
169- -v $(S ) $$ PWD/$(GOTMP ) :/go$(DOCKERMOUNTFLAG ) \
170- -v $(S ) $$ PWD:/go/src/$(PKG )$(DOCKERMOUNTFLAG ) \
171- -w $(S ) /go/src/$(PKG ) \
172- $(BUILD_IMAGE ) \
117+ @$(DOCKERTESTCMD ) \
173118 time bash -c " golangci-lint run $( GOLANGCI_LINT_ARGS) $( SRC_AND_UNDER) "
174119
175120version :
176121 @echo VERSION:$(VERSION )
177122
178123clean : container-clean bin-clean
179- @go clean -cache || echo " You're not running latest golang locally" # Make sure the local go cache is clean for testing
180124
181125container-clean :
182126 @if docker image inspect $(DOCKER_REPO ) :$(VERSION ) > /dev/null 2>&1 ; then docker rmi -f $(DOCKER_REPO ) :$(VERSION ) ; fi
183127 @rm -rf .container-* .dockerfile* .push-* linux darwin windows container VERSION.txt .docker_image
184128
185129bin-clean :
186- $(shell rm -rf $(GOTMP ) bin .tmp)
130+ @rm -rf bin
131+ $(shell if [ -d $(GOTMP ) ]; then chmod -R u+w $(GOTMP ) && rm -rf $(GOTMP ) ; fi )
187132
188133# print-ANYVAR prints the expanded variable
189134print-% : ; @echo $* = $($* )
0 commit comments