Skip to content

Commit

Permalink
fix issue #87: update make files
Browse files Browse the repository at this point in the history
  • Loading branch information
kamilsk committed Oct 10, 2017
1 parent 038fd57 commit 2772a63
Show file tree
Hide file tree
Showing 10 changed files with 236 additions and 118 deletions.
66 changes: 16 additions & 50 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,47 +1,29 @@
OPEN_BROWSER =
SUPPORTED_VERSIONS = 1.5 1.6 1.7 1.8 1.9 latest

include makes/env.mk
include makes/local.mk
include makes/docker.mk

OPEN_BROWSER =
SUPPORTED_VERSIONS ?= 1.5 1.6 1.7 1.8 latest

.PHONY: check-code-quality
check-code-quality: ARGS = --vendor --deadline=1m ./...
check-code-quality: ARGS = \
--exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$' \
--exclude='duplicate of.*_test.go.*\(dupl\)$' \
--vendor --deadline=2m ./...
check-code-quality: docker-tool-gometalinter

.PHONY: complex-bench
complex-bench: ARGS = -benchmem
complex-bench: docker-bench-1.5
complex-bench: docker-bench-1.6
complex-bench: docker-bench-1.7
complex-bench: docker-bench-1.8
complex-bench: docker-bench-latest

.PHONY: complex-tests
complex-tests: ARGS = -timeout=1s
complex-tests: docker-test-1.5
complex-tests: docker-test-1.6
complex-tests: docker-test-1.7
complex-tests: docker-test-1.8
complex-tests: docker-test-latest

.PHONY: complex-tests-with-coverage
complex-tests-with-coverage: ARGS = -timeout=1s
complex-tests-with-coverage: docker-test-with-coverage-1.5
complex-tests-with-coverage: docker-test-with-coverage-1.6
complex-tests-with-coverage: docker-test-with-coverage-1.7
complex-tests-with-coverage: docker-test-with-coverage-1.8
complex-tests-with-coverage: docker-test-with-coverage-latest
.PHONY: cmd-test
cmd-test:
docker run --rm \
-v '$(GOPATH)/src/$(GO_PACKAGE)':'/go/src/$(GO_PACKAGE)' \
-w '/go/src/$(GO_PACKAGE)' \
golang:1.7 \
/bin/sh -c 'go install -ldflags "-X 'main.Version=test'" ./cmd/retry \
&& retry -limit=3 -backoff=lin{10ms} -- /bin/sh -c "echo 'trying...'; exit 1"'


.PHONY: docker-pull
docker-pull: docker-pull-1.5
docker-pull: docker-pull-1.6
docker-pull: docker-pull-1.7
docker-pull: docker-pull-1.8
docker-pull: docker-pull-latest
docker-pull: docker-pull-tools
docker-pull: PRUNE = --force
docker-pull: docker-clean

.PHONY: pull-github-tpl
pull-github-tpl:
Expand All @@ -55,19 +37,3 @@ pull-makes:
rm -rf makes
(git clone git@github.com:kamilsk/shared.git makes && cd makes && git checkout makefile-go-v1 \
&& echo 'makes at revision' $$(git rev-parse HEAD) && rm -rf .git)

.PHONY: research
research: COMMAND = -y research.yml install
research: ARGS = --strip-vendor
research: docker-tool-glide
research:
rm -rf .glide

.PHONY: test-cmd
test-cmd:
docker run --rm \
-v '$(GOPATH)/src/$(GO_PACKAGE)':'/go/src/$(GO_PACKAGE)' \
-w '/go/src/$(GO_PACKAGE)' \
golang:1.7 \
/bin/sh -c 'go install -ldflags "-X 'main.Version=test'" ./cmd/retry \
&& retry -limit=3 -backoff=lin{10ms} -- /bin/sh -c "echo 'trying...'; exit 1"'
8 changes: 3 additions & 5 deletions makes/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
SUPPORTED_VERSIONS ?= 1.5 1.6 1.7 1.8 latest

include env.mk
include docker/alpine.mk
include docker/tools.mk
include local.mk
include docker.mk
include docker/hugo.mk

ARGS = a

Expand All @@ -18,6 +19,3 @@ test1:
test2: override ARGS += 2
test2:
echo $(ARGS)

test3:
echo $(GITHUB_TOKEN)
11 changes: 11 additions & 0 deletions makes/docker.mk
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,14 @@ include $(CID)/docker/base.mk
include $(CID)/docker/clean.mk
include $(CID)/docker/tools.mk
include $(CID)/docker/experimental-tools.mk

.PHONY: docker-pull
define docker_pull_tpl
docker-pull: docker-pull-$(1)
endef
docker-pull: docker-pull-tools
docker-pull: PRUNE = --force
docker-pull: docker-clean

render_docker_pull_tpl = $(eval $(call docker_pull_tpl,$(version)))
$(foreach version,$(SUPPORTED_VERSIONS),$(render_docker_pull_tpl))
14 changes: 11 additions & 3 deletions makes/docker/alpine.mk
Original file line number Diff line number Diff line change
@@ -1,30 +1,35 @@
define docker_alpine_tpl

.PHONY: docker-pull-$(1)
docker-pull-$(1):
docker pull golang:$(1)

.PHONY: docker-in-$(1)
docker-in-$(1):
docker run --rm -it \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh


.PHONY: docker-bench-$(1)
docker-bench-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go test -bench=. $$(strip $$(ARGS))'

.PHONY: docker-pull-$(1)
docker-pull-$(1):
docker pull golang:$(1)

.PHONY: docker-test-$(1)
docker-test-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go test $$(strip $$(ARGS))'

Expand All @@ -33,15 +38,18 @@ docker-test-check-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go test -run=^hack $$(strip $$(ARGS))'


.PHONY: docker-docs-$(1)
docker-docs-$(1):
docker run -d --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-p 127.0.0.1:8080:8080 \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
godoc -play -http :8080
sleep 2
Expand Down
84 changes: 78 additions & 6 deletions makes/docker/base.mk
Original file line number Diff line number Diff line change
@@ -1,31 +1,43 @@
COMPLEX_BENCH_ARGS ?= -benchmem
COMPLEX_TESTS_ARGS ?= -timeout=1s
COMPLEX_TESTS_WITH_COVERAGE_ARGS ?= $(COMPLEX_TESTS_ARGS)
PARALLEL_BENCH_ARGS ?= $(COMPLEX_BENCH_ARGS)
PARALLEL_TESTS_ARGS ?= $(COMPLEX_TESTS_ARGS)
PARALLEL_TESTS_WITH_COVERAGE_ARGS ?= $(COMPLEX_TESTS_WITH_COVERAGE_ARGS)

define docker_base_tpl

.PHONY: docker-pull-$(1)
docker-pull-$(1):
docker pull golang:$(1)

.PHONY: docker-in-$(1)
docker-in-$(1):
docker run --rm -it \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh


.PHONY: docker-bench-$(1)
docker-bench-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go get -d -t && \
$$(PACKAGES) | xargs go test -bench=. $$(strip $$(ARGS))'

.PHONY: docker-pull-$(1)
docker-pull-$(1):
docker pull golang:$(1)

.PHONY: docker-test-$(1)
docker-test-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go get -d -t && \
$$(PACKAGES) | xargs go test -race $$(strip $$(ARGS))'
Expand All @@ -35,6 +47,7 @@ docker-test-check-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go get -d -t && \
$$(PACKAGES) | xargs go test -run=^hack $$(strip $$(ARGS))'
Expand All @@ -44,24 +57,29 @@ docker-test-with-coverage-$(1):
docker run --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
/bin/sh -c '$$(PACKAGES) | xargs go get -d -t; \
echo "mode: $${GO_TEST_COVERAGE_MODE}" > '$$@.out'; \
for package in $$$$($$(PACKAGES)); do \
go test -covermode '$${GO_TEST_COVERAGE_MODE}' \
-coverprofile "coverage_$$$${package##*/}.out" \
$$(strip $$(ARGS)) "$$$${package}"; \
sed '1d' "coverage_$$$${package##*/}.out" >> '$$@.out'; \
rm "coverage_$$$${package##*/}.out"; \
if [ -f "coverage_$$$${package##*/}.out" ]; then \
sed '1d' "coverage_$$$${package##*/}.out" >> '$$@.out'; \
rm "coverage_$$$${package##*/}.out"; \
fi \
done'
if [ '$${OPEN_BROWSER}' != '' ]; then go tool cover -html='$$@.out'; fi
if [ ! -z '$${OPEN_BROWSER}' ]; then go tool cover -html='$$@.out'; fi


.PHONY: docker-docs-$(1)
docker-docs-$(1):
docker run -d --rm \
-v '$${GOPATH}/src/$${GO_PACKAGE}':'/go/src/$${GO_PACKAGE}' \
-w '/go/src/$${GO_PACKAGE}' \
-p 127.0.0.1:8080:8080 \
-e GO15VENDOREXPERIMENT=1 \
golang:$(1) \
godoc -play -http :8080
sleep 2
Expand All @@ -75,3 +93,57 @@ endef

render_docker_base_tpl = $(eval $(call docker_base_tpl,$(version)))
$(foreach version,$(SUPPORTED_VERSIONS),$(render_docker_base_tpl))

.PHONY: complex-bench
complex-bench: ARGS = $(COMPLEX_BENCH_ARGS)
define complex_bench_tpl
complex-bench: docker-bench-$(1)
endef

render_complex_bench_tpl = $(eval $(call complex_bench_tpl,$(version)))
$(foreach version,$(SUPPORTED_VERSIONS),$(render_complex_bench_tpl))

.PHONY: complex-tests
complex-tests: ARGS = $(COMPLEX_TESTS_ARGS)
define complex_tests_tpl
complex-tests: docker-test-$(1)
endef

render_complex_tests_tpl = $(eval $(call complex_tests_tpl,$(version)))
$(foreach version,$(SUPPORTED_VERSIONS),$(render_complex_tests_tpl))

.PHONY: complex-tests-with-coverage
complex-tests-with-coverage: ARGS = $(COMPLEX_TESTS_WITH_COVERAGE_ARGS)
define complex_tests_with_coverage_tpl
complex-tests-with-coverage: docker-test-with-coverage-$(1)
endef

render_complex_tests_with_coverage_tpl = $(eval $(call complex_tests_with_coverage_tpl,$(version)))
$(foreach version,$(SUPPORTED_VERSIONS),$(render_complex_tests_with_coverage_tpl))

.PHONY: parallel-bench
parallel-bench: ARGS = $(PARALLEL_BENCH_ARGS)
parallel-bench:
semaphore create
for v in $(SUPPORTED_VERSIONS); do \
semaphore add -- make docker-bench-$$v ARGS=$(ARGS); \
done
semaphore wait

.PHONY: parallel-tests
parallel-tests: ARGS = $(PARALLEL_TESTS_ARGS)
parallel-tests:
semaphore create
for v in $(SUPPORTED_VERSIONS); do \
semaphore add -- make docker-test-$$v ARGS=$(ARGS); \
done
semaphore wait

.PHONY: parallel-tests-with-coverage
parallel-tests-with-coverage: ARGS = $(PARALLEL_TESTS_WITH_COVERAGE_ARGS)
parallel-tests-with-coverage:
semaphore create
for v in $(SUPPORTED_VERSIONS); do \
semaphore add -- make docker-test-with-coverage-$$v ARGS=$(ARGS); \
done
semaphore wait
24 changes: 13 additions & 11 deletions makes/docker/clean.mk
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,41 @@ PRUNE_AVAILABLE := $(shell echo "1.13.0\n$(DOCKER_VERSION)" | sort -ct. -k1,1n -

.PHONY: docker-clean
docker-clean: docker-clean-invalid-common
docker-clean: docker-clean-invalid-exp
docker-clean: docker-clean-invalid-golang
docker-clean: docker-clean-invalid-custom
docker-clean: docker-clean-invalid-tools
docker-clean:
if [ '${PRUNE}' != '' ] && [ '${PRUNE_AVAILABLE}' == 'true' ]; then docker system prune $(strip $(PRUNE)); fi
docker-clean: #| Removes all invalid docker images (common, golang, kamilsk/go-experiments|tools).
#| Accepts: PRUNE.
#| Uses: PRUNE_AVAILABLE.
if [ ! -z '${PRUNE}' ] && [ '${PRUNE_AVAILABLE}' == 'true' ]; then docker system prune $(strip $(PRUNE)); fi

.PHONY: docker-clean-invalid-common
docker-clean-invalid-common:
docker-clean-invalid-common: #| Removes all invalid common docker images.
docker images --all \
| grep '^<none>\s\+' \
| awk '{print $$3}' \
| xargs docker rmi -f &>/dev/null || true

.PHONY: docker-clean-invalid-golang
docker-clean-invalid-golang:
.PHONY: docker-clean-invalid-exp
docker-clean-invalid-exp: #| Removes all invalid kamilsk/go-experiments docker images.
docker images --all \
| grep '^golang\s\+' \
| grep '^kamilsk\/go-experiments\s\+' \
| awk '{print $$2 "\t" $$3}' \
| grep '^<none>\s\+' \
| awk '{print $$2}' \
| xargs docker rmi -f &>/dev/null || true

.PHONY: docker-clean-invalid-custom
docker-clean-invalid-custom:
.PHONY: docker-clean-invalid-golang
docker-clean-invalid-golang: #| Removes all invalid golang docker images.
docker images --all \
| grep '^kamilsk\/golang\s\+' \
| grep '^golang\s\+' \
| awk '{print $$2 "\t" $$3}' \
| grep '^<none>\s\+' \
| awk '{print $$2}' \
| xargs docker rmi -f &>/dev/null || true

.PHONY: docker-clean-invalid-tools
docker-clean-invalid-tools:
docker-clean-invalid-tools: #| Removes all invalid kamilsk/go-tools docker images.
docker images --all \
| grep '^kamilsk\/go-tools\s\+' \
| awk '{print $$2 "\t" $$3}' \
Expand Down
Loading

0 comments on commit 2772a63

Please sign in to comment.