diff --git a/Makefile b/Makefile index aaf5317fe6..10f07793fb 100644 --- a/Makefile +++ b/Makefile @@ -11,15 +11,15 @@ clean: ## remove build artifacts rm -rf ./build/* cli/winresources/rsrc_* ./man/man[1-9] docs/yaml/gen .PHONY: test-unit -test-unit: ## run unit test - ./scripts/test/unit $(shell go list ./... | grep -vE '/vendor/|/e2e/') +test-unit: ## run unit tests, to change the output format use: GOTESTSUM_FORMAT=(dots|short|standard-quiet|short-verbose|standard-verbose) make test-unit + gotestsum -- $(shell go list ./... | grep -vE '/vendor/|/e2e/') .PHONY: test test: test-unit ## run tests .PHONY: test-coverage test-coverage: ## run test coverage - ./scripts/test/unit-with-coverage $(shell go list ./... | grep -vE '/vendor/|/e2e/') + gotestsum -- -coverprofile=coverage.txt $(shell go list ./... | grep -vE '/vendor/|/e2e/') .PHONY: fmt fmt: diff --git a/circle.yml b/circle.yml index 3b4d9259e9..9895c31799 100644 --- a/circle.yml +++ b/circle.yml @@ -56,11 +56,16 @@ jobs: - run: name: "Unit Test with Coverage" command: | + mkdir test-results docker build -f dockerfiles/Dockerfile.dev --tag cli-builder:$CIRCLE_BUILD_NUM . - docker run --name \ + docker run \ + -e GOTESTSUM_JUNITFILE=/tmp/junit.xml \ + --name \ test-$CIRCLE_BUILD_NUM cli-builder:$CIRCLE_BUILD_NUM \ make test-coverage - + docker cp \ + test-$CIRCLE_BUILD_NUM:/tmp/junit.xml \ + /work/test-results/unit-tests - run: name: "Upload to Codecov" command: | @@ -70,6 +75,8 @@ jobs: apk add -U bash curl curl -s https://codecov.io/bash | bash || \ echo 'Codecov failed to upload' + - store_test_results: + path: test-results validate: working_directory: /work diff --git a/dockerfiles/Dockerfile.dev b/dockerfiles/Dockerfile.dev index af6da4b156..778cec876c 100644 --- a/dockerfiles/Dockerfile.dev +++ b/dockerfiles/Dockerfile.dev @@ -16,6 +16,11 @@ RUN go get -d github.com/mjibson/esc && \ go build -v -o /usr/bin/esc . && \ rm -rf /go/src/* /go/pkg/* /go/bin/* +ARG GOTESTSUM_VERSION=0.3.2 +RUN curl -Ls https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz -o gotestsum.tar.gz && \ + tar -xf gotestsum.tar.gz gotestsum -C /usr/bin && \ + rm gotestsum.tar.gz + ENV CGO_ENABLED=0 \ PATH=$PATH:/go/src/github.com/docker/cli/build \ DISABLE_WARN_OUTSIDE_CONTAINER=1 diff --git a/dockerfiles/Dockerfile.e2e b/dockerfiles/Dockerfile.e2e index eedda3b7f5..ccbcda2d6f 100644 --- a/dockerfiles/Dockerfile.e2e +++ b/dockerfiles/Dockerfile.e2e @@ -24,6 +24,12 @@ ARG NOTARY_VERSION=v0.6.1 RUN curl -Ls https://github.com/theupdateframework/notary/releases/download/${NOTARY_VERSION}/notary-Linux-amd64 -o /usr/local/bin/notary \ && chmod +x /usr/local/bin/notary +ARG GOTESTSUM_VERSION=0.3.2 +RUN curl -Ls https://github.com/gotestyourself/gotestsum/releases/download/v${GOTESTSUM_VERSION}/gotestsum_${GOTESTSUM_VERSION}_linux_amd64.tar.gz -o gotestsum.tar.gz \ + && tar -xf gotestsum.tar.gz gotestsum \ + && mv gotestsum /usr/local/bin/gotestsum \ + && rm gotestsum.tar.gz + ENV CGO_ENABLED=0 \ DISABLE_WARN_OUTSIDE_CONTAINER=1 \ PATH=/go/src/github.com/docker/cli/build:$PATH diff --git a/scripts/test/e2e/run b/scripts/test/e2e/run index d494019419..bdff2ce3e3 100755 --- a/scripts/test/e2e/run +++ b/scripts/test/e2e/run @@ -68,9 +68,9 @@ function runtests { TEST_REMOTE_DAEMON="${REMOTE_DAEMON-}" \ TEST_SKIP_PLUGIN_TESTS="${SKIP_PLUGIN_TESTS-}" \ GOPATH="$GOPATH" \ - PATH="$PWD/build/:/usr/bin" \ + PATH="$PWD/build/:/usr/bin:/usr/local/bin:/usr/local/go/bin" \ DOCKER_CLI_E2E_PLUGINS_EXTRA_DIRS="$PWD/build/plugins-linux-amd64" \ - "$(which go)" test -v ./e2e/... ${TESTFLAGS-} + "$(which gotestsum)" -- ./e2e/... ${TESTFLAGS-} } export unique_id="${E2E_UNIQUE_ID:-cliendtoendsuite}" diff --git a/scripts/test/unit b/scripts/test/unit deleted file mode 100755 index 7eb82d0ff0..0000000000 --- a/scripts/test/unit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -set -eu -o pipefail - -go test -v "$@" diff --git a/scripts/test/unit-with-coverage b/scripts/test/unit-with-coverage deleted file mode 100755 index db2efe7853..0000000000 --- a/scripts/test/unit-with-coverage +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash -set -eu -o pipefail - -# install test dependencies once before running tests for each package. This -# reduces the runtime from 200s down to 23s -go test -i "$@" - -echo "mode: atomic" > coverage.txt -for pkg in "$@"; do - ./scripts/test/unit \ - -cover \ - -coverprofile=profile.out \ - -covermode=atomic \ - "${pkg}" - - if test -f profile.out; then - grep -v "^mode:" < profile.out >> coverage.txt || true - rm profile.out - fi -done