@@ -454,7 +454,9 @@ jobs:
454
454
api-key : ${{ secrets.DATADOG_API_KEY }}
455
455
456
456
test-go-pg :
457
- runs-on : ${{ matrix.os == 'ubuntu-latest' && github.repository_owner == 'coder' && 'depot-ubuntu-22.04-8' || matrix.os }}
457
+ # make sure to adjust NUM_PARALLEL_PACKAGES and NUM_PARALLEL_TESTS below
458
+ # when changing runner sizes
459
+ runs-on : ${{ matrix.os == 'ubuntu-latest' && github.repository_owner == 'coder' && 'depot-ubuntu-22.04-8' || matrix.os && matrix.os == 'macos-latest' && github.repository_owner == 'coder' && 'depot-macos-latest' || matrix.os == 'windows-2022' && github.repository_owner == 'coder' && 'depot-windows-2022-16' || matrix.os }}
458
460
needs : changes
459
461
if : needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
460
462
# This timeout must be greater than the timeout set by `go test` in
@@ -466,28 +468,47 @@ jobs:
466
468
matrix :
467
469
os :
468
470
- ubuntu-latest
471
+ - macos-latest
472
+ - windows-2022
469
473
steps :
470
474
- name : Harden Runner
471
475
uses : step-security/harden-runner@0634a2670c59f64b4a01f0f96f84700a4088b9f0 # v2.12.0
472
476
with :
473
477
egress-policy : audit
474
478
479
+ # macOS indexes all new files in the background. Our Postgres tests
480
+ # create and destroy thousands of databases on disk, and Spotlight
481
+ # tries to index all of them, seriously slowing down the tests.
482
+ - name : Disable Spotlight Indexing
483
+ if : runner.os == 'macOS'
484
+ run : |
485
+ sudo mdutil -a -i off
486
+ sudo mdutil -X /
487
+ sudo launchctl bootout system /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
488
+
489
+ # Set up RAM disks to speed up the rest of the job. This action is in
490
+ # a separate repository to allow its use before actions/checkout.
491
+ - name : Setup RAM Disks
492
+ if : runner.os == 'Windows'
493
+ uses : coder/setup-ramdisk-action@79dacfe70c47ad6d6c0dd7f45412368802641439
494
+
475
495
- name : Checkout
476
496
uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
477
497
with :
478
498
fetch-depth : 1
479
499
480
500
- name : Setup Go
481
501
uses : ./.github/actions/setup-go
502
+ with :
503
+ # Runners have Go baked-in and Go will automatically
504
+ # download the toolchain configured in go.mod, so we don't
505
+ # need to reinstall it. It's faster on Windows runners.
506
+ use-preinstalled-go : ${{ runner.os == 'Windows' }}
507
+ use-temp-cache-dirs : ${{ runner.os == 'Windows' }}
482
508
483
509
- name : Setup Terraform
484
510
uses : ./.github/actions/setup-tf
485
511
486
- # Sets up the ImDisk toolkit for Windows and creates a RAM disk on drive R:.
487
- - name : Setup ImDisk
488
- if : runner.os == 'Windows'
489
- uses : ./.github/actions/setup-imdisk
490
-
491
512
- name : Download Test Cache
492
513
id : download-cache
493
514
uses : ./.github/actions/test-cache/download
@@ -500,14 +521,66 @@ jobs:
500
521
TS_DEBUG_DISCO : " true"
501
522
LC_CTYPE : " en_US.UTF-8"
502
523
LC_ALL : " en_US.UTF-8"
503
- TEST_RETRIES : 2
504
524
shell : bash
505
525
run : |
526
+ if [ "${{ runner.os }}" == "Windows" ]; then
527
+ # Create a temp dir on the R: ramdisk drive for Windows. The default
528
+ # C: drive is extremely slow: https://github.com/actions/runner-images/issues/8755
529
+ mkdir -p "R:/temp/embedded-pg"
530
+ go run scripts/embedded-pg/main.go -path "R:/temp/embedded-pg"
531
+ elif [ "${{ runner.os }}" == "macOS" ]; then
532
+ # Postgres runs faster on a ramdisk on macOS too
533
+ mkdir -p /tmp/tmpfs
534
+ sudo mount_tmpfs -o noowners -s 8g /tmp/tmpfs
535
+ go run scripts/embedded-pg/main.go -path /tmp/tmpfs/embedded-pg
536
+ fi
537
+
538
+ # if macOS, install google-chrome for scaletests
539
+ # As another concern, should we really have this kind of external dependency
540
+ # requirement on standard CI?
541
+ if [ "${{ matrix.os }}" == "macos-latest" ]; then
542
+ brew install google-chrome
543
+ fi
544
+
506
545
# By default Go will use the number of logical CPUs, which
507
546
# is a fine default.
508
547
PARALLEL_FLAG=""
509
548
510
- make test-postgres
549
+ # macOS will output "The default interactive shell is now zsh"
550
+ # intermittently in CI...
551
+ if [ "${{ matrix.os }}" == "macos-latest" ]; then
552
+ touch ~/.bash_profile && echo "export BASH_SILENCE_DEPRECATION_WARNING=1" >> ~/.bash_profile
553
+ fi
554
+
555
+ if [ "${{ runner.os }}" == "Windows" ]; then
556
+ # Our Windows runners have 16 cores.
557
+ # On Windows Postgres chokes up when we have 16x16=256 tests
558
+ # running in parallel, and dbtestutil.NewDB starts to take more than
559
+ # 10s to complete sometimes causing test timeouts. With 16x8=128 tests
560
+ # Postgres tends not to choke.
561
+ NUM_PARALLEL_PACKAGES=8
562
+ NUM_PARALLEL_TESTS=16
563
+ elif [ "${{ runner.os }}" == "macOS" ]; then
564
+ # Our macOS runners have 8 cores. We set NUM_PARALLEL_TESTS to 16
565
+ # because the tests complete faster and Postgres doesn't choke. It seems
566
+ # that macOS's tmpfs is faster than the one on Windows.
567
+ NUM_PARALLEL_PACKAGES=8
568
+ NUM_PARALLEL_TESTS=16
569
+ elif [ "${{ runner.os }}" == "Linux" ]; then
570
+ # Our Linux runners have 8 cores.
571
+ NUM_PARALLEL_PACKAGES=8
572
+ NUM_PARALLEL_TESTS=8
573
+ fi
574
+
575
+ if [ "${{ runner.os }}" == "Linux" ]; then
576
+ make test-postgres
577
+ else
578
+ # We rerun failing tests to counteract flakiness coming from Postgres
579
+ # choking on macOS and Windows sometimes.
580
+ DB=ci gotestsum --rerun-fails=2 --rerun-fails-max-failures=50 \
581
+ --format standard-quiet --packages "./..." \
582
+ -- -v -p $NUM_PARALLEL_PACKAGES -parallel=$NUM_PARALLEL_TESTS -count=1
583
+ fi
511
584
512
585
- name : Upload Test Cache
513
586
uses : ./.github/actions/test-cache/upload
0 commit comments