| version: 2.1 |
| |
| references: |
| images: |
| go: &GOLANG_IMAGE docker.mirror.hashicorp.services/circleci/golang:1.15.3 |
| environments: |
| tmp: &TEST_RESULTS_PATH /tmp/test-results # path to where test results are saved |
| |
| # reusable 'executor' object for jobs |
| executors: |
| go: |
| docker: |
| - image: *GOLANG_IMAGE |
| environment: |
| - TEST_RESULTS: *TEST_RESULTS_PATH |
| |
| jobs: |
| go-test: |
| executor: go |
| steps: |
| - checkout |
| - run: mkdir -p $TEST_RESULTS |
| |
| - restore_cache: # restore cache from dev-build job |
| keys: |
| - go-version-modcache-v1-{{ checksum "go.mod" }} |
| |
| - run: go mod download |
| |
| # Save go module cache if the go.mod file has changed |
| - save_cache: |
| key: go-version-modcache-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: | |
| PACKAGE_NAMES=$(go list ./...) |
| gotestsum --format=short-verbose --junitfile $TEST_RESULTS/gotestsum-report.xml -- $PACKAGE_NAMES |
| - store_test_results: |
| path: *TEST_RESULTS_PATH |
| - store_artifacts: |
| path: *TEST_RESULTS_PATH |
| |
| workflows: |
| version: 2 |
| test-and-build: |
| jobs: |
| - go-test |