@@ -188,7 +188,7 @@ jobs:
188
188
189
189
# Check for any typos
190
190
-name :Check for typos
191
- uses :crate-ci/typos@b74202f74b4346efdbce7801d187ec57b266bac8 # v1.27.3
191
+ uses :crate-ci/typos@2872c382bb9668d4baa5eade234dcbc0048ca2cf # v1.28.2
192
192
with :
193
193
config :.github/workflows/typos.toml
194
194
@@ -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@0080882f6c36860b6ba35c610c98ce87d4e2f26f # v2.10.2
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.
@@ -550,11 +630,8 @@ jobs:
550
630
working-directory :site
551
631
552
632
test-e2e :
553
- # test-e2e fails on 2-core 8GB runners, so we use the 4-core 16GB runner
554
633
runs-on :${{ github.repository_owner == 'coder' && 'depot-ubuntu-22.04-4' || 'ubuntu-latest' }}
555
634
needs :changes
556
- if :needs.changes.outputs.go == 'true' || needs.changes.outputs.ts == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main'
557
- timeout-minutes :20
558
635
strategy :
559
636
fail-fast :false
560
637
matrix :
@@ -563,6 +640,9 @@ jobs:
563
640
name :test-e2e
564
641
-premium :true
565
642
name :test-e2e-premium
643
+ # Skip test-e2e on forks as they don't have access to CI secrets
644
+ if :(needs.changes.outputs.go == 'true' || needs.changes.outputs.ts == 'true' || needs.changes.outputs.ci == 'true' || github.ref == 'refs/heads/main') && !(github.event.pull_request.head.repo.fork)
645
+ timeout-minutes :20
566
646
name :${{ matrix.variant.name }}
567
647
steps :
568
648
-name :Harden Runner
@@ -586,6 +666,8 @@ jobs:
586
666
name :make gen
587
667
588
668
-run :pnpm build
669
+ env :
670
+ NODE_OPTIONS :${{ github.repository_owner == 'coder' && '--max_old_space_size=8192' || '' }}
589
671
working-directory :site
590
672
591
673
-run :pnpm playwright:install
@@ -667,7 +749,7 @@ jobs:
667
749
# Prevent excessive build runs on minor version changes
668
750
skip :" @(renovate/**|dependabot/**)"
669
751
# Run TurboSnap to trace file dependencies to related stories
670
- # and tell chromatic to only take snapshots ofrelevent stories
752
+ # and tell chromatic to only take snapshots ofrelevant stories
671
753
onlyChanged :true
672
754
# Avoid uploading single files, because that's very slow
673
755
zip :true
@@ -694,7 +776,7 @@ jobs:
694
776
workingDir :" ./site"
695
777
storybookBaseDir :" ./site"
696
778
# Run TurboSnap to trace file dependencies to related stories
697
- # and tell chromatic to only take snapshots ofrelevent stories
779
+ # and tell chromatic to only take snapshots ofrelevant stories
698
780
onlyChanged :true
699
781
# Avoid uploading single files, because that's very slow
700
782
zip :true
@@ -771,6 +853,7 @@ jobs:
771
853
-test-go
772
854
-test-go-pg
773
855
-test-go-race
856
+ -test-go-race-pg
774
857
-test-js
775
858
-test-e2e
776
859
-offlinedocs
@@ -793,6 +876,7 @@ jobs:
793
876
echo "- test-go: ${{ needs.test-go.result }}"
794
877
echo "- test-go-pg: ${{ needs.test-go-pg.result }}"
795
878
echo "- test-go-race: ${{ needs.test-go-race.result }}"
879
+ echo "- test-go-race-pg: ${{ needs.test-go-race-pg.result }}"
796
880
echo "- test-js: ${{ needs.test-js.result }}"
797
881
echo "- test-e2e: ${{ needs.test-e2e.result }}"
798
882
echo "- offlinedocs: ${{ needs.offlinedocs.result }}"
@@ -811,7 +895,7 @@ jobs:
811
895
needs :changes
812
896
# We always build the dylibs on Go changes to verify we're not merging unbuildable code,
813
897
# but they need only be signed and uploaded on coder/coder main.
814
- if :needs.changes.outputs.docs-only == 'false ' || github.ref == 'refs/heads/main'
898
+ if :needs.changes.outputs.go == 'true' || needs.changes.outputs.ci == 'true ' || github.ref == 'refs/heads/main'
815
899
runs-on :${{ github.repository_owner == 'coder' && 'depot-macos-latest' || 'macos-latest' }}
816
900
steps :
817
901
-name :Harden Runner
@@ -892,7 +976,7 @@ jobs:
892
976
-changes
893
977
-build-dylib
894
978
if :github.ref == 'refs/heads/main' && needs.changes.outputs.docs-only == 'false' && !github.event.pull_request.head.repo.fork
895
- runs-on :${{ github.repository_owner == 'coder' && 'depot- ubuntu-22.04-8' || 'ubuntu-latest' }}
979
+ runs-on :" ubuntu-22.04"
896
980
permissions :
897
981
packages :write # Needed to push images to ghcr.io
898
982
env :
@@ -1062,7 +1146,7 @@ jobs:
1062
1146
version :" 2.2.1"
1063
1147
1064
1148
-name :Get Cluster Credentials
1065
- uses :google-github-actions/get-gke-credentials@206d64b64b0eba0a6e2f25113d044c31776ca8d6 # v2.2.2
1149
+ uses :google-github-actions/get-gke-credentials@9025e8f90f2d8e0c3dafc3128cc705a26d992a6a # v2.3.0
1066
1150
with :
1067
1151
cluster_name :dogfood-v2
1068
1152
location :us-central1-a