Extract randomized test CI process into a script

Max Brunsfeld created

Change summary

.github/workflows/randomized_tests.yml | 13 ++-----------
crates/gpui/src/test.rs                |  2 +-
script/randomized-test-ci              | 27 +++++++++++++++++++++++++++
3 files changed, 30 insertions(+), 12 deletions(-)

Detailed changes

.github/workflows/randomized_tests.yml 🔗

@@ -14,8 +14,6 @@ env:
   CARGO_TERM_COLOR: always
   CARGO_INCREMENTAL: 0
   RUST_BACKTRACE: 1
-  OPERATIONS: 200
-  ITERATIONS: 10000
 
 jobs:
   tests:
@@ -40,12 +38,5 @@ jobs:
           clean: false
           submodules: 'recursive'
 
-      - name: Select seed
-        run: |
-          set -eu
-          seed=$(od -A n -N 8 -t u8 /dev/urandom | xargs)
-          echo "seed: ${seed}"
-          echo "SEED=${seed}" >> $GITHUB_ENV
-
-      - name: Run tests
-        run: cargo test --release --package collab random
+      - name: Run randomized tests
+        run: script/randomized-test-ci

crates/gpui/src/test.rs 🔗

@@ -76,7 +76,7 @@ pub fn run_test(
                 let seed = atomic_seed.load(SeqCst);
 
                 if is_randomized {
-                    dbg!(seed);
+                    eprintln!("seed = {seed}");
                 }
 
                 let deterministic = executor::Deterministic::new(seed);

script/randomized-test-ci 🔗

@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# Compile the tests first
+mkdir -p target
+cargo test --release --package collab --no-run
+if [[ $? != 0 ]]; then
+  echo "Build failed"
+  exit 1
+fi
+
+set -eu
+
+LOG_FILE=target/randomized-tests.log
+export SAVE_PLAN=target/test-plan.json
+export OPERATIONS=200
+export ITERATIONS=10000
+export SEED=$(od -A n -N 8 -t u8 /dev/urandom | xargs)
+
+cargo test --release --package collab random -- --nocapture 2> >(tee $LOG_FILE)
+if [[ $? == 0 ]]; then
+  echo "Tests passed"
+  exit 0
+fi
+
+# If the tests failed, find the failing seed in the logs
+failing_seed=$(grep "failing seed" $LOG_FILE | cut -d: -f2 | xargs)
+echo "Tests failed. seed: $failing_seed"