diff --git a/.circleci/config.yml b/.circleci/config.yml index 02fb797700..c2d09266a4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -39,8 +39,14 @@ steps: environment: GOTESTSUM_RELEASE: 1.6.4 command: | + ARCH=`uname -m` + if [[ "$ARCH" == "aarch64" ]]; then + ARCH="arm64" + else + ARCH="amd64" + fi url=https://github.com/gotestyourself/gotestsum/releases/download - curl -sSL "${url}/v${GOTESTSUM_RELEASE}/gotestsum_${GOTESTSUM_RELEASE}_linux_amd64.tar.gz" | \ + curl -sSL "${url}/v${GOTESTSUM_RELEASE}/gotestsum_${GOTESTSUM_RELEASE}_linux_${ARCH}.tar.gz" | \ sudo tar -xz --overwrite -C /usr/local/bin gotestsum get-aws-cli: &get-aws-cli @@ -105,6 +111,54 @@ commands: echo "export AWS_SECRET_ACCESS_KEY=$(echo $CREDENTIALS | jq -r '.SecretAccessKey')" >> $BASH_ENV echo "export AWS_SESSION_TOKEN=$(echo $CREDENTIALS | jq -r '.SessionToken')" >> $BASH_ENV + run-go-test-full: + parameters: + go_test_flags: + type: string + default: "" + steps: + - attach_workspace: + at: /home/circleci/go/bin + - run: sudo apt-get update --allow-releaseinfo-change-suite --allow-releaseinfo-change-version && sudo apt-get install -y rsyslog + - run: sudo service rsyslog start + - run: go mod download + - run: + name: go test + command: | + mkdir -p $TEST_RESULTS_DIR /tmp/jsonfile + PACKAGE_NAMES=$(go list -tags "$GOTAGS" ./... | circleci tests split --split-by=timings --timings-type=classname) + echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" + echo $PACKAGE_NAMES + # some tests expect this umask, and arm images have a different default + umask 0022 + + << parameters.go_test_flags >> + + gotestsum \ + --format=short-verbose \ + --jsonfile /tmp/jsonfile/go-test-${CIRCLE_NODE_INDEX}.log \ + --debug \ + --rerun-fails=3 \ + --rerun-fails-max-failures=40 \ + --rerun-fails-report=/tmp/gotestsum-rerun-fails \ + --packages="$PACKAGE_NAMES" \ + --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \ + -tags="$GOTAGS" -p 2 \ + ${GO_TEST_FLAGS-} \ + -cover -coverprofile=coverage.txt + + - store_test_results: + path: *TEST_RESULTS_DIR + - store_artifacts: + path: *TEST_RESULTS_DIR + - store_artifacts: + path: /tmp/jsonfile + - run: &rerun-fails-report + name: "Re-run fails report" + command: | + .circleci/scripts/rerun-fails-report.sh /tmp/gotestsum-rerun-fails + - run: *notify-slack-failure + jobs: # lint consul tests lint-consul-retry: @@ -194,6 +248,32 @@ jobs: exit 1 fi + go-test-arm64: + machine: + image: ubuntu-2004:202101-01 + resource_class: arm.medium + parallelism: 4 + environment: + <<: *ENVIRONMENT + GOTAGS: "" # No tags for OSS but there are for enterprise + # GOMAXPROCS defaults to number of cores on underlying hardware, set + # explicitly to avoid OOM issues https://support.circleci.com/hc/en-us/articles/360034684273-common-GoLang-memory-issues + GOMAXPROCS: 4 + steps: + - checkout + - run: + command: | + sudo rm -rf /usr/local/go + wget https://golang.org/dl/go1.17.5.linux-arm64.tar.gz + sudo tar -C /usr/local -xzvf go1.17.5.linux-arm64.tar.gz + - run: *install-gotestsum + - run: go mod download + - run: + name: make dev + command: if [[ "$CIRCLE_BRANCH" =~ ^main$|^release/ ]]; then make dev; fi + - run-go-test-full: + go_test_flags: 'if ! [[ "$CIRCLE_BRANCH" =~ ^main$|^release/ ]]; then export GO_TEST_FLAGS="-short"; fi' + go-test: docker: - image: *GOLANG_IMAGE @@ -204,46 +284,9 @@ jobs: # GOMAXPROCS defaults to number of cores on underlying hardware, set # explicitly to avoid OOM issues https://support.circleci.com/hc/en-us/articles/360034684273-common-GoLang-memory-issues GOMAXPROCS: 4 - # The medium resource class (default) boxes are 2 vCPUs, 4GB RAM - # https://circleci.com/docs/2.0/configuration-reference/#docker-executor - # but we can run a little over that limit. steps: - checkout - - attach_workspace: - at: /home/circleci/go/bin - - run: sudo apt-get update --allow-releaseinfo-change-suite --allow-releaseinfo-change-version && sudo apt-get install -y rsyslog - - run: sudo service rsyslog start - - run: go mod download - - run: - name: go test - command: | - mkdir -p $TEST_RESULTS_DIR /tmp/jsonfile - PACKAGE_NAMES=$(go list -tags "$GOTAGS" ./... | circleci tests split --split-by=timings --timings-type=classname) - echo "Running $(echo $PACKAGE_NAMES | wc -w) packages" - echo $PACKAGE_NAMES - gotestsum \ - --format=short-verbose \ - --jsonfile /tmp/jsonfile/go-test-${CIRCLE_NODE_INDEX}.log \ - --debug \ - --rerun-fails=3 \ - --rerun-fails-max-failures=40 \ - --rerun-fails-report=/tmp/gotestsum-rerun-fails \ - --packages="$PACKAGE_NAMES" \ - --junitfile $TEST_RESULTS_DIR/gotestsum-report.xml -- \ - -tags="$GOTAGS" -p 2 \ - -cover -coverprofile=coverage.txt - - - store_test_results: - path: *TEST_RESULTS_DIR - - store_artifacts: - path: *TEST_RESULTS_DIR - - store_artifacts: - path: /tmp/jsonfile - - run: &rerun-fails-report - name: "Re-run fails report" - command: | - .circleci/scripts/rerun-fails-report.sh /tmp/gotestsum-rerun-fails - - run: *notify-slack-failure + - run-go-test-full go-test-race: docker: @@ -1016,6 +1059,7 @@ workflows: go-arch: "386" <<: *filter-ignore-non-go-branches - test-connect-ca-providers: *filter-ignore-non-go-branches + - go-test-arm64: *filter-ignore-non-go-branches - dev-build: *filter-ignore-non-go-branches - go-test: requires: [dev-build]