blob: 4918497798a9ee31dd491499406fa4c2c8399149 [file] [log] [blame]
version: 2.1
orbs:
win: circleci/windows@2.2.0
references:
environment: &ENVIRONMENT
TEST_RESULTS_PATH: &TEST_RESULTS_PATH /tmp/test-results
WIN_TEST_RESULTS: &WIN_TEST_RESULTS c:\Users\circleci\AppData\Local\Temp\test-results
commands:
run-gotests:
parameters:
cmd:
type: string
platform:
type: string
steps:
- run:
name: "Run go tests"
command: |
PACKAGE_NAMES=$(go list ./... | circleci tests split --split-by=timings --timings-type=classname)
echo "Running $(echo $PACKAGE_NAMES | wc -w) packages"
echo $PACKAGE_NAMES
<< parameters.cmd >> --format=short-verbose --junitfile $TEST_RESULTS_PATH/go-multierror/gotestsum-report.xml -- -p 2 -cover -coverprofile=<< parameters.platform >>_cov_$CIRCLE_NODE_INDEX.part $PACKAGE_NAMES
jobs:
linux-tests:
docker:
- image: docker.mirror.hashicorp.services/circleci/golang:<< parameters.go-version >>
parameters:
go-version:
type: string
environment:
<<: *ENVIRONMENT
parallelism: 4
steps:
- run: go version
- checkout
- attach_workspace:
at: .
- run: mkdir -p $TEST_RESULTS_PATH/go-multierror
# Restore go module cache if there is one
- restore_cache:
keys:
- linux-gomod-cache-v1-{{ checksum "go.mod" }}
- run: go mod download
# Save go module cache if the go.mod file has changed
- save_cache:
key: linux-gomod-cache-v1-{{ checksum "go.mod" }}
paths:
- "/go/pkg/mod"
# Check go fmt output because it does not report non-zero when there are fmt changes
- run:
name: check go fmt
command: |
files=$(go fmt ./...)
if [ -n "$files" ]; then
echo "The following file(s) do not conform to go fmt:"
echo "$files"
exit 1
fi
# Run go tests with gotestsum
- run-gotests:
cmd: "gotestsum"
platform: "linux"
# Save coverage report parts
- persist_to_workspace:
root: .
paths:
- linux_cov_*.part
- store_test_results:
path: *TEST_RESULTS_PATH
- store_artifacts:
path: *TEST_RESULTS_PATH
windows-tests:
executor:
name: win/default
shell: bash --login -eo pipefail
environment:
<<: *ENVIRONMENT
working_directory: c:\gopath\src\github.com\hashicorp\go-multierror
parameters:
go-version:
type: string
gotestsum-version:
type: string
steps:
- run: git config --global core.autocrlf false
- checkout
- attach_workspace:
at: .
- run:
name: Setup (remove pre-installed go)
command: |
rm -rf "c:\Go"
mkdir -p $TEST_RESULTS_PATH/go-multierror
- restore_cache:
keys:
- win-golang-<< parameters.go-version >>-cache-v1
- win-gomod-cache-{{ checksum "go.mod" }}-v1
- run:
name: Install go version << parameters.go-version >>
command: |
if [ ! -d "c:\go" ]; then
echo "Cache not found, installing new version of go"
curl --fail --location https://dl.google.com/go/go<< parameters.go-version >>.windows-amd64.zip --output go.zip
unzip go.zip -d "/c"
fi
- run:
command: go mod download
- save_cache:
key: win-golang-<< parameters.go-version >>-cache-v1
paths:
- /go
- save_cache:
key: win-gomod-cache-{{ checksum "go.mod" }}-v1
paths:
- c:\Windows\system32\config\systemprofile\go\pkg\mod
- run:
name: Install gotestsum
command: |
curl --fail --location https://github.com/gotestyourself/gotestsum/releases/download/v<< parameters.gotestsum-version >>/gotestsum_<< parameters.gotestsum-version >>_windows_amd64.tar.gz --output gotestsum.tar.gz
tar -xvzf gotestsum.tar.gz
- run-gotests:
cmd: "./gotestsum.exe"
platform: "win"
# Save coverage report parts
- persist_to_workspace:
root: .
paths:
- win_cov_*.part
- store_test_results:
path: *WIN_TEST_RESULTS
- store_artifacts:
path: *WIN_TEST_RESULTS
workflows:
go-multierror:
jobs:
- linux-tests:
matrix:
parameters:
go-version: ["1.13", "1.14", "1.15"]
name: linux-test-go-<< matrix.go-version >>
- windows-tests:
matrix:
parameters:
go-version: ["1.13", "1.14", "1.15"]
gotestsum-version: ["1.6.2"]
name: win-test-go-<< matrix.go-version >>