@@ -370,15 +370,20 @@ jobs:
370
370
api-key : ${{ secrets.DATADOG_API_KEY }}
371
371
372
372
test-go-pg :
373
- runs-on : ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-8' || 'ubuntu-latest' }}
374
- needs :
375
- - changes
373
+ runs-on : ${{ matrix.os == 'ubuntu-latest' && github.repository_owner == 'coder' && 'depot-ubuntu-22.04-4' || matrix.os == 'macos-latest' && github.repository_owner == 'coder' && 'macos-latest-xlarge' || matrix.os == 'windows-2022' && github.repository_owner == 'coder' && 'windows-latest-16-cores' || matrix.os }}
374
+ needs : changes
376
375
if : needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
377
376
# This timeout must be greater than the timeout set by `go test` in
378
377
# `make test-postgres` to ensure we receive a trace of running
379
378
# goroutines. Setting this to the timeout +5m should work quite well
380
379
# even if some of the preceding steps are slow.
381
380
timeout-minutes : 25
381
+ strategy :
382
+ matrix :
383
+ os :
384
+ - ubuntu-latest
385
+ - macos-latest
386
+ - windows-2022
382
387
steps :
383
388
- name : Harden Runner
384
389
uses : step-security/harden-runner@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
@@ -396,12 +401,46 @@ jobs:
396
401
- name : Setup Terraform
397
402
uses : ./.github/actions/setup-tf
398
403
404
+ # Sets up the ImDisk toolkit for Windows and creates a RAM disk on drive R:.
405
+ - name : Setup ImDisk
406
+ if : runner.os == 'Windows'
407
+ uses : ./.github/actions/setup-imdisk
408
+
399
409
- name : Test with PostgreSQL Database
400
410
env :
401
411
POSTGRES_VERSION : " 13"
402
412
TS_DEBUG_DISCO : " true"
413
+ shell : bash
403
414
run : |
404
- make test-postgres
415
+ # if macOS, install google-chrome for scaletests
416
+ # As another concern, should we really have this kind of external dependency
417
+ # requirement on standard CI?
418
+ if [ "${{ matrix.os }}" == "macos-latest" ]; then
419
+ brew install google-chrome
420
+ fi
421
+
422
+ # By default Go will use the number of logical CPUs, which
423
+ # is a fine default.
424
+ PARALLEL_FLAG=""
425
+
426
+ # macOS will output "The default interactive shell is now zsh"
427
+ # intermittently in CI...
428
+ if [ "${{ matrix.os }}" == "macos-latest" ]; then
429
+ touch ~/.bash_profile && echo "export BASH_SILENCE_DEPRECATION_WARNING=1" >> ~/.bash_profile
430
+ fi
431
+
432
+ if [ "${{ runner.os }}" == "Linux" ]; then
433
+ make test-postgres
434
+ elif [ "${{ runner.os }}" == "Windows" ]; then
435
+ # Create a temp dir on the R: ramdisk drive for Windows. The default
436
+ # C: drive is extremely slow: https://github.com/actions/runner-images/issues/8755
437
+ mkdir -p "R:/temp/embedded-pg"
438
+ go run scripts/embedded-pg/main.go -path "R:/temp/embedded-pg"
439
+ DB=ci gotestsum --format standard-quiet -- -v -short -count=1 ./...
440
+ else
441
+ go run scripts/embedded-pg/main.go
442
+ DB=ci gotestsum --format standard-quiet -- -v -short -count=1 ./...
443
+ fi
405
444
406
445
- name : Upload test stats to Datadog
407
446
timeout-minutes : 1
@@ -494,6 +533,47 @@ jobs:
494
533
with :
495
534
api-key : ${{ secrets.DATADOG_API_KEY }}
496
535
536
+ test-go-race-pg :
537
+ runs-on : ${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-16' || 'ubuntu-latest' }}
538
+ needs : changes
539
+ if : needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
540
+ timeout-minutes : 25
541
+ steps :
542
+ - name : Harden Runner
543
+ uses : step-security/harden-runner@91182cccc01eb5e619899d80e4e971d6181294a7 # v2.10.1
544
+ with :
545
+ egress-policy : audit
546
+
547
+ - name : Checkout
548
+ uses : actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1
549
+ with :
550
+ fetch-depth : 1
551
+
552
+ - name : Setup Go
553
+ uses : ./.github/actions/setup-go
554
+
555
+ - name : Setup Terraform
556
+ uses : ./.github/actions/setup-tf
557
+
558
+ # We run race tests with reduced parallelism because they use more CPU and we were finding
559
+ # instances where tests appear to hang for multiple seconds, resulting in flaky tests when
560
+ # short timeouts are used.
561
+ # c.f. discussion on https://github.com/coder/coder/pull/15106
562
+ - name : Run Tests
563
+ env :
564
+ POSTGRES_VERSION : " 16"
565
+ run : |
566
+ make test-postgres-docker
567
+ DB=ci gotestsum --junitfile="gotests.xml" -- -race -parallel 4 -p 4 ./...
568
+
569
+ - name : Upload test stats to Datadog
570
+ timeout-minutes : 1
571
+ continue-on-error : true
572
+ uses : ./.github/actions/upload-datadog
573
+ if : always()
574
+ with :
575
+ api-key : ${{ secrets.DATADOG_API_KEY }}
576
+
497
577
# Tailnet integration tests only run when the `tailnet` directory or `go.sum`
498
578
# and `go.mod` are changed. These tests are to ensure we don't add regressions
499
579
# to tailnet, either due to our code or due to updating dependencies.
@@ -771,6 +851,7 @@ jobs:
771
851
- test-go
772
852
- test-go-pg
773
853
- test-go-race
854
+ - test-go-race-pg
774
855
- test-js
775
856
- test-e2e
776
857
- offlinedocs
@@ -793,6 +874,7 @@ jobs:
793
874
echo "- test-go: ${{ needs.test-go.result }}"
794
875
echo "- test-go-pg: ${{ needs.test-go-pg.result }}"
795
876
echo "- test-go-race: ${{ needs.test-go-race.result }}"
877
+ echo "- test-go-race-pg: ${{ needs.test-go-race-pg.result }}"
796
878
echo "- test-js: ${{ needs.test-js.result }}"
797
879
echo "- test-e2e: ${{ needs.test-e2e.result }}"
798
880
echo "- offlinedocs: ${{ needs.offlinedocs.result }}"
0 commit comments