@@ -67,12 +67,70 @@ if "%SMART_RETRIES%"=="true" (
6767 if not defined DEVELOCITY_BASE_URL set DEVELOCITY_BASE_URL = https://gradle-enterprise.elastic.co
6868 set DEVELOCITY_FAILED_TEST_API_URL = !DEVELOCITY_BASE_URL! /api/tests/build/!BUILD_SCAN_ID! ?testOutcomes=failed
6969
70+ REM Fetch test seed from build scan custom values
71+ REM Support both DEVELOCITY_API_KEY and DEVELOCITY_API_ACCESS_KEY
72+ set API_KEY =
73+ if defined DEVELOCITY_API_KEY (
74+ set API_KEY = %DEVELOCITY_API_KEY%
75+ ) else if defined DEVELOCITY_API_ACCESS_KEY (
76+ set API_KEY = %DEVELOCITY_API_ACCESS_KEY%
77+ )
78+
79+ if not defined API_KEY (
80+ echo Warning: No Develocity API key available ^ (DEVELOCITY_API_KEY or DEVELOCITY_API_ACCESS_KEY^ )
81+ echo Test seed retrieval will be skipped
82+ set TESTS_SEED =
83+ ) else (
84+ set DEVELOCITY_BUILD_SCAN_API_URL = !DEVELOCITY_BASE_URL! /api/builds/!BUILD_SCAN_ID! ?models=gradle-attributes
85+ set TESTS_SEED =
86+
87+ echo Fetching test seed from build scan: !BUILD_SCAN_ID!
88+ echo API URL: !DEVELOCITY_BUILD_SCAN_API_URL!
89+
90+ REM Fetch build scan data
91+ curl --silent --show-error --compressed --request GET --url " !DEVELOCITY_BUILD_SCAN_API_URL! " --max-time 30 --header " accept: application/json" --header " authorization: Bearer !API_KEY! " --header " content-type: application/json" 2 > nul | jq " ." > .build-scan-data.json 2 > nul
92+
93+ if exist .build-scan-data.json (
94+ REM Validate JSON
95+ jq empty .build-scan-data.json 2 > nul
96+ if !errorlevel! equ 0 (
97+ REM Extract test seed from gradle attributes
98+ for /f " delims=" %%i in ('jq -r " .models.gradleAttributes.model.values[]? | select(.name == \" tests.seed\" ) | .value" .build-scan-data.json 2^ > nul ') do set TESTS_SEED = %%i
99+
100+ if defined TESTS_SEED (
101+ if not " !TESTS_SEED! " == " null" (
102+ echo Retrieved test seed: !TESTS_SEED!
103+ ) else (
104+ echo Could not retrieve test seed from build scan
105+ echo Debug: Checking available gradle attributes...
106+ jq -r " .models.gradleAttributes.model.values[]? | .name" .build-scan-data.json 2 > nul
107+ set TESTS_SEED =
108+ )
109+ ) else (
110+ echo Could not retrieve test seed from build scan
111+ echo Debug: Checking available gradle attributes...
112+ jq -r " .models.gradleAttributes.model.values[]? | .name" .build-scan-data.json 2 > nul
113+ set TESTS_SEED =
114+ )
115+ ) else (
116+ echo Error: Invalid JSON response from Develocity API
117+ type .build-scan-data.json 2 > nul | findstr /C:" ^" | more +0 +10
118+ set TESTS_SEED =
119+ )
120+
121+ del .build-scan-data.json 2 > nul
122+ ) else (
123+ echo Error: Failed to fetch build scan data from Develocity API
124+ set TESTS_SEED =
125+ )
126+ )
127+
70128 REM Add random delay to prevent API rate limiting (0-4 seconds)
71129 set /a " delay = %RANDOM% %% 5"
72130 timeout /t !delay! /nobreak > nul 2 >& 1
73131
74132 REM Fetch failed tests from Develocity API (curl will auto-decompress gzip with --compressed)
75- curl --compressed --request GET --url " !DEVELOCITY_FAILED_TEST_API_URL! " --max-filesize 10485760 --max-time 30 --header " accept: application/json" --header " authorization: Bearer %DEVELOCITY_API_ACCESS_KEY% " --header " content-type: application/json" 2 > nul | jq " . " > .failed-test-history.json 2 > nul
133+ curl --compressed --request GET --url " !DEVELOCITY_FAILED_TEST_API_URL! " --max-filesize 10485760 --max-time 30 --header " accept: application/json" --header " authorization: Bearer %DEVELOCITY_API_ACCESS_KEY% " --header " content-type: application/json" 2 > nul | jq --arg testseed " !TESTS_SEED! " " . + {testseed: $testseed} " > .failed-test-history.json 2 > nul
76134
77135 if exist .failed-test-history.json (
78136 REM Set restrictive file permissions (owner only)
@@ -90,7 +148,7 @@ if "%SMART_RETRIES%"=="true" (
90148 if not defined ORIGIN_JOB_NAME set ORIGIN_JOB_NAME = previous attempt
91149 if " !ORIGIN_JOB_NAME! " == " null" set ORIGIN_JOB_NAME = previous attempt
92150
93- echo ✓ Smart retry enabled: filtering to !FILTERED_WORK_UNITS! work units
151+ echo Smart retry enabled: filtering to !FILTERED_WORK_UNITS! work units
94152
95153 REM Create Buildkite annotation for visibility
96154 echo Rerunning failed build job [!ORIGIN_JOB_NAME! ]^ (!BUILD_SCAN_URL! ^ ) > .smart-retry-annotation.txt
@@ -173,10 +231,11 @@ set "_DEVELOCITY_API_ACCESS_KEY=%DEVELOCITY_API_ACCESS_KEY%"
173231set " _BUILDKITE_API_TOKEN = %BUILDKITE_API_TOKEN% "
174232set " _JAVA_HOME = %JAVA_HOME% "
175233set " _JAVA16_HOME = %JAVA16_HOME% "
234+ set " _TESTS_SEED = %TESTS_SEED% "
176235
177236REM End local scope and restore critical variables to parent environment
178237REM This ensures bash scripts can access WORKSPACE, GRADLEW, and other variables
179- ENDLOCAL && set " WORKSPACE = %_WORKSPACE% " && set " GRADLEW = %_GRADLEW% " && set " GRADLEW_BAT = %_GRADLEW_BAT% " && set " BUILD_NUMBER = %_BUILD_NUMBER% " && set " JOB_BRANCH = %_JOB_BRANCH% " && set " GH_TOKEN = %_GH_TOKEN% " && set " GRADLE_BUILD_CACHE_USERNAME = %_GRADLE_BUILD_CACHE_USERNAME% " && set " GRADLE_BUILD_CACHE_PASSWORD = %_GRADLE_BUILD_CACHE_PASSWORD% " && set " DEVELOCITY_ACCESS_KEY = %_DEVELOCITY_ACCESS_KEY% " && set " DEVELOCITY_API_ACCESS_KEY = %_DEVELOCITY_API_ACCESS_KEY% " && set " BUILDKITE_API_TOKEN = %_BUILDKITE_API_TOKEN% " && set " JAVA_HOME = %_JAVA_HOME% " && set " JAVA16_HOME = %_JAVA16_HOME% "
238+ ENDLOCAL && set " WORKSPACE = %_WORKSPACE% " && set " GRADLEW = %_GRADLEW% " && set " GRADLEW_BAT = %_GRADLEW_BAT% " && set " BUILD_NUMBER = %_BUILD_NUMBER% " && set " JOB_BRANCH = %_JOB_BRANCH% " && set " GH_TOKEN = %_GH_TOKEN% " && set " GRADLE_BUILD_CACHE_USERNAME = %_GRADLE_BUILD_CACHE_USERNAME% " && set " GRADLE_BUILD_CACHE_PASSWORD = %_GRADLE_BUILD_CACHE_PASSWORD% " && set " DEVELOCITY_ACCESS_KEY = %_DEVELOCITY_ACCESS_KEY% " && set " DEVELOCITY_API_ACCESS_KEY = %_DEVELOCITY_API_ACCESS_KEY% " && set " BUILDKITE_API_TOKEN = %_BUILDKITE_API_TOKEN% " && set " JAVA_HOME = %_JAVA_HOME% " && set " JAVA16_HOME = %_JAVA16_HOME% " && set " TESTS_SEED = %_TESTS_SEED% "
180239
181240bash.exe -c " bash .buildkite/scripts/get-latest-test-mutes.sh"
182241
0 commit comments