From 71c908974c49d8f74d65350a13fc252e3d573428 Mon Sep 17 00:00:00 2001 From: Ammar Bandukwala Date: Fri, 9 Jun 2023 16:46:44 -0500 Subject: [PATCH] ci: improve caching (#7943) --- .github/actions/setup-go/action.yaml | 24 ++++++++++++++++++++++++ .github/workflows/ci.yaml | 19 +++++++++++-------- Makefile | 4 ++-- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/.github/actions/setup-go/action.yaml b/.github/actions/setup-go/action.yaml index e54bcf36a9..f286334855 100644 --- a/.github/actions/setup-go/action.yaml +++ b/.github/actions/setup-go/action.yaml @@ -8,8 +8,32 @@ runs: with: cache: true go-version: "1.20.5" + + - name: Cache go + uses: buildjet/cache@v3 + with: + # ~/go/pkg is the same across operating systems. + path: | + ~/go/pkg + ~/.cache/go-build + ~/AppData/Local/go-build + ~/Library/Caches/go-build + # Job name must be included in the key for effective + # test cache reuse. + key: go-${{ runner.os }}-${{ github.job }}-${{ hashFiles('**/*.go', 'go.**') }} + restore-keys: | + go-${{ runner.os }}-${{ github.job }}- + go-${{ runner.os }}- + go- + - name: Install gotestsum uses: jaxxstorm/action-install-gh-release@v1.10.0 with: repo: gotestyourself/gotestsum tag: v1.9.0 + + # It isn't necessary that we ever do this, but it helps + # separate the "setup" from the "run" times. + - name: go mod download + shell: bash + run: go mod download -x diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 9941112481..52fbd149bc 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -218,8 +218,18 @@ jobs: echo "cover=false" >> $GITHUB_OUTPUT fi + # By default Go will use the number of logical CPUs, which + # is a fine default. + PARALLEL_FLAG="" + if [ "${{ matrix.os }}" == "windows-2019" ]; then + # Windows appears more I/O bound, so we increase parallelism + # to make better use of CPU. + PARALLEL_FLAG="-parallel=16" + fi + export TS_DEBUG_DISCO=true - gotestsum --junitfile="gotests.xml" --jsonfile="gotests.json" --packages="./..." -- -parallel=8 -timeout=7m -short -failfast $COVERAGE_FLAGS + gotestsum --junitfile="gotests.xml" --jsonfile="gotests.json" \ + --packages="./..." -- $PARALLEL_FLAG -short -failfast $COVERAGE_FLAGS - name: Print test stats if: success() || failure() @@ -228,13 +238,6 @@ jobs: # so we need to print the test stats to the log. go run ./scripts/ci-report/main.go gotests.json | tee gotests_stats.json - - uses: actions/upload-artifact@v3 - if: success() || failure() - with: - name: gotests-${{ matrix.os }}.xml - path: ./gotests.xml - retention-days: 30 - - uses: ./.github/actions/upload-datadog if: always() with: diff --git a/Makefile b/Makefile index 920c6b6816..00af393287 100644 --- a/Makefile +++ b/Makefile @@ -610,6 +610,7 @@ test: test-clean # When updating -timeout for this test, keep in sync with # test-go-postgres (.github/workflows/coder.yaml). +# Do add coverage flags so that test caching works. test-postgres: test-clean test-postgres-docker # The postgres test is prone to failure, so we limit parallelism for # more consistent execution. @@ -617,8 +618,7 @@ test-postgres: test-clean test-postgres-docker --junitfile="gotests.xml" \ --jsonfile="gotests.json" \ --packages="./..." -- \ - -covermode=atomic -coverprofile="gotests.coverage" -timeout=20m \ - -coverpkg=./... \ + -timeout=20m \ -failfast .PHONY: test-postgres