From d79d90386428baeadf7b74dd99ceef03c38df974 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Thu, 18 May 2017 10:48:24 +0200 Subject: [PATCH 1/2] Add test-coverage & codecov target and update circleci Signed-off-by: Vincent Demeester --- .gitignore | 2 ++ Makefile | 13 +++++++++++++ circle.yml | 2 +- dockerfiles/Dockerfile.dev | 2 +- 4 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4a65c2279c..09d363d1ce 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ /build/ cli/winresources/rsrc_386.syso cli/winresources/rsrc_amd64.syso +coverage.txt +profile.out diff --git a/Makefile b/Makefile index 566da5a636..3320659709 100644 --- a/Makefile +++ b/Makefile @@ -14,6 +14,19 @@ clean: test: go test -tags daemon -v $(shell go list ./... | grep -v /vendor/) +.PHONY: test-coverage +test-coverage: + for pkg in $(shell go list ./... | grep -v /vendor/); do \ + go test -tags daemon -v -cover -parallel 8 -coverprofile=profile.out -covermode=atomic $${pkg} || exit 1; \ + if test -f profile.out; then \ + cat profile.out >> coverage.txt && rm profile.out; \ + fi; \ + done + +.PHONY: codecov +codecov: + $(shell curl -s https://codecov.io/bash | bash) + .PHONY: lint lint: gometalinter --config gometalinter.json ./... diff --git a/circle.yml b/circle.yml index e791bb93bf..be160473e1 100644 --- a/circle.yml +++ b/circle.yml @@ -35,7 +35,7 @@ jobs: dockerfile=dockerfiles/Dockerfile.dev echo "COPY . ." >> $dockerfile docker build -f $dockerfile --tag cli-builder . - docker run cli-builder make test + docker run cli-builder make test-coverage codecov - run: name: "Validate Vendor and Code Generation" command: | diff --git a/dockerfiles/Dockerfile.dev b/dockerfiles/Dockerfile.dev index a14ea25f29..2886ed5e1a 100644 --- a/dockerfiles/Dockerfile.dev +++ b/dockerfiles/Dockerfile.dev @@ -1,7 +1,7 @@ FROM golang:1.8-alpine -RUN apk add -U git make bash coreutils +RUN apk add -U git make bash coreutils curl RUN go get github.com/LK4D4/vndr && \ cp /go/bin/vndr /usr/bin && \ From f6d148c632bf4e672baffef9a22ccf502bbd37a0 Mon Sep 17 00:00:00 2001 From: Daniel Nephin Date: Thu, 18 May 2017 10:42:05 -0400 Subject: [PATCH 2/2] Upload coverage report from outside of test container. Signed-off-by: Daniel Nephin --- Makefile | 13 ++----------- circle.yml | 7 +++++-- dockerfiles/Dockerfile.dev | 2 +- scripts/test/unit | 4 ++++ scripts/test/unit-with-coverage | 15 +++++++++++++++ 5 files changed, 27 insertions(+), 14 deletions(-) create mode 100755 scripts/test/unit create mode 100755 scripts/test/unit-with-coverage diff --git a/Makefile b/Makefile index 3320659709..b9180d4e02 100644 --- a/Makefile +++ b/Makefile @@ -12,20 +12,11 @@ clean: # the "-tags daemon" part is temporary .PHONY: test test: - go test -tags daemon -v $(shell go list ./... | grep -v /vendor/) + ./scripts/test/unit $(shell go list ./... | grep -v /vendor/) .PHONY: test-coverage test-coverage: - for pkg in $(shell go list ./... | grep -v /vendor/); do \ - go test -tags daemon -v -cover -parallel 8 -coverprofile=profile.out -covermode=atomic $${pkg} || exit 1; \ - if test -f profile.out; then \ - cat profile.out >> coverage.txt && rm profile.out; \ - fi; \ - done - -.PHONY: codecov -codecov: - $(shell curl -s https://codecov.io/bash | bash) + ./scripts/test/unit-with-coverage .PHONY: lint lint: diff --git a/circle.yml b/circle.yml index be160473e1..dabc4c5aad 100644 --- a/circle.yml +++ b/circle.yml @@ -29,13 +29,16 @@ jobs: docker run --name cross cli-builder make cross docker cp cross:/go/src/github.com/docker/cli/build /work/build - run: - name: "Unit Test" + name: "Unit Test with Coverage" command: | if [ "$CIRCLE_NODE_INDEX" != "2" ]; then exit; fi dockerfile=dockerfiles/Dockerfile.dev echo "COPY . ." >> $dockerfile docker build -f $dockerfile --tag cli-builder . - docker run cli-builder make test-coverage codecov + docker run --name test cli-builder make test-coverage + docker cp test:/go/src/github.com/docker/cli/coverage.txt coverage.txt + apk add -U bash curl + curl -s https://codecov.io/bash | bash - run: name: "Validate Vendor and Code Generation" command: | diff --git a/dockerfiles/Dockerfile.dev b/dockerfiles/Dockerfile.dev index 2886ed5e1a..a14ea25f29 100644 --- a/dockerfiles/Dockerfile.dev +++ b/dockerfiles/Dockerfile.dev @@ -1,7 +1,7 @@ FROM golang:1.8-alpine -RUN apk add -U git make bash coreutils curl +RUN apk add -U git make bash coreutils RUN go get github.com/LK4D4/vndr && \ cp /go/bin/vndr /usr/bin && \ diff --git a/scripts/test/unit b/scripts/test/unit new file mode 100755 index 0000000000..8c2f9c75df --- /dev/null +++ b/scripts/test/unit @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -eu -o pipefail + +go test -tags daemon -v $@ diff --git a/scripts/test/unit-with-coverage b/scripts/test/unit-with-coverage new file mode 100755 index 0000000000..9073e2daf6 --- /dev/null +++ b/scripts/test/unit-with-coverage @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -eu -o pipefail + +for pkg in $(go list ./... | grep -v /vendor/); do + ./scripts/test/unit \ + -cover \ + -coverprofile=profile.out \ + -covermode=atomic \ + ${pkg} + + if test -f profile.out; then + cat profile.out >> coverage.txt + rm profile.out + fi +done