Skip to content

[bazel] Use MRI on RBE#17622

Open
p0deje wants to merge 5 commits into
trunkfrom
mri-rbe
Open

[bazel] Use MRI on RBE#17622
p0deje wants to merge 5 commits into
trunkfrom
mri-rbe

Conversation

@p0deje

@p0deje p0deje commented Jun 3, 2026

Copy link
Copy Markdown
Member

Updates the Ruby ruleset for Bazel, which now supports MRI (CRuby) toolchains on RBE. We no longer need to use JRuby for the RBE job and can stick to the default Ruby interpreter.

@selenium-ci selenium-ci added the B-build Includes scripting, bazel and CI integrations label Jun 3, 2026

@shs96c shs96c left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where we host the image is the only thing I'm seeing here I'm not comfortable with

"/usr/include/c++/11/backward",
],
cxx_flags = ["-std=c++0x"],
cxx_flags = ["-std=c++17"],

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we're setting this here, I think we can remove the equivalent entries in the .bazelrc. Can be done in a follow up PR.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, isn't this file only enabled on RBE, while .bazelrc is enabled for everything?

Comment thread common/remote-build/BUILD.bazel Outdated
@qodo-code-review

Copy link
Copy Markdown
Contributor

CI Feedback 🧐

A test triggered by this PR failed. Here is an AI-generated analysis of the failure:

Action: Ruby / ubuntu-smoke / ubuntu

Failed stage: Rerun failures with debug [❌]

Failed test name: //rb/spec/integration/selenium/webdriver:window-chrome

Failure summary:

The GitHub Action failed because Bazel test execution reported failures in the Selenium Ruby
integration window specs for multiple browsers, causing the overall job to exit non-zero (exit code
3).

Failing targets/tests:
- //rb/spec/integration/selenium/webdriver:window-chrome failed (2/2 runs).
In rb/spec/integration/selenium/webdriver/window_spec.rb:105, window.maximize errored with
Selenium::WebDriver::Error::UnknownError: unknown error: JavaScript code failed and specifically
from unknown command: 'Runtime.evaluate' wasn't found (Chrome 149.0.7827.54).
-
rb/spec/integration/selenium/webdriver/window_spec.rb:116 (can make window full screen) also failed
with Selenium::WebDriver::Error::TimeoutError waiting for window size to change.
-
//rb/spec/integration/selenium/webdriver:window-edge failed (2/2 runs) with the same root issue:
window.maximize triggers unknown command: 'Runtime.evaluate' wasn't found (Edge 149.0.4022.52) and
fullscreen checks timing out.
- //rb/spec/integration/selenium/webdriver:window-firefox failed (2/2
runs) due to Selenium::WebDriver::Error::TimeoutError in multiple window state/geometry
expectations:
- rb/spec/integration/selenium/webdriver/window_spec.rb:60 (set position)
-
rb/spec/integration/selenium/webdriver/window_spec.rb:105 (maximize)
-
rb/spec/integration/selenium/webdriver/window_spec.rb:116 (fullscreen)
-
rb/spec/integration/selenium/webdriver/window_spec.rb:129 (minimize)

Additional environment/setup indicators (likely contributing to window-management instability):
-
X/desktop environment issues appear earlier: Error: Couldn't connect to XServer:99, suggesting the
GUI/Xvfb/window manager environment was not healthy, which can lead to window
maximize/fullscreen/position operations not taking effect and tests timing out.

Relevant error logs:
1:  ##[group]Runner Image Provisioner
2:  Hosted Compute Agent
...

589:  Setting up fonts-terminus-otb (4.48-3.1) ...
590:  Setting up fonts-urw-base35 (20200910-8) ...
591:  Setting up libgs10-common (10.02.1~dfsg1-0ubuntu7.8) ...
592:  Setting up libgs10:amd64 (10.02.1~dfsg1-0ubuntu7.8) ...
593:  Setting up libspectre1:amd64 (0.2.12-1build2) ...
594:  Setting up libimlib2t64:amd64 (1.12.1-1.1build2) ...
595:  Setting up feh (3.10.1-1ubuntu0.1) ...
596:  Processing triggers for libc-bin (2.39-0ubuntu8.7) ...
597:  Processing triggers for man-db (2.12.0-4build2) ...
598:  Not building database; man-db/auto-update is not 'true'.
599:  Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.10+dfsg-3ubuntu3.3) ...
600:  Processing triggers for install-info (7.1-3build2) ...
601:  Processing triggers for fontconfig (2.15.0-1.1ubuntu2) ...
602:  Processing triggers for hicolor-icon-theme (0.17-2) ...
603:  Processing triggers for menu (2.1.50) ...
604:  /usr/share/menu/bash: 1: Syntax error: word unexpected (expecting ")")
605:  /usr/share/menu/dash: 1: Syntax error: word unexpected (expecting ")")
606:  /usr/share/menu/bc: 1: Syntax error: word unexpected (expecting ")")
607:  Setting up fluxbox (1.3.7-1build2) ...
608:  update-alternatives: using /usr/bin/startfluxbox to provide /usr/bin/x-window-manager (x-window-manager) in auto mode
609:  Processing triggers for menu (2.1.50) ...
610:  /usr/share/menu/bash: 1: Syntax error: word unexpected (expecting ")")
611:  /usr/share/menu/dash: 1: Syntax error: word unexpected (expecting ")")
612:  /usr/share/menu/bc: 1: Syntax error: word unexpected (expecting ")")
613:  Running kernel seems to be up-to-date.
614:  No services need to be restarted.
615:  No containers need to be restarted.
616:  No user sessions are running outdated binaries.
617:  No VM guests are running outdated hypervisor (qemu) binaries on this host.
618:  Warning: Failed to open file(fluxbox.cat)
619:  for translation, using default messages.
620:  Error: Couldn't connect to XServer:99
621:  The XKEYBOARD keymap compiler (xkbcomp) reports:
...

624:  > Warning:          Could not resolve keysym XF86CameraAccessToggle
625:  > Warning:          Could not resolve keysym XF86NextElement
626:  > Warning:          Could not resolve keysym XF86PreviousElement
627:  > Warning:          Could not resolve keysym XF86AutopilotEngageToggle
628:  > Warning:          Could not resolve keysym XF86MarkWaypoint
629:  > Warning:          Could not resolve keysym XF86Sos
630:  > Warning:          Could not resolve keysym XF86NavChart
631:  > Warning:          Could not resolve keysym XF86FishingChart
632:  > Warning:          Could not resolve keysym XF86SingleRangeRadar
633:  > Warning:          Could not resolve keysym XF86DualRangeRadar
634:  > Warning:          Could not resolve keysym XF86RadarOverlay
635:  > Warning:          Could not resolve keysym XF86TraditionalSonar
636:  > Warning:          Could not resolve keysym XF86ClearvuSonar
637:  > Warning:          Could not resolve keysym XF86SidevuSonar
638:  > Warning:          Could not resolve keysym XF86NavInfo
639:  Errors from xkbcomp are not fatal to the X server
640:  ##[group]Run ./scripts/github-actions/delete-browsers-drivers.sh
...

1085:  �[32m[2,694 / 2,702]�[0m 5 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:takes_screenshot-edge; 1s local ... (4 actions, 1 running)
1086:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 1s local ... (4 actions, 1 running)
1087:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 11s local ... (4 actions, 1 running)
1088:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 26s local ... (4 actions, 2 running)
1089:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-chrome (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-chrome/test_attempts/attempt_1.log)
1090:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 28s local ... (4 actions, 2 running)
1091:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 41s local ... (4 actions, 2 running)
1092:  �[32m[2,695 / 2,702]�[0m 6 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 52s local ... (4 actions, 3 running)
1093:  �[32m[2,696 / 2,702]�[0m 7 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 54s local ... (4 actions, 2 running)
1094:  �[32m[2,697 / 2,702]�[0m 8 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 56s local ... (4 actions, 2 running)
1095:  �[32m[2,697 / 2,702]�[0m 8 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 59s local ... (4 actions, 2 running)
1096:  �[32m[2,698 / 2,702]�[0m 9 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 61s local ... (4 actions, 1 running)
1097:  �[32m[2,698 / 2,702]�[0m 9 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 71s local ... (4 actions, 1 running)
1098:  �[32m[2,698 / 2,702]�[0m 9 / 17 tests;�[0m Testing //rb/spec/integration/selenium/webdriver:window-chrome; 73s local ... (4 actions, 2 running)
1099:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-chrome (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-chrome/test.log)
1100:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:window-chrome (Summary)
1101:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-chrome/test.log
...

1105:  Running Ruby specs:
1106:  browser: chrome
1107:  driver: chrome
1108:  version: stable
1109:  platform: linux
1110:  ci: github
1111:  rbe: false
1112:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1113:  Selenium::WebDriver::Window
1114:  gets the size of the current window
1115:  sets the size of the current window
1116:  gets the position of the current window
1117:  sets the position of the current window
1118:  gets the rect of the current window
1119:  sets the rect of the current window
1120:  can maximize the current window (FAILED - 1)
1121:  can make window full screen (FAILED - 2)
1122:  can minimize the window (PENDING: Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};)
1123:  Pending: (Failures listed here are expected and do not affect your suite's status)
1124:  1) Selenium::WebDriver::Window can minimize the window
1125:  # Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};
1126:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:129
1127:  Failures:
1128:  1) Selenium::WebDriver::Window can maximize the current window
1129:  Failure/Error: window.maximize
1130:  Selenium::WebDriver::Error::UnknownError:
1131:  unknown error: JavaScript code failed
1132:  from unknown command: 'Runtime.evaluate' wasn't found
1133:  (Session info: chrome=149.0.7827.54)
1134:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1135:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
1136:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
1137:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
1138:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `new'
1139:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `create_response'
1140:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
1141:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:70:in `call'
1142:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:633:in `execute'
1143:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:272:in `maximize_window'
1144:  # ./rb/lib/selenium/webdriver/common/window.rb:139:in `maximize'
1145:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:108:in `block (2 levels) in <module:WebDriver>'
1146:  # ------------------
1147:  # --- Caused by: ---
1148:  # Selenium::WebDriver::Error::WebDriverError:
1149:  #   #0 0x5601d50e380a <unknown>
...

1159:  #10 0x5601d4b77ea2 <unknown>
1160:  #11 0x5601d4b62a4c <unknown>
1161:  #12 0x5601d4b0df7f <unknown>
1162:  #13 0x5601d4b0ed61 <unknown>
1163:  #14 0x5601d50aa0f7 <unknown>
1164:  #15 0x5601d50a88bd <unknown>
1165:  #16 0x5601d50935a6 <unknown>
1166:  #17 0x5601d50a949a <unknown>
1167:  #18 0x5601d507b560 <unknown>
1168:  #19 0x5601d50d0288 <unknown>
1169:  #20 0x5601d50d0425 <unknown>
1170:  #21 0x5601d50e238e <unknown>
1171:  #22 0x7f646609caa4 <unknown>
1172:  #23 0x7f6466129c6c <unknown>
1173:  2) Selenium::WebDriver::Window can make window full screen
1174:  Failure/Error: wait.until { window.size != old_size }
1175:  Selenium::WebDriver::Error::TimeoutError:
1176:  timed out after 10 seconds
1177:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1178:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1179:  Finished in 25.66 seconds (files took 0.23664 seconds to load)
1180:  9 examples, 2 failures, 1 pending
1181:  Failed examples:
1182:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:105 # Selenium::WebDriver::Window can maximize the current window
...

1186:  Running Ruby specs:
1187:  browser: chrome
1188:  driver: chrome
1189:  version: stable
1190:  platform: linux
1191:  ci: github
1192:  rbe: false
1193:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1194:  Selenium::WebDriver::Window
1195:  gets the size of the current window
1196:  sets the size of the current window
1197:  gets the position of the current window
1198:  sets the position of the current window
1199:  gets the rect of the current window
1200:  sets the rect of the current window
1201:  can maximize the current window (FAILED - 1)
1202:  can make window full screen (FAILED - 2)
1203:  can minimize the window (PENDING: Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};)
1204:  Pending: (Failures listed here are expected and do not affect your suite's status)
1205:  1) Selenium::WebDriver::Window can minimize the window
1206:  # Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};
1207:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:129
1208:  Failures:
1209:  1) Selenium::WebDriver::Window can maximize the current window
1210:  Failure/Error: window.maximize
1211:  Selenium::WebDriver::Error::UnknownError:
1212:  unknown error: JavaScript code failed
1213:  from unknown command: 'Runtime.evaluate' wasn't found
1214:  (Session info: chrome=149.0.7827.54)
1215:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1216:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
1217:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
1218:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
1219:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `new'
1220:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `create_response'
1221:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
1222:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:70:in `call'
1223:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:633:in `execute'
1224:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:272:in `maximize_window'
1225:  # ./rb/lib/selenium/webdriver/common/window.rb:139:in `maximize'
1226:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:108:in `block (2 levels) in <module:WebDriver>'
1227:  # ------------------
1228:  # --- Caused by: ---
1229:  # Selenium::WebDriver::Error::WebDriverError:
1230:  #   #0 0x558e4db6d80a <unknown>
...

1240:  #10 0x558e4d601ea2 <unknown>
1241:  #11 0x558e4d5eca4c <unknown>
1242:  #12 0x558e4d597f7f <unknown>
1243:  #13 0x558e4d598d61 <unknown>
1244:  #14 0x558e4db340f7 <unknown>
1245:  #15 0x558e4db328bd <unknown>
1246:  #16 0x558e4db1d5a6 <unknown>
1247:  #17 0x558e4db3349a <unknown>
1248:  #18 0x558e4db05560 <unknown>
1249:  #19 0x558e4db5a288 <unknown>
1250:  #20 0x558e4db5a425 <unknown>
1251:  #21 0x558e4db6c38e <unknown>
1252:  #22 0x7f817249caa4 <unknown>
1253:  #23 0x7f8172529c6c <unknown>
1254:  2) Selenium::WebDriver::Window can make window full screen
1255:  Failure/Error: wait.until { window.size != old_size }
1256:  Selenium::WebDriver::Error::TimeoutError:
1257:  timed out after 10 seconds
1258:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1259:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1260:  Finished in 13.17 seconds (files took 0.2321 seconds to load)
1261:  9 examples, 2 failures, 1 pending
1262:  Failed examples:
1263:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:105 # Selenium::WebDriver::Window can maximize the current window
1264:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:116 # Selenium::WebDriver::Window can make window full screen
1265:  ================================================================================
1266:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 1s local ... (3 actions, 1 running)
1267:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 11s local ... (3 actions, 1 running)
1268:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 14s local ... (3 actions, 2 running)
1269:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-edge (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-edge/test_attempts/attempt_1.log)
1270:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 15s local ... (3 actions, 2 running)
1271:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 41s local ... (3 actions, 2 running)
1272:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 101s local ... (3 actions, 2 running)
1273:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 114s local ... (3 actions running)
1274:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-firefox (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test_attempts/attempt_1.log)
1275:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 116s local ... (3 actions running)
1276:  �[32m[2,699 / 2,702]�[0m 10 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 127s local ... (3 actions running)
1277:  �[32m[2,700 / 2,702]�[0m 11 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 128s local ... (2 actions running)
1278:  �[32m[2,700 / 2,702]�[0m 11 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 138s local ... (2 actions running)
1279:  �[32m[2,700 / 2,702]�[0m 11 / 17 tests, �[31m�[1m1 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-edge; 141s local ... (2 actions running)
1280:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-edge (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-edge/test.log)
1281:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:window-edge (Summary)
1282:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-edge/test.log
...

1286:  Running Ruby specs:
1287:  browser: edge
1288:  driver: edge
1289:  version: stable
1290:  platform: linux
1291:  ci: github
1292:  rbe: false
1293:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1294:  Selenium::WebDriver::Window
1295:  gets the size of the current window
1296:  sets the size of the current window
1297:  gets the position of the current window
1298:  sets the position of the current window
1299:  gets the rect of the current window
1300:  sets the rect of the current window
1301:  can maximize the current window (FAILED - 1)
1302:  can make window full screen (FAILED - 2)
1303:  can minimize the window (PENDING: Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};)
1304:  Pending: (Failures listed here are expected and do not affect your suite's status)
1305:  1) Selenium::WebDriver::Window can minimize the window
1306:  # Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};
1307:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:129
1308:  Failures:
1309:  1) Selenium::WebDriver::Window can maximize the current window
1310:  Failure/Error: window.maximize
1311:  Selenium::WebDriver::Error::UnknownError:
1312:  unknown error: JavaScript code failed
1313:  from unknown command: 'Runtime.evaluate' wasn't found
1314:  (Session info: MicrosoftEdge=149.0.4022.52)
1315:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1316:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
1317:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
1318:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
1319:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `new'
1320:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `create_response'
1321:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
1322:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:70:in `call'
1323:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:633:in `execute'
1324:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:272:in `maximize_window'
1325:  # ./rb/lib/selenium/webdriver/common/window.rb:139:in `maximize'
1326:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:108:in `block (2 levels) in <module:WebDriver>'
1327:  # ------------------
1328:  # --- Caused by: ---
1329:  # Selenium::WebDriver::Error::WebDriverError:
1330:  #   #0 0x55c2d810b8ce <unknown>
...

1341:  #11 0x55c2d7b516d0 <unknown>
1342:  #12 0x55c2d7afe1e7 <unknown>
1343:  #13 0x55c2d7afee21 <unknown>
1344:  #14 0x55c2d80d884f <unknown>
1345:  #15 0x55c2d80d6cbc <unknown>
1346:  #16 0x55c2d80d670d <unknown>
1347:  #17 0x55c2d80c68a7 <unknown>
1348:  #18 0x55c2d80d750d <unknown>
1349:  #19 0x55c2d80b10be <unknown>
1350:  #20 0x55c2d80f9378 <unknown>
1351:  #21 0x55c2d80f9579 <unknown>
1352:  #22 0x55c2d810a51e <unknown>
1353:  #23 0x7f567a49caa4 <unknown>
1354:  #24 0x7f567a529c6c <unknown>
1355:  2) Selenium::WebDriver::Window can make window full screen
1356:  Failure/Error: wait.until { window.size != old_size }
1357:  Selenium::WebDriver::Error::TimeoutError:
1358:  timed out after 10 seconds
1359:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1360:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1361:  Finished in 13.45 seconds (files took 0.23561 seconds to load)
1362:  9 examples, 2 failures, 1 pending
1363:  Failed examples:
1364:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:105 # Selenium::WebDriver::Window can maximize the current window
...

1368:  Running Ruby specs:
1369:  browser: edge
1370:  driver: edge
1371:  version: stable
1372:  platform: linux
1373:  ci: github
1374:  rbe: false
1375:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1376:  Selenium::WebDriver::Window
1377:  gets the size of the current window
1378:  sets the size of the current window
1379:  gets the position of the current window
1380:  sets the position of the current window
1381:  gets the rect of the current window
1382:  sets the rect of the current window
1383:  can maximize the current window (FAILED - 1)
1384:  can make window full screen (FAILED - 2)
1385:  can minimize the window (PENDING: Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};)
1386:  Pending: (Failures listed here are expected and do not affect your suite's status)
1387:  1) Selenium::WebDriver::Window can minimize the window
1388:  # Test skipped because it is unreliable in this configuration; Guarded by {:browser=>[:chrome, :edge], :platform=>[:macosx, :linux], :ci=>:github, :reason=>"No reason given"};
1389:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:129
1390:  Failures:
1391:  1) Selenium::WebDriver::Window can maximize the current window
1392:  Failure/Error: window.maximize
1393:  Selenium::WebDriver::Error::UnknownError:
1394:  unknown error: JavaScript code failed
1395:  from unknown command: 'Runtime.evaluate' wasn't found
1396:  (Session info: MicrosoftEdge=149.0.4022.52)
1397:  # ./rb/lib/selenium/webdriver/remote/response.rb:63:in `add_cause'
1398:  # ./rb/lib/selenium/webdriver/remote/response.rb:41:in `error'
1399:  # ./rb/lib/selenium/webdriver/remote/response.rb:52:in `assert_ok'
1400:  # ./rb/lib/selenium/webdriver/remote/response.rb:34:in `initialize'
1401:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `new'
1402:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:135:in `create_response'
1403:  # ./rb/lib/selenium/webdriver/remote/http/default.rb:103:in `request'
1404:  # ./rb/lib/selenium/webdriver/remote/http/common.rb:70:in `call'
1405:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:633:in `execute'
1406:  # ./rb/lib/selenium/webdriver/remote/bridge.rb:272:in `maximize_window'
1407:  # ./rb/lib/selenium/webdriver/common/window.rb:139:in `maximize'
1408:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:108:in `block (2 levels) in <module:WebDriver>'
1409:  # ------------------
1410:  # --- Caused by: ---
1411:  # Selenium::WebDriver::Error::WebDriverError:
1412:  #   #0 0x56230968c8ce <unknown>
...

1423:  #11 0x5623090d26d0 <unknown>
1424:  #12 0x56230907f1e7 <unknown>
1425:  #13 0x56230907fe21 <unknown>
1426:  #14 0x56230965984f <unknown>
1427:  #15 0x562309657cbc <unknown>
1428:  #16 0x56230965770d <unknown>
1429:  #17 0x5623096478a7 <unknown>
1430:  #18 0x56230965850d <unknown>
1431:  #19 0x5623096320be <unknown>
1432:  #20 0x56230967a378 <unknown>
1433:  #21 0x56230967a579 <unknown>
1434:  #22 0x56230968b51e <unknown>
1435:  #23 0x7f4a1269caa4 <unknown>
1436:  #24 0x7f4a12729c6c <unknown>
1437:  2) Selenium::WebDriver::Window can make window full screen
1438:  Failure/Error: wait.until { window.size != old_size }
1439:  Selenium::WebDriver::Error::TimeoutError:
1440:  timed out after 10 seconds
1441:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1442:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1443:  Finished in 13.47 seconds (files took 0.23754 seconds to load)
1444:  9 examples, 2 failures, 1 pending
1445:  Failed examples:
1446:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:105 # Selenium::WebDriver::Window can maximize the current window
1447:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:116 # Selenium::WebDriver::Window can make window full screen
1448:  ================================================================================
1449:  �[32m[2,701 / 2,702]�[0m 12 / 17 tests, �[31m�[1m2 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 128s local
1450:  �[32m[2,701 / 2,702]�[0m 12 / 17 tests, �[31m�[1m2 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 138s local
1451:  �[32m[2,701 / 2,702]�[0m 12 / 17 tests, �[31m�[1m2 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 168s local
1452:  �[32m[2,701 / 2,702]�[0m 12 / 17 tests, �[31m�[1m2 failed�[0m;�[0m Testing //rb/spec/integration/selenium/webdriver:window-firefox; 228s local
1453:  �[31m�[1mFAIL: �[0m//rb/spec/integration/selenium/webdriver:window-firefox (Exit 1) (see /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test.log)
1454:  �[31m�[1mFAILED: �[0m//rb/spec/integration/selenium/webdriver:window-firefox (Summary)
1455:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test.log
1456:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test_attempts/attempt_1.log
1457:  �[32mINFO: �[0mFrom Testing //rb/spec/integration/selenium/webdriver:window-firefox:
1458:  ==================== Test output for //rb/spec/integration/selenium/webdriver:window-firefox:
1459:  Running Ruby specs:
1460:  browser: firefox
1461:  driver: firefox
1462:  version: stable
1463:  platform: linux
1464:  ci: github
1465:  rbe: false
1466:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1467:  Selenium::WebDriver::Window
1468:  gets the size of the current window
1469:  sets the size of the current window
1470:  gets the position of the current window
1471:  sets the position of the current window (FAILED - 1)
1472:  gets the rect of the current window
1473:  sets the rect of the current window
1474:  can maximize the current window (FAILED - 2)
1475:  can make window full screen (FAILED - 3)
1476:  can minimize the window (FAILED - 4)
1477:  Failures:
1478:  1) Selenium::WebDriver::Window sets the position of the current window
1479:  Failure/Error: wait.until { window.position.x != pos.x && window.position.y != pos.y }
1480:  Selenium::WebDriver::Error::TimeoutError:
1481:  timed out after 10 seconds
1482:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1483:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:68:in `block (2 levels) in <module:WebDriver>'
1484:  2) Selenium::WebDriver::Window can maximize the current window
1485:  Failure/Error: wait.until { window.size != old_size }
1486:  Selenium::WebDriver::Error::TimeoutError:
1487:  timed out after 10 seconds
1488:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1489:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:109:in `block (2 levels) in <module:WebDriver>'
1490:  3) Selenium::WebDriver::Window can make window full screen
1491:  Failure/Error: wait.until { window.size != old_size }
1492:  Selenium::WebDriver::Error::TimeoutError:
1493:  timed out after 10 seconds
1494:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1495:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1496:  4) Selenium::WebDriver::Window can minimize the window
1497:  Failure/Error:
1498:  expect {
1499:  wait.until { driver.execute_script('return document.hidden;') }
1500:  }.not_to raise_error
1501:  expected no Exception, got #<Selenium::WebDriver::Error::TimeoutError: timed out after 10 seconds> with backtrace:
1502:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1503:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:133:in `block (3 levels) in <module:WebDriver>'
1504:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:132:in `block (2 levels) in <module:WebDriver>'
1505:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:132:in `block (2 levels) in <module:WebDriver>'
1506:  Finished in 1 minute 39.8 seconds (files took 0.23714 seconds to load)
1507:  9 examples, 4 failures
1508:  Failed examples:
1509:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:60 # Selenium::WebDriver::Window sets the position of the current window
...

1512:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:129 # Selenium::WebDriver::Window can minimize the window
1513:  ================================================================================
1514:  ==================== Test output for //rb/spec/integration/selenium/webdriver:window-firefox:
1515:  Running Ruby specs:
1516:  browser: firefox
1517:  driver: firefox
1518:  version: stable
1519:  platform: linux
1520:  ci: github
1521:  rbe: false
1522:  ruby: ruby 3.3.11 (2026-03-26 revision 1f2d15125a) [x86_64-linux]
1523:  Selenium::WebDriver::Window
1524:  gets the size of the current window
1525:  sets the size of the current window
1526:  gets the position of the current window
1527:  sets the position of the current window (FAILED - 1)
1528:  gets the rect of the current window
1529:  sets the rect of the current window
1530:  can maximize the current window (FAILED - 2)
1531:  can make window full screen (FAILED - 3)
1532:  can minimize the window (FAILED - 4)
1533:  Failures:
1534:  1) Selenium::WebDriver::Window sets the position of the current window
1535:  Failure/Error: wait.until { window.position.x != pos.x && window.position.y != pos.y }
1536:  Selenium::WebDriver::Error::TimeoutError:
1537:  timed out after 10 seconds
1538:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1539:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:68:in `block (2 levels) in <module:WebDriver>'
1540:  2) Selenium::WebDriver::Window can maximize the current window
1541:  Failure/Error: wait.until { window.size != old_size }
1542:  Selenium::WebDriver::Error::TimeoutError:
1543:  timed out after 10 seconds
1544:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1545:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:109:in `block (2 levels) in <module:WebDriver>'
1546:  3) Selenium::WebDriver::Window can make window full screen
1547:  Failure/Error: wait.until { window.size != old_size }
1548:  Selenium::WebDriver::Error::TimeoutError:
1549:  timed out after 10 seconds
1550:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1551:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:122:in `block (2 levels) in <module:WebDriver>'
1552:  4) Selenium::WebDriver::Window can minimize the window
1553:  Failure/Error:
1554:  expect {
1555:  wait.until { driver.execute_script('return document.hidden;') }
1556:  }.not_to raise_error
1557:  expected no Exception, got #<Selenium::WebDriver::Error::TimeoutError: timed out after 10 seconds> with backtrace:
1558:  # ./rb/lib/selenium/webdriver/common/wait.rb:76:in `until'
1559:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:133:in `block (3 levels) in <module:WebDriver>'
1560:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:132:in `block (2 levels) in <module:WebDriver>'
1561:  # ./rb/spec/integration/selenium/webdriver/window_spec.rb:132:in `block (2 levels) in <module:WebDriver>'
1562:  Finished in 1 minute 41.15 seconds (files took 0.23698 seconds to load)
1563:  9 examples, 4 failures
1564:  Failed examples:
1565:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:60 # Selenium::WebDriver::Window sets the position of the current window
1566:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:105 # Selenium::WebDriver::Window can maximize the current window
1567:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:116 # Selenium::WebDriver::Window can make window full screen
1568:  rspec ./rb/spec/integration/selenium/webdriver/window_spec.rb:129 # Selenium::WebDriver::Window can minimize the window
1569:  ================================================================================
1570:  �[32mINFO: �[0mFound 352 targets and 17 test targets...
1571:  �[32mINFO: �[0mElapsed time: 647.185s, Critical Path: 346.35s
1572:  �[32mINFO: �[0m2614 processes: 1672 internal, 30 local, 833 processwrapper-sandbox, 100 worker.
1573:  �[32mINFO: �[0mBuild completed, 3 tests FAILED, 2614 total actions
1574:  //rb/spec/integration/selenium/webdriver:action_builder-safari          �[0m�[35mSKIPPED�[0m
1575:  //rb/spec/integration/selenium/webdriver:driver_finder-safari           �[0m�[35mSKIPPED�[0m
1576:  //rb/spec/integration/selenium/webdriver:takes_screenshot-safari        �[0m�[35mSKIPPED�[0m
1577:  //rb/spec/integration/selenium/webdriver:window-safari                  �[0m�[35mSKIPPED�[0m
1578:  //rb/spec/integration/selenium/webdriver:action_builder-chrome           �[0m�[32mPASSED�[0m in 11.9s
1579:  //rb/spec/integration/selenium/webdriver:action_builder-edge             �[0m�[32mPASSED�[0m in 17.5s
1580:  //rb/spec/integration/selenium/webdriver:action_builder-firefox          �[0m�[32mPASSED�[0m in 19.9s
1581:  //rb/spec/integration/selenium/webdriver:driver_finder-chrome            �[0m�[32mPASSED�[0m in 25.8s
1582:  //rb/spec/integration/selenium/webdriver:driver_finder-edge              �[0m�[32mPASSED�[0m in 67.2s
1583:  //rb/spec/integration/selenium/webdriver:driver_finder-firefox           �[0m�[32mPASSED�[0m in 20.7s
1584:  //rb/spec/integration/selenium/webdriver:takes_screenshot-chrome         �[0m�[32mPASSED�[0m in 2.4s
1585:  //rb/spec/integration/selenium/webdriver:takes_screenshot-edge           �[0m�[32mPASSED�[0m in 2.7s
1586:  //rb/spec/integration/selenium/webdriver:takes_screenshot-firefox        �[0m�[32mPASSED�[0m in 4.4s
1587:  //rb/spec/unit:unit                                                      �[0m�[32mPASSED�[0m in 38.2s
1588:  //rb/spec/integration/selenium/webdriver:window-chrome                   �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 26.3s
1589:  Stats over 2 runs: max = 26.3s, min = 13.9s, avg = 20.1s, dev = 6.2s
1590:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-chrome/test.log
1591:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-chrome/test_attempts/attempt_1.log
1592:  //rb/spec/integration/selenium/webdriver:window-edge                     �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 14.2s
1593:  Stats over 2 runs: max = 14.2s, min = 14.1s, avg = 14.1s, dev = 0.0s
1594:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-edge/test.log
1595:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-edge/test_attempts/attempt_1.log
1596:  //rb/spec/integration/selenium/webdriver:window-firefox                  �[0m�[31m�[1mFAILED�[0m in 2 out of 2 in 101.9s
1597:  Stats over 2 runs: max = 101.9s, min = 100.5s, avg = 101.2s, dev = 0.7s
1598:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test.log
1599:  /home/runner/.bazel/execroot/_main/bazel-out/k8-fastbuild/testlogs/rb/spec/integration/selenium/webdriver/window-firefox/test_attempts/attempt_1.log
1600:  Executed 13 out of 17 tests: 10 tests pass, �[0m�[31m�[1m3 fail locally�[0m, and �[0m�[35m4 were skipped�[0m.
1601:  There were tests whose specified size is too big. Use the --test_verbose_timeout_warnings command line option to see which ones these are.
1602:  �[0m
1603:  ##[error]Process completed with exit code 3.
1604:  ##[group]Run ./scripts/github-actions/rerun-failures.sh './scripts/github-actions/bazel-test-if-targets.sh --keep_going --flaky_test_attempts 2 --local_test_jobs 1 --skip_incompatible_explicit_targets --pin_browsers=false --test_env=SE_FORCE_BROWSER_DOWNLOAD=true --test_env=SE_SKIP_DRIVER_IN_PATH=true --test_env=SKIP_PENDING=true --test_tag_filters=unit,os-sensitive,se-manager,skip-rbe //rb/...
...

1742:  1780689263058	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/context
1743:  1780689263058	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/context
1744:  1780689263058	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/addon/install
1745:  1780689263058	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/addon/uninstall
1746:  1780689263058	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/screenshot/full
1747:  1780689263158	webdriver::server	DEBUG	-> GET /status 
1748:  1780689263158	webdriver::server	DEBUG	<- 200 OK {"value":{"message":"","ready":true}}
1749:  2026-06-05 19:54:23 DEBUG Selenium [:command] -> POST session 
1750:  2026-06-05 19:54:23 DEBUG Selenium [:command]    >>> http://127.0.0.1:4444/session | {"capabilities":{"alwaysMatch":{"unhandledPromptBehavior":"ignore","acceptInsecureCerts":true,"browserName":"firefox","moz:firefoxOptions":{"binary":"/home/runner/work/_temp/selenium-cache/firefox/linux64/151.0.3/firefox","prefs":{"remote.active-protocols":1}},"moz:debuggerAddress":true}}} 
1751:  2026-06-05 19:54:23 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.45.0.nightly (ruby linux)", "Content-Length"=>"290"} 
1752:  1780689263162	webdriver::server	DEBUG	-> POST /session {"capabilities":{"alwaysMatch":{"unhandledPromptBehavior":"ignore","acceptInsecureCerts":true,"browserName": ... rk/_temp/selenium-cache/firefox/linux64/151.0.3/firefox","prefs":{"remote.active-protocols":1}},"moz:debuggerAddress":true}}}
1753:  1780689263163	geckodriver::capabilities	DEBUG	Trying to read firefox version from ini files
1754:  1780689263163	geckodriver::capabilities	DEBUG	Found version 151.0.3
1755:  1780689263164	mozrunner::runner	INFO	Running command: MOZ_CRASHREPORTER="1" MOZ_CRASHREPORTER_NO_REPORT="1" MOZ_CRASHREPORTER_SHUTDOWN="1" "/home/runner/work/_tem ... onette" "--remote-debugging-port" "0" "--remote-allow-hosts" "localhost" "-no-remote" "-profile" "/tmp/rust_mozprofileweGx3Y"
1756:  1780689263165	geckodriver::marionette	DEBUG	Waiting 60s to connect to browser on 127.0.0.1
1757:  1780689263165	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1758:  1780689263165	geckodriver::marionette	TRACE	Retrying in 100ms
1759:  [30661] Sandbox: CanCreateUserNamespace() unshare(CLONE_NEWPID): EPERM
1760:  1780689263265	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1761:  1780689263265	geckodriver::marionette	TRACE	Retrying in 100ms
1762:  1780689263365	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1763:  1780689263365	geckodriver::marionette	TRACE	Retrying in 100ms
1764:  1780689263465	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1765:  1780689263465	geckodriver::marionette	TRACE	Retrying in 100ms
1766:  1780689263558	RemoteAgent	DEBUG	Setting recommended pref apz.content_response_timeout to 60000
1767:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.backup.enabled to false
1768:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.contentblocking.introCount to 99
1769:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.discovery.enabled to false
1770:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.download.panel.shown to true
1771:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.http.blank_page_with_error_response.enabled to true
1772:  1780689263559	RemoteAgent	DEBUG	Setting recommended pref browser.ml.enable to false
...

1834:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref remote.prefs.recommended.applied to true
1835:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref security.fileuri.strict_origin_policy to false
1836:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref security.notification_enable_delay to 0
1837:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref security.remote_settings.intermediates.enabled to false
1838:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref services.settings.loglevel to off
1839:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref signon.autofillForms to false
1840:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref signon.management.page.breach-alerts.enabled to false
1841:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref signon.management.page.vulnerable-passwords.enabled to false
1842:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref signon.rememberSignons to false
1843:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref termsofuse.bypassNotification to true
1844:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref toolkit.telemetry.server to https://%(server)s/telemetry-dummy/
1845:  1780689263564	RemoteAgent	DEBUG	Setting recommended pref widget.windows.window_occlusion_tracking.enabled to false
1846:  1780689263565	RemoteAgent	DEBUG	WebDriver BiDi enabled
1847:  1780689263565	Marionette	INFO	Marionette enabled
1848:  1780689263565	Marionette	TRACE	Received observer notification final-ui-startup
1849:  1780689263565	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1850:  1780689263565	geckodriver::marionette	TRACE	Retrying in 100ms
1851:  1780689263566	RemoteAgent	TRACE	Received observer notification final-ui-startup
1852:  1780689263666	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileweGx3Y/MarionetteActivePort
1853:  1780689263666	geckodriver::marionette	TRACE	Retrying in 100ms
1854:  1780689263667	Marionette	INFO	Listening on port 37707
1855:  1780689263668	Marionette	DEBUG	Marionette is listening
1856:  1780689263672	RemoteAgent	TRACE	Available local IP addresses: 127.0.0.1, [::1]
1857:  1780689263676	RemoteAgent	DEBUG	Setting recommended pref permissions.isolateBy.userContext to true
1858:  WebDriver BiDi listening on ws://127.0.0.1:40633
1859:  [Parent 30659, Main Thread] WARNING: Failed to create DBus proxy for org.a11y.Bus: Failed to execute child process “dbus-launch” (No such file or directory)
1860:  : 'glib warning', file ./../../../../checkouts/gecko/toolkit/xre/nsSigHandlers.cpp:200
1861:  ** (firefox:30659): WARNING **: 19:54:23.679: Failed to create DBus proxy for org.a11y.Bus: Failed to execute child process ?dbus-launch? (No such file or directory)
1862:  Read port: 37707
1863:  1780689263774	Marionette	DEBUG	Accepted connection 0 from 127.0.0.1:34050
1864:  1780689263818	geckodriver::marionette	DEBUG	Connection to Marionette established on 127.0.0.1:37707.
1865:  1780689263828	Marionette	DEBUG	0 -> [0,1,"WebDriver:NewSession",{"acceptInsecureCerts":true,"browserName":"firefox","unhandledPromptBehavior":"ignore"}]
1866:  1780689263830	RemoteAgent	WARN	TLS certificate errors will be ignored for this session
1867:  1780689263839	Marionette	DEBUG	Waiting for initial application window
1868:  console.error: "Experiment desktop-release-rollout-show-relay-to-all-browsers-next-sign-up-modal-cta has unknown featureId: email-autocomplete-relay"
1869:  console.error: "Experiment visual-card-updates has unknown featureId: newtabRefinedCardsLayout"
1870:  1780689264997	Marionette	TRACE	Received observer notification browser-idle-startup-tasks-finished
1871:  1780689264997	RemoteAgent	TRACE	Received observer notification browser-idle-startup-tasks-finished
1872:  1780689264999	RemoteAgent	TRACE	[10] ProgressListener Start: expectNavigation=false resolveWhenStarted=false unloadTimeout=5000 waitForExplicitStart=false
1873:  1780689264999	RemoteAgent	TRACE	[10] ProgressListener Setting unload timer (5000ms)
1874:  1780689264999	RemoteAgent	TRACE	[10] Wait for initial navigation: isUncommittedInitial=false, isLoadingDocument=false
1875:  1780689264999	RemoteAgent	TRACE	[10] Document already finished loading: about:blank
1876:  1780689264999	RemoteAgent	TRACE	[10] ProgressListener Stop: has error=false url=about:blank
1877:  1780689265197	Marionette	DEBUG	0 <- [1,1,null,{"sessionId":"19ac3446-7f25-46c1-8ba0-bfb5c8403df1","capabilities":{"acceptInsecureCerts":true,"browserName":"firefox","browserVersion":"151.0.3","platformName":"linux","setWindowRect":true,"unhandledPromptBehavior":"ignore","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","moz:buildID":"20260601110758","moz:headless":false,"moz:platformVersion":"6.17.0-1015-azure","moz:processID":30659,"moz:profile":"/tmp/rust_mozprofileweGx3Y","moz:shutdownTimeout":60000,"pageLoadStrategy":"normal","timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"strictFileInteractability":false,"moz:accessibilityChecks":false,"moz:webdriverClick":true,"moz:windowless":false,"proxy":{}}}]
...

2079:  2026-06-05 19:54:38 DEBUG Selenium [:command] <- {"value":{"x":0,"y":0,"width":1132,"height":901}} 
2080:  2026-06-05 19:54:38 DEBUG Selenium [:command] -> GET session/19ac3446-7f25-46c1-8ba0-bfb5c8403df1/window/rect 
2081:  1780689278904	webdriver::server	DEBUG	-> GET /session/19ac3446-7f25-46c1-8ba0-bfb5c8403df1/window/rect 
2082:  1780689278904	Marionette	DEBUG	0 -> [0,23,"WebDriver:GetWindowRect",{}]
2083:  1780689278905	Marionette	DEBUG	0 <- [1,23,null,{"x":0,"y":0,"width":1132,"height":901}]
2084:  1780689278905	webdriver::server	DEBUG	<- 200 OK {"value":{"x":0,"y":0,"width":1132,"height":901}}
2085:  2026-06-05 19:54:38 DEBUG Selenium [:header]    <<<  {"content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"], "content-length"=>["49"], "date"=>["Fri, 05 Jun 2026 19:54:38 GMT"]} 
2086:  2026-06-05 19:54:38 DEBUG Selenium [:command] <- {"value":{"x":0,"y":0,"width":1132,"height":901}} 
2087:  2026-06-05 19:54:39 DEBUG Selenium [:command] -> GET session/19ac3446-7f25-46c1-8ba0-bfb5c8403df1/window/rect 
2088:  1780689279106	webdriver::server	DEBUG	-> GET /session/19ac3446-7f25-46c1-8ba0-bfb5c8403df1/window/rect 
2089:  1780689279107	Marionette	DEBUG	0 -> [0,24,"WebDriver:GetWindowRect",{}]
2090:  1780689279107	Marionette	DEBUG	0 <- [1,24,null,{"x":0,"y":0,"width":1132,"height":901}]
2091:  1780689279107	webdriver::server	DEBUG	<- 200 OK {"value":{"x":0,"y":0,"width":1132,"height":901}}
2092:  2026-06-05 19:54:39 DEBUG Selenium [:header]    <<<  {"content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"], "content-length"=>["49"], "date"=>["Fri, 05 Jun 2026 19:54:39 GMT"]} 
2093:  2026-06-05 19:54:39 DEBUG Selenium [:command] <- {"value":{"x":0,"y":0,"width":1132,"height":901}} 
2094:  console.warn: BackupService: "There was an error while trying to get the Document's directory" [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsIProperties.get]"  nsresult: "0x80004005 (NS_ERROR_FAILURE)"  location: "JS frame :: resource:///modules/backup/BackupService.sys.mjs :: get docsDirFolderPath :: line 1229"  data: no]
2095:  JavaScript error: resource:///modules/backup/BackupService.sys.mjs, line 4091: NotAllowedError: PathUtils.join: PathUtils does not support empty paths
2096:  2026-06-05 19:54:39 DEBUG Selenium [:command] -> GET session/19ac3446-7f25-46c1-8ba0-bfb5c8403df1/window/rect 
...

2339:  1780689286372	Marionette	TRACE	Application is shutting down with reason: "shutdown"
2340:  1780689286372	RemoteAgent	TRACE	Received observer notification quit-application
2341:  1780689286372	RemoteAgent	TRACE	Application is shutting down with reason: "shutdown"
2342:  1780689286385	Marionette	DEBUG	0 <- [1,59,null,{"cause":"shutdown","forced":false,"in_app":true}]
2343:  1780689286386	RemoteAgent	TRACE	Received DOM event pagehide for [object HTMLDocument]
2344:  1780689286386	RemoteAgent	TRACE	Received DOM event pagehide for [object HTMLDocument]
2345:  1780689286399	Marionette	DEBUG	Marionette stopped listening
2346:  1780689286401	webdriver::server	DEBUG	Teardown session
2347:  1780689286405	Marionette	DEBUG	Closed connection 0
2348:  1780689286476	Marionette	TRACE	Received observer notification xpcom-shutdown
2349:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref apz.content_response_timeout
2350:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.backup.enabled
2351:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.contentblocking.introCount
2352:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.discovery.enabled
2353:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.download.panel.shown
2354:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.http.blank_page_with_error_response.enabled
2355:  1780689286476	RemoteAgent	DEBUG	Resetting recommended pref browser.ml.enable
2356:  JavaScript error: resource://gre/modules/PrivateBrowsingUtils.sys.mjs, line 50: TypeError: can't access property "QueryInterface", aWindow.docShell is null
2357:  1780689286478	RemoteAgent	DEBUG	Resetting recommended pref browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features
...

2542:  1780689286723	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/context
2543:  1780689286723	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/context
2544:  1780689286723	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/addon/install
2545:  1780689286723	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/addon/uninstall
2546:  1780689286723	webdriver::server	TRACE	Build vendor route for /session/{sessionId}/moz/screenshot/full
2547:  1780689286823	webdriver::server	DEBUG	-> GET /status 
2548:  1780689286823	webdriver::server	DEBUG	<- 200 OK {"value":{"message":"","ready":true}}
2549:  2026-06-05 19:54:46 DEBUG Selenium [:command] -> POST session 
2550:  2026-06-05 19:54:46 DEBUG Selenium [:command]    >>> http://127.0.0.1:4444/session | {"capabilities":{"alwaysMatch":{"unhandledPromptBehavior":"ignore","acceptInsecureCerts":true,"browserName":"firefox","moz:firefoxOptions":{"binary":"/home/runner/work/_temp/selenium-cache/firefox/linux64/151.0.3/firefox","prefs":{"remote.active-protocols":1}},"moz:debuggerAddress":true}}} 
2551:  2026-06-05 19:54:46 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.45.0.nightly (ruby linux)", "Content-Length"=>"290"} 
2552:  1780689286824	webdriver::server	DEBUG	-> POST /session {"capabilities":{"alwaysMatch":{"unhandledPromptBehavior":"ignore","acceptInsecureCerts":true,"browserName": ... rk/_temp/selenium-cache/firefox/linux64/151.0.3/firefox","prefs":{"remote.active-protocols":1}},"moz:debuggerAddress":true}}}
2553:  1780689286824	geckodriver::capabilities	DEBUG	Trying to read firefox version from ini files
2554:  1780689286825	geckodriver::capabilities	DEBUG	Found version 151.0.3
2555:  1780689286826	mozrunner::runner	INFO	Running command: MOZ_CRASHREPORTER="1" MOZ_CRASHREPORTER_NO_REPORT="1" MOZ_CRASHREPORTER_SHUTDOWN="1" "/home/runner/work/_tem ... onette" "--remote-debugging-port" "0" "--remote-allow-hosts" "localhost" "-no-remote" "-profile" "/tmp/rust_mozprofileA798G5"
2556:  1780689286827	geckodriver::marionette	DEBUG	Waiting 60s to connect to browser on 127.0.0.1
2557:  1780689286827	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2558:  1780689286827	geckodriver::marionette	TRACE	Retrying in 100ms
2559:  [31043] Sandbox: CanCreateUserNamespace() unshare(CLONE_NEWPID): EPERM
2560:  1780689286927	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2561:  1780689286927	geckodriver::marionette	TRACE	Retrying in 100ms
2562:  1780689287027	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2563:  1780689287027	geckodriver::marionette	TRACE	Retrying in 100ms
2564:  1780689287127	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2565:  1780689287127	geckodriver::marionette	TRACE	Retrying in 100ms
2566:  1780689287227	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2567:  1780689287227	geckodriver::marionette	TRACE	Retrying in 100ms
2568:  1780689287227	RemoteAgent	DEBUG	Setting recommended pref apz.content_response_timeout to 60000
2569:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.backup.enabled to false
2570:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.contentblocking.introCount to 99
2571:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.discovery.enabled to false
2572:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.download.panel.shown to true
2573:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.http.blank_page_with_error_response.enabled to true
2574:  1780689287228	RemoteAgent	DEBUG	Setting recommended pref browser.ml.enable to false
...

2637:  1780689287233	RemoteAgent	DEBUG	Setting recommended pref security.fileuri.strict_origin_policy to false
2638:  1780689287233	RemoteAgent	DEBUG	Setting recommended pref security.notification_enable_delay to 0
2639:  1780689287233	RemoteAgent	DEBUG	Setting recommended pref security.remote_settings.intermediates.enabled to false
2640:  1780689287233	RemoteAgent	DEBUG	Setting recommended pref services.settings.loglevel to off
2641:  1780689287233	RemoteAgent	DEBUG	Setting recommended pref signon.autofillForms to false
2642:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref signon.management.page.breach-alerts.enabled to false
2643:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref signon.management.page.vulnerable-passwords.enabled to false
2644:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref signon.rememberSignons to false
2645:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref termsofuse.bypassNotification to true
2646:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref toolkit.telemetry.server to https://%(server)s/telemetry-dummy/
2647:  1780689287234	RemoteAgent	DEBUG	Setting recommended pref widget.windows.window_occlusion_tracking.enabled to false
2648:  1780689287234	RemoteAgent	DEBUG	WebDriver BiDi enabled
2649:  1780689287234	Marionette	INFO	Marionette enabled
2650:  1780689287234	Marionette	TRACE	Received observer notification final-ui-startup
2651:  1780689287235	RemoteAgent	TRACE	Received observer notification final-ui-startup
2652:  1780689287327	geckodriver::browser	TRACE	Failed to open /tmp/rust_mozprofileA798G5/MarionetteActivePort
2653:  1780689287327	geckodriver::marionette	TRACE	Retrying in 100ms
2654:  1780689287336	Marionette	INFO	Listening on port 43045
2655:  1780689287338	Marionette	DEBUG	Marionette is listening
2656:  1780689287342	RemoteAgent	TRACE	Available local IP addresses: 127.0.0.1, [::1]
2657:  1780689287346	RemoteAgent	DEBUG	Setting recommended pref permissions.isolateBy.userContext to true
2658:  WebDriver BiDi listening on ws://127.0.0.1:36605
2659:  [Parent 31041, Main Thread] WARNING: Failed to create DBus proxy for org.a11y.Bus: Failed to execute child process “dbus-launch” (No such file or directory)
2660:  : 'glib warning', file ./../../../../checkouts/gecko/toolkit/xre/nsSigHandlers.cpp:200
2661:  ** (firefox:31041): WARNING **: 19:54:47.349: Failed to create DBus proxy for org.a11y.Bus: Failed to execute child process ?dbus-launch? (No such file or directory)
2662:  Read port: 43045
2663:  1780689287445	Marionette	DEBUG	Accepted connection 0 from 127.0.0.1:43982
2664:  1780689287448	geckodriver::marionette	DEBUG	Connection to Marionette established on 127.0.0.1:43045.
2665:  1780689287495	Marionette	DEBUG	0 -> [0,1,"WebDriver:NewSession",{"acceptInsecureCerts":true,"browserName":"firefox","unhandledPromptBehavior":"ignore"}]
2666:  1780689287497	RemoteAgent	WARN	TLS certificate errors will be ignored for this session
2667:  1780689287506	Marionette	DEBUG	Waiting for initial application window
2668:  1780689288416	Marionette	TRACE	Received observer notification browser-idle-startup-tasks-finished
2669:  1780689288416	RemoteAgent	TRACE	Received observer notification browser-idle-startup-tasks-finished
2670:  1780689288601	RemoteAgent	TRACE	[10] ProgressListener Start: expectNavigation=false resolveWhenStarted=false unloadTimeout=5000 waitForExplicitStart=false
2671:  1780689288601	RemoteAgent	TRACE	[10] ProgressListener Setting unload timer (5000ms)
2672:  1780689288602	RemoteAgent	TRACE	[10] Wait for initial navigation: isUncommittedInitial=false, isLoadingDocument=false
2673:  1780689288602	RemoteAgent	TRACE	[10] Document already finished loading: about:blank
2674:  1780689288602	RemoteAgent	TRACE	[10] ProgressListener Stop: has error=false url=about:blank
2675:  1780689288610	Marionette	DEBUG	0 <- [1,1,null,{"sessionId":"ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5","capabilities":{"acceptInsecureCerts":true,"browserName":"firefox","browserVersion":"151.0.3","platformName":"linux","setWindowRect":true,"unhandledPromptBehavior":"ignore","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0","moz:buildID":"20260601110758","moz:headless":false,"moz:platformVersion":"6.17.0-1015-azure","moz:processID":31041,"moz:profile":"/tmp/rust_mozprofileA798G5","moz:shutdownTimeout":60000,"pageLoadStrategy":"normal","timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"strictFileInteractability":false,"moz:accessibilityChecks":false,"moz:webdriverClick":true,"moz:windowless":false,"proxy":{}}}]
2676:  1780689288615	webdriver::server	DEBUG	<- 200 OK {"value":{"sessionId":"ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5","capabilities":{"acceptInsecureCerts":true,"browserNam ... 0},"unhandledPromptBehavior":"ignore","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0"}}}
2677:  2026-06-05 19:54:48 DEBUG Selenium [:header]    <<<  {"content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"], "content-length"=>["755"], "date"=>["Fri, 05 Jun 2026 19:54:46 GMT"]} 
2678:  2026-06-05 19:54:48 DEBUG Selenium [:command] <- {"value":{"sessionId":"ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5","capabilities":{"acceptInsecureCerts":true,"browserName":"firefox","browserVersion":"151.0.3","moz:accessibilityChecks":false,"moz:buildID":"20260601110758","moz:geckodriverVersion":"0.37.0","moz:headless":false,"moz:platformVersion":"6.17.0-1015-azure","moz:processID":31041,"moz:profile":"/tmp/rust_mozprofileA798G5","moz:shutdownTimeout":60000,"moz:webdriverClick":true,"moz:windowless":false,"pageLoadStrategy":"normal","platformName":"linux","proxy":{},"setWindowRect":true,"strictFileInteractability":false,"timeouts":{"implicit":0,"pageLoad":300000,"script":30000},"unhandledPromptBehavior":"ignore","userAgent":"Mozilla/5.0 (X11; Linux x86_64; rv:151.0) Gecko/20100101 Firefox/151.0"}}} 
2679:  sets the position of the current window (FAILED - 1)
2680:  2026-06-05 19:54:48 DEBUG Selenium Running with Guard 'driver' set to: firefox
...

2701:  2026-06-05 19:54:48 DEBUG Selenium Running with Guard 'bidi' set to: false
2702:  2026-06-05 19:54:48 DEBUG Selenium Running with Guard 'rbe' set to: false
2703:  2026-06-05 19:54:48 DEBUG Selenium Running with Guard 'version' set to: stable
2704:  2026-06-05 19:54:48 DEBUG Selenium [:command] -> GET session/ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5/window/rect 
2705:  1780689288626	webdriver::server	DEBUG	-> GET /session/ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5/window/rect 
2706:  1780689288627	Marionette	DEBUG	0 -> [0,3,"WebDriver:GetWindowRect",{}]
2707:  1780689288627	Marionette	DEBUG	0 <- [1,3,null,{"x":0,"y":0,"width":1152,"height":921}]
2708:  1780689288627	webdriver::server	DEBUG	<- 200 OK {"value":{"x":0,"y":0,"width":1152,"height":921}}
2709:  2026-06-05 19:54:48 DEBUG Selenium [:header]    <<<  {"content-type"=>["application/json; charset=utf-8"], "cache-control"=>["no-cache"], "content-length"=>["49"], "date"=>["Fri, 05 Jun 2026 19:54:48 GMT"]} 
2710:  2026-06-05 19:54:48 DEBUG Selenium [:command] <- {"value":{"x":0,"y":0,"width":1152,"height":921}} 
2711:  2026-06-05 19:54:48 DEBUG Selenium [:command] -> POST session/ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5/window/rect 
2712:  2026-06-05 19:54:48 DEBUG Selenium [:command]    >>> http://127.0.0.1:4444/session/ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5/window/rect | {"x":10,"y":10,"width":1162,"height":931} 
2713:  2026-06-05 19:54:48 DEBUG Selenium [:header]      > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=UTF-8", "User-Agent"=>"selenium/4.45.0.nightly (ruby linux)", "Content-Length"=>"41"} 
2714:  1780689288627	webdriver::server	DEBUG	-> POST /session/ef1b0479-1689-47f5-82dc-7d9b9cf0e1c5/window/rect {"x":10,"y":10,"width":1162,"height":931}
2715:  1780689288628	Marionette	DEBUG	0 -> [0,4,"WebDriver:SetWindowRect",{"height":931,"width":1162,"x":10,"y":10}]
2716:  console.error: "Experiment desktop-release-rollout-show-relay-to-all-browsers-next-sign-up-modal-cta has unknown featureId: email-autocomplete-relay"
2717:  console.error: "Experiment visual-card-updates has unknown featureId: newtabRefinedCardsLayout"
2718:  1780689293629	RemoteAgent	WARN	TimedPromise timed out after 5000 ms: stacktrace:
...

2927:  2026-06-05 19:55:02 DEBUG Selenium [:command] <- {"value":{"x":10,"y":10,"width":650,"height":650}} 
2928:  2026-06-05 19:55:03 DEBUG Selenium [:command] -> GET session/ef1b0479-1689-47f5-82dc-7...

@p0deje p0deje marked this pull request as ready for review June 7, 2026 04:23
@qodo-code-review

Copy link
Copy Markdown
Contributor

Review Summary by Qodo

Update Bazel C++ toolchain to Bazel 9 with C++20 modules and Ubuntu 22

✨ Enhancement 🐞 Bug fix

Grey Divider

Walkthroughs

Description
• Update Bazel C++ toolchain configuration to Bazel 9 with rules_cc migration
• Add support for C++20 modules and modern compiler features
• Update RBE container image to Ubuntu 22 with GCC 11
• Switch from JRuby to MRI Ruby for RBE builds
• Add sanitizer features (ASAN, TSAN, UBSAN) and improved macOS support
Diagram
flowchart LR
  A["Bazel 9 Migration"] --> B["rules_cc Updates"]
  B --> C["C++20 Module Support"]
  B --> D["Toolchain Config Refactor"]
  E["Ubuntu 22 RBE Image"] --> F["GCC 11 Compiler"]
  F --> G["Updated Include Paths"]
  H["MRI Ruby Support"] --> I["Remove JRuby Dependency"]
  D --> J["New Features: Sanitizers, macOS Support"]

Loading

Grey Divider

File Changes

1. common/remote-build/cc/cc_toolchain_config.bzl ✨ Enhancement +840/-181

Comprehensive C++ toolchain configuration modernization

common/remote-build/cc/cc_toolchain_config.bzl


2. common/remote-build/cc/armeabi_cc_toolchain_config.bzl ✨ Enhancement +3/-2

Update ARM toolchain to rules_cc paths

common/remote-build/cc/armeabi_cc_toolchain_config.bzl


3. common/remote-build/cc/cc_wrapper.sh ✨ Enhancement +37/-1

Add header processing and parameter file parsing

common/remote-build/cc/cc_wrapper.sh


View more (12)
4. common/remote-build/cc/deps_scanner_wrapper.sh ✨ Enhancement +12/-0

New C++ module dependencies scanner wrapper

common/remote-build/cc/deps_scanner_wrapper.sh


5. common/remote-build/cc/validate_static_library.sh ✨ Enhancement +44/-0

New static library symbol validation script

common/remote-build/cc/validate_static_library.sh


6. common/remote-build/cc/BUILD ✨ Enhancement +54/-10

Add new toolchain support files and configurations

common/remote-build/cc/BUILD


7. common/remote-build/cc/builtin_include_directory_paths ⚙️ Configuration changes +4/-4

Update GCC include paths from 9 to 11

common/remote-build/cc/builtin_include_directory_paths


8. scripts/remote-image/create-cc-toolchain-within-image.sh ✨ Enhancement +11/-2

Migrate to MODULE.bazel and rules_cc extension

scripts/remote-image/create-cc-toolchain-within-image.sh


9. scripts/remote-image/create-cc-toolchain.sh 🐞 Bug fix +1/-0

Add user flag for Docker container execution

scripts/remote-image/create-cc-toolchain.sh


10. scripts/remote-image/Dockerfile ⚙️ Configuration changes +3/-2

Update base image to Ubuntu 22 with dependencies

scripts/remote-image/Dockerfile


11. common/remote-build/BUILD.bazel ⚙️ Configuration changes +1/-1

Update RBE container image SHA256 hash

common/remote-build/BUILD.bazel


12. MODULE.bazel Dependencies +1/-1

Upgrade rules_ruby from 0.26.0 to 0.27.0

MODULE.bazel


13. .github/workflows/ci-rbe.yml ✨ Enhancement +0/-1

Remove JRuby version specification for RBE

.github/workflows/ci-rbe.yml


14. common/remote-build/cc/REPO.bazel Additional files +0/-0

...

common/remote-build/cc/REPO.bazel


15. common/remote-build/cc/WORKSPACE Additional files +0/-2

...

common/remote-build/cc/WORKSPACE


Grey Divider

Qodo Logo

@qodo-code-review

qodo-code-review Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Code Review by Qodo

🐞 Bugs (3) 📘 Rule violations (2)

Grey Divider


Action required

1. parse_option can exit wrapper 📘 Rule violation ☼ Reliability ⭐ New
Description
cc_wrapper.sh enables set -e but parse_option() can return a non-zero status for most
arguments, which can prematurely terminate the wrapper and break header parsing/compilation. This
violates the expectation that CI/automation scripts behave fail-safely with robust command handling.
Code

common/remote-build/cc/cc_wrapper.sh[R19-31]

set -eu

+OUTPUT=
+
+parse_option() {
+    opt=$1
+    if [ "$OUTPUT" = "1" ]; then
+        OUTPUT=$opt
+    elif [ "$opt" = "-o" ]; then
+        # output is coming
+        OUTPUT=1
+    fi
+}
Evidence
Rule 10 requires CI/automation scripts to handle external commands and preconditions safely. In
cc_wrapper.sh, set -eu is enabled and parse_option() may return the exit code of `[ "$opt" =
"-o" ] (often 1`), which can terminate the script unexpectedly when called from the argument loop.

common/remote-build/cc/cc_wrapper.sh[19-46]
Best Practice: Learned patterns

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`common/remote-build/cc/cc_wrapper.sh` uses `set -eu` and calls `parse_option` as a simple command. In POSIX `sh`, a function’s return status is the status of its last executed command; here that can be the `[ ... ]` test, which returns `1` for most args. With `set -e`, that non-zero return can abort the wrapper.

## Issue Context
This wrapper runs in build actions; unexpected early exits can cause flaky or consistently failing builds in RBE/CI.

## Fix Focus Areas
- common/remote-build/cc/cc_wrapper.sh[19-31]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Root-owned toolchain regen 🐞 Bug ☼ Reliability ⭐ New
Description
scripts/remote-image/create-cc-toolchain.sh now runs the generator container with --user 0 while
bind-mounting the repo, so the regeneration step writes root-owned files into the host checkout.
This can break subsequent builds/tests or any tooling that expects the working tree to be writable
by the invoking user.
Code

scripts/remote-image/create-cc-toolchain.sh[11]

+    --user 0 \
Evidence
The repo is bind-mounted into /code and the container is explicitly run as root, while the inner
script removes/recreates and copies into /code/common/remote-build/cc, so those new files will be
owned by root on the host filesystem.

scripts/remote-image/create-cc-toolchain.sh[7-14]
scripts/remote-image/create-cc-toolchain-within-image.sh[22-27]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`create-cc-toolchain.sh` bind-mounts the repo into `/code` and runs the container as root (`--user 0`). The inner script deletes/recreates `/code/common/remote-build/cc` and copies files there, which results in root-owned files on the host checkout.

### Issue Context
This is a developer/automation footgun: after running regeneration once, subsequent commands can fail with permission errors (e.g., when Bazel or git tries to update/remove those files).

### Fix Focus Areas
- scripts/remote-image/create-cc-toolchain.sh[7-14]

### Suggested fix
Change the docker invocation to run as the calling host user, e.g.:
- `--user "$(id -u):$(id -g)"`

If root is required for package installation inside the container, keep those steps in the Docker build layer and still run the regeneration entrypoint as the host UID/GID. As a fallback, add a `chown -R $(id -u):$(id -g) /code/common/remote-build/cc` step at the end of the inner script (but prefer matching UID/GID at runtime).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Deps scanner output wrong 🐞 Bug ≡ Correctness
Description
deps_scanner_wrapper.sh redirects GCC preprocessor stdout to $DEPS_SCANNER_OUTPUT_FILE even though
GCC is configured to write the P1689 deps output to a separate file via -fdeps-file, so the
cpp_module_deps_scanning action’s declared output will contain the wrong data.
Code

common/remote-build/cc/deps_scanner_wrapper.sh[12]

+/usr/bin/gcc -E -x c++ -fmodules-ts -fdeps-file=out.tmp -fdeps-format=p1689r5 "$@" >"$DEPS_SCANNER_OUTPUT_FILE"
Evidence
The wrapper writes stdout from gcc -E to $DEPS_SCANNER_OUTPUT_FILE while separately instructing
GCC to write deps info to out.tmp, which is never copied. The toolchain config explicitly sets
DEPS_SCANNER_OUTPUT_FILE to the Bazel action output (%{output_file}), so Bazel will treat
whatever the wrapper writes there as the deps-scanner result.

common/remote-build/cc/deps_scanner_wrapper.sh[1-12]
common/remote-build/cc/cc_toolchain_config.bzl[594-607]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`deps_scanner_wrapper.sh` is intended to implement Bazel’s `cpp_module_deps_scanning` tool, but it currently writes *preprocessed source* (stdout from `gcc -E`) into the declared output file (`$DEPS_SCANNER_OUTPUT_FILE`). GCC writes the P1689 module deps data to the file specified by `-fdeps-file=...`, which is currently hard-coded to `out.tmp` and then ignored.

### Issue Context
Bazel sets `DEPS_SCANNER_OUTPUT_FILE` to the action’s `%{output_file}` for `ACTION_NAMES.cpp_module_deps_scanning`, so the wrapper must write the deps-scanner output into that file.

### Fix Focus Areas
- common/remote-build/cc/deps_scanner_wrapper.sh[1-12]
- common/remote-build/cc/cc_toolchain_config.bzl[594-607]

### Suggested fix
- Ensure the wrapper writes the P1689 output to `$DEPS_SCANNER_OUTPUT_FILE`, e.g.:
 - `: "${DEPS_SCANNER_OUTPUT_FILE:?}"`
 - run gcc with `-fdeps-file="$DEPS_SCANNER_OUTPUT_FILE"` and redirect stdout to `/dev/null`, **or** keep `-fdeps-file` pointing to a temp file and `mv`/`cp` it into `$DEPS_SCANNER_OUTPUT_FILE`.
- Avoid leaving large stdout output in the declared output file (currently it will be the preprocessor output).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


4. deps_scanner_wrapper.sh missing pipefail 📘 Rule violation ☼ Reliability
Description
The newly added CI/toolchain wrapper script uses set -eu but omits set -o pipefail, reducing
fail-safety if pipelines are introduced later or via refactors. This conflicts with the checklist
expectation for strict error handling in CI/automation scripts.
Code

common/remote-build/cc/deps_scanner_wrapper.sh[R1-6]

+#!/usr/bin/env bash
+#
+# Ship the environment to the C++ action
+#
+set -eu
+
Evidence
PR Compliance ID 13 expects strict error handling in CI/automation scripts (example given: `set -euo
pipefail). The added script explicitly uses set -eu without pipefail`.

common/remote-build/cc/deps_scanner_wrapper.sh[1-6]
Best Practice: Learned patterns

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`common/remote-build/cc/deps_scanner_wrapper.sh` is an automation wrapper used by the C++ toolchain, but it does not enable `pipefail` as part of strict shell error handling.

## Issue Context
PR Compliance requires CI/automation scripts to be fail-safe and use strict error handling (e.g., `set -euo pipefail`). Even if the script currently has no pipelines, adding `pipefail` is the expected baseline and helps prevent future silent failures.

## Fix Focus Areas
- common/remote-build/cc/deps_scanner_wrapper.sh[1-6]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


View more (1)
5. Toolchain regen path brittle 🐞 Bug ☼ Reliability
Description
create-cc-toolchain-within-image.sh hard-codes the bzlmod extension repo directory name
(rules_cc++cc_configure_extension+local_config_cc) under output_base/external, which can change with
Bazel/module-resolution behavior and can break toolchain regeneration.
Code

scripts/remote-image/create-cc-toolchain-within-image.sh[R14-27]

+cat > MODULE.bazel <<'EOF'
+module(name = "ccregen")
+bazel_dep(name = "rules_cc", version = "0.2.18")
+cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
+use_repo(cc_configure, "local_config_cc")
+EOF
+touch BUILD.bazel
+
bazel build @local_config_cc//...
+
+src="$(bazel info output_base)/external/rules_cc++cc_configure_extension+local_config_cc"
rm -rf /code/common/remote-build/cc
mkdir /code/common/remote-build/cc
-cp -Lr $(bazel info output_base)/external/local_config_cc/* /code/common/remote-build/cc
+cp -Lr "$src"/* /code/common/remote-build/cc
Evidence
The regeneration script explicitly downloads Bazelisk as /usr/bin/bazel, builds
@local_config_cc, then copies from a hard-coded
output_base/external/rules_cc++cc_configure_extension+local_config_cc path. The repo itself pins
Bazel 9.1.0 via .bazelversion, but the script’s temp workspace doesn’t include that file, so
Bazelisk can select a different Bazel version and/or produce different external repo naming/layout.

scripts/remote-image/create-cc-toolchain-within-image.sh[8-27]
.bazelversion[1-1]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The toolchain regeneration script copies `@local_config_cc` by assuming it lives at a specific path under `$(bazel info output_base)/external/<hard-coded-name>`. That `<hard-coded-name>` is derived from bzlmod/extension internals and is not a stable API.

Additionally, the script installs Bazelisk as `/usr/bin/bazel` and runs it from a fresh temp directory that does not contain the repo’s `.bazelversion`, meaning the Bazel version used for regeneration can silently drift.

### Issue Context
This script is used to regenerate `common/remote-build/cc` content inside the remote image build workflow.

### Fix Focus Areas
- scripts/remote-image/create-cc-toolchain-within-image.sh[8-27]
- .bazelversion[1-1]

### Suggested fix
1. Pin the Bazel version for regeneration:
  - Export `USE_BAZEL_VERSION=$(cat /code/.bazelversion)` before running `bazel`, **or** copy `/code/.bazelversion` into the temp dir.
2. Avoid hard-coded `output_base/external/...` paths:
  - Prefer a Bazel-provided query for the repository path (if available), e.g. `bazel info repository_path @local_config_cc`, then `cp -Lr "$(bazel info repository_path @local_config_cc)"/* ...`.
  - If `repository_path` isn’t available in your Bazel version, use another Bazel info/query mechanism that resolves `@local_config_cc` without relying on the canonical repo name string.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Previous review results

Review updated until commit 7adbc4d

Results up to commit 072bc5e


🐞 Bugs (2) 📘 Rule violations (1) 📎 Requirement gaps (0) 🎨 UX issues (0)


Remediation recommended
1. Deps scanner output wrong 🐞 Bug ≡ Correctness
Description
deps_scanner_wrapper.sh redirects GCC preprocessor stdout to $DEPS_SCANNER_OUTPUT_FILE even though
GCC is configured to write the P1689 deps output to a separate file via -fdeps-file, so the
cpp_module_deps_scanning action’s declared output will contain the wrong data.
Code

common/remote-build/cc/deps_scanner_wrapper.sh[12]

+/usr/bin/gcc -E -x c++ -fmodules-ts -fdeps-file=out.tmp -fdeps-format=p1689r5 "$@" >"$DEPS_SCANNER_OUTPUT_FILE"
Evidence
The wrapper writes stdout from gcc -E to $DEPS_SCANNER_OUTPUT_FILE while separately instructing
GCC to write deps info to out.tmp, which is never copied. The toolchain config explicitly sets
DEPS_SCANNER_OUTPUT_FILE to the Bazel action output (%{output_file}), so Bazel will treat
whatever the wrapper writes there as the deps-scanner result.

common/remote-build/cc/deps_scanner_wrapper.sh[1-12]
common/remote-build/cc/cc_toolchain_config.bzl[594-607]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
`deps_scanner_wrapper.sh` is intended to implement Bazel’s `cpp_module_deps_scanning` tool, but it currently writes *preprocessed source* (stdout from `gcc -E`) into the declared output file (`$DEPS_SCANNER_OUTPUT_FILE`). GCC writes the P1689 module deps data to the file specified by `-fdeps-file=...`, which is currently hard-coded to `out.tmp` and then ignored.

### Issue Context
Bazel sets `DEPS_SCANNER_OUTPUT_FILE` to the action’s `%{output_file}` for `ACTION_NAMES.cpp_module_deps_scanning`, so the wrapper must write the deps-scanner output into that file.

### Fix Focus Areas
- common/remote-build/cc/deps_scanner_wrapper.sh[1-12]
- common/remote-build/cc/cc_toolchain_config.bzl[594-607]

### Suggested fix
- Ensure the wrapper writes the P1689 output to `$DEPS_SCANNER_OUTPUT_FILE`, e.g.:
 - `: "${DEPS_SCANNER_OUTPUT_FILE:?}"`
 - run gcc with `-fdeps-file="$DEPS_SCANNER_OUTPUT_FILE"` and redirect stdout to `/dev/null`, **or** keep `-fdeps-file` pointing to a temp file and `mv`/`cp` it into `$DEPS_SCANNER_OUTPUT_FILE`.
- Avoid leaving large stdout output in the declared output file (currently it will be the preprocessor output).

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


2. deps_scanner_wrapper.sh missing pipefail 📘 Rule violation ☼ Reliability
Description
The newly added CI/toolchain wrapper script uses set -eu but omits set -o pipefail, reducing
fail-safety if pipelines are introduced later or via refactors. This conflicts with the checklist
expectation for strict error handling in CI/automation scripts.
Code

common/remote-build/cc/deps_scanner_wrapper.sh[R1-6]

+#!/usr/bin/env bash
+#
+# Ship the environment to the C++ action
+#
+set -eu
+
Evidence
PR Compliance ID 13 expects strict error handling in CI/automation scripts (example given: `set -euo
pipefail). The added script explicitly uses set -eu without pipefail`.

common/remote-build/cc/deps_scanner_wrapper.sh[1-6]
Best Practice: Learned patterns

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`common/remote-build/cc/deps_scanner_wrapper.sh` is an automation wrapper used by the C++ toolchain, but it does not enable `pipefail` as part of strict shell error handling.

## Issue Context
PR Compliance requires CI/automation scripts to be fail-safe and use strict error handling (e.g., `set -euo pipefail`). Even if the script currently has no pipelines, adding `pipefail` is the expected baseline and helps prevent future silent failures.

## Fix Focus Areas
- common/remote-build/cc/deps_scanner_wrapper.sh[1-6]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


3. Toolchain regen path brittle 🐞 Bug ☼ Reliability
Description
create-cc-toolchain-within-image.sh hard-codes the bzlmod extension repo directory name
(rules_cc++cc_configure_extension+local_config_cc) under output_base/external, which can change with
Bazel/module-resolution behavior and can break toolchain regeneration.
Code

scripts/remote-image/create-cc-toolchain-within-image.sh[R14-27]

+cat > MODULE.bazel <<'EOF'
+module(name = "ccregen")
+bazel_dep(name = "rules_cc", version = "0.2.18")
+cc_configure = use_extension("@rules_cc//cc:extensions.bzl", "cc_configure_extension")
+use_repo(cc_configure, "local_config_cc")
+EOF
+touch BUILD.bazel
+
bazel build @local_config_cc//...
+
+src="$(bazel info output_base)/external/rules_cc++cc_configure_extension+local_config_cc"
rm -rf /code/common/remote-build/cc
mkdir /code/common/remote-build/cc
-cp -Lr $(bazel info output_base)/external/local_config_cc/* /code/common/remote-build/cc
+cp -Lr "$src"/* /code/common/remote-build/cc
Evidence
The regeneration script explicitly downloads Bazelisk as /usr/bin/bazel, builds
@local_config_cc, then copies from a hard-coded
output_base/external/rules_cc++cc_configure_extension+local_config_cc path. The repo itself pins
Bazel 9.1.0 via .bazelversion, but the script’s temp workspace doesn’t include that file, so
Bazelisk can select a different Bazel version and/or produce different external repo naming/layout.

scripts/remote-image/create-cc-toolchain-within-image.sh[8-27]
.bazelversion[1-1]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The toolchain regeneration script copies `@local_config_cc` by assuming it lives at a specific path under `$(bazel info output_base)/external/<hard-coded-name>`. That `<hard-coded-name>` is derived from bzlmod/extension internals and is not a stable API.

Additionally, the script installs Bazelisk as `/usr/bin/bazel` and runs it from a fresh temp directory that does not contain the repo’s `.bazelversion`, meaning the Bazel version used for regeneration can silently drift.

### Issue Context
This script is used to regenerate `common/remote-build/cc` content inside the remote image build workflow.

### Fix Focus Areas
- scripts/remote-image/create-cc-toolchain-within-image.sh[8-27]
- .bazelversion[1-1]

### Suggested fix
1. Pin the Bazel version for regeneration:
  - Export `USE_BAZEL_VERSION=$(cat /code/.bazelversion)` before running `bazel`, **or** copy `/code/.bazelversion` into the temp dir.
2. Avoid hard-coded `output_base/external/...` paths:
  - Prefer a Bazel-provided query for the repository path (if available), e.g. `bazel info repository_path @local_config_cc`, then `cp -Lr "$(bazel info repository_path @local_config_cc)"/* ...`.
  - If `repository_path` isn’t available in your Bazel version, use another Bazel info/query mechanism that resolves `@local_config_cc` without relying on the canonical repo name string.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Qodo Logo

@qodo-code-review

qodo-code-review Bot commented Jun 7, 2026

Copy link
Copy Markdown
Contributor

Code review by qodo was updated up to the latest commit 7adbc4d

Comment on lines 19 to +31
set -eu

OUTPUT=

parse_option() {
opt=$1
if [ "$OUTPUT" = "1" ]; then
OUTPUT=$opt
elif [ "$opt" = "-o" ]; then
# output is coming
OUTPUT=1
fi
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Action required

1. parse_option can exit wrapper 📘 Rule violation ☼ Reliability

cc_wrapper.sh enables set -e but parse_option() can return a non-zero status for most
arguments, which can prematurely terminate the wrapper and break header parsing/compilation. This
violates the expectation that CI/automation scripts behave fail-safely with robust command handling.
Agent Prompt
## Issue description
`common/remote-build/cc/cc_wrapper.sh` uses `set -eu` and calls `parse_option` as a simple command. In POSIX `sh`, a function’s return status is the status of its last executed command; here that can be the `[ ... ]` test, which returns `1` for most args. With `set -e`, that non-zero return can abort the wrapper.

## Issue Context
This wrapper runs in build actions; unexpected early exits can cause flaky or consistently failing builds in RBE/CI.

## Fix Focus Areas
- common/remote-build/cc/cc_wrapper.sh[19-31]

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

B-build Includes scripting, bazel and CI integrations

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants