From fd1c0632ddb4ef273d41875676a665f4934270d5 Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Sat, 12 Jul 2025 19:04:08 +0200 Subject: [PATCH 1/3] [rust] Fix Windows arm64 logic for Selenium Manager and prepare CI --- .github/workflows/ci-rust.yml | 1 + rust/src/electron.rs | 2 +- rust/src/firefox.rs | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index 6b165b69cc05f..ddbbd28c742d3 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -36,6 +36,7 @@ jobs: - os: macos - os: ubuntu - os: windows + - os: windows-11-arm with: name: Tests (${{ matrix.os }}) cache-key: rust-test diff --git a/rust/src/electron.rs b/rust/src/electron.rs index 868e087111b54..ae089d98f26d0 100644 --- a/rust/src/electron.rs +++ b/rust/src/electron.rs @@ -207,7 +207,7 @@ impl SeleniumManager for ElectronManager { if X32.is(arch) { "win32-ia32" } else if ARM64.is(arch) { - "win32-arm64-x64" + "win32-arm64" } else { "win32-x64" } diff --git a/rust/src/firefox.rs b/rust/src/firefox.rs index 17b95933f5ba5..a71192f077d5f 100644 --- a/rust/src/firefox.rs +++ b/rust/src/firefox.rs @@ -554,7 +554,7 @@ impl SeleniumManager for FirefoxManager { if X32.is(arch) || major_browser_version < 42 { platform_label = "win32"; } else if ARM64.is(arch) { - platform_label = "win-aarch64"; + platform_label = "win64-aarch64"; } else { platform_label = "win64"; } From 029e59e31a4a3df493a1fda45c3210685abbee65 Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Mon, 28 Jul 2025 19:44:22 +0200 Subject: [PATCH 2/3] Add build and release logic (MSVC supports cross-compilation) --- .github/workflows/ci-rust.yml | 55 +++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index ddbbd28c742d3..101faa8d6f559 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -58,20 +58,31 @@ jobs: - name: "Update Rust" run: | rustup update - rustup toolchain install stable-i686-pc-windows-msvc - rustup default stable-i686-pc-windows-msvc + rustup target install i686-pc-windows-msvc + rustup target install aarch64-pc-windows-msvc rustc -vV - - name: "Build release binary" - run: cargo build --release + - name: "Build release binary (x86)" + run: cargo build --target i686-pc-windows-msvc --release working-directory: rust - - name: "Rename binary" - run: mv rust/target/release/selenium-manager.exe selenium-manager-windows.exe - - name: "Upload release binary" + - name: "Build release binary (arm64)" + run: cargo build --target aarch64-pc-windows-msvc --release + working-directory: rust + - name: "Rename binary (x86)" + run: mv rust/target/i686-pc-windows-msvc/release/selenium-manager.exe selenium-manager-windows.exe + - name: "Rename binary (arm64)" + run: mv rust/target/aarch64-pc-windows-msvc/release/selenium-manager.exe selenium-manager-windows-arm64.exe + - name: "Upload release binary (x86)" uses: actions/upload-artifact@v4 with: name: selenium-manager-windows path: selenium-manager-windows.exe retention-days: 6 + - name: "Upload release binary (arm64)" + uses: actions/upload-artifact@v4 + with: + name: selenium-manager-windows-arm64 + path: selenium-manager-windows-arm64.exe + retention-days: 6 windows-debug: name: "Windows Debug" @@ -88,20 +99,31 @@ jobs: - name: "Update Rust" run: | rustup update - rustup toolchain install stable-i686-pc-windows-msvc - rustup default stable-i686-pc-windows-msvc + rustup target install i686-pc-windows-msvc + rustup target install aarch64-pc-windows-msvc rustc -vV - - name: "Build release binary" - run: cargo build --profile dev + - name: "Build release binary (x86)" + run: cargo build --target i686-pc-windows-msvc --profile dev working-directory: rust - - name: "Rename binary" - run: mv rust/target/debug/selenium-manager.exe selenium-manager-windows-debug.exe - - name: "Upload release binary" + - name: "Build release binary (arm64)" + run: cargo build --target aarch64-pc-windows-msvc --profile dev + working-directory: rust + - name: "Rename binary (x86)" + run: mv rust/target/i686-pc-windows-msvc/debug/selenium-manager.exe selenium-manager-windows-debug.exe + - name: "Rename binary (arm64)" + run: mv rust/target/aarch64-pc-windows-msvc/debug/selenium-manager.exe selenium-manager-windows-arm64-debug.exe + - name: "Upload release binary (x86)" uses: actions/upload-artifact@v4 with: name: selenium-manager-windows-debug path: selenium-manager-windows-debug.exe retention-days: 6 + - name: "Upload release binary (arm64)" + uses: actions/upload-artifact@v4 + with: + name: selenium-manager-windows-arm64-debug + path: selenium-manager-windows-arm64-debug.exe + retention-days: 6 linux-stable: name: "Linux Stable" @@ -248,7 +270,8 @@ jobs: linux_sha=$(shasum -a 256 artifacts/selenium-manager-linux/selenium-manager-linux | awk '{print $1}') macos_sha=$(shasum -a 256 artifacts/selenium-manager-macos/selenium-manager-macos | awk '{print $1}') windows_sha=$(shasum -a 256 artifacts/selenium-manager-windows/selenium-manager-windows.exe | awk '{print $1}') - echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"linux\": \"$linux_sha\"}" > latest.json + windows_arm64_sha=$(shasum -a 256 artifacts/selenium-manager-windows/selenium-manager-windows-arm64.exe | awk '{print $1}') + echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"windows-arm64\": \"$windows_arm64_sha\", \"linux\": \"$linux_sha\"}" > latest.json git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" git add latest.json @@ -269,6 +292,8 @@ jobs: artifacts/selenium-manager-linux/selenium-manager-linux artifacts/selenium-manager-macos/selenium-manager-macos artifacts/selenium-manager-windows/selenium-manager-windows.exe + artifacts/selenium-manager-windows-arm64/selenium-manager-windows-arm64.exe artifacts/selenium-manager-linux-debug/selenium-manager-linux-debug.tar artifacts/selenium-manager-macos-debug/selenium-manager-macos-debug.tar artifacts/selenium-manager-windows-debug/selenium-manager-windows-debug.exe + artifacts/selenium-manager-windows-arm64-debug/selenium-manager-windows-arm64-debug.exe From 560650ba9ff6d488392b75e8bba41b993088bdcf Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Mon, 28 Jul 2025 20:04:09 +0200 Subject: [PATCH 3/3] bazel.yml: fix Windows detection logic to also work on windows-11-arm --- .github/workflows/bazel.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 017ab6fa92eea..5820db7d3168e 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -89,16 +89,16 @@ jobs: if: contains(github.ref, 'renovate/') run: git pull origin ${{ github.ref }} - name: Free space - if: inputs.os != 'windows' + if: "!contains(inputs.os, 'windows')" run: ./scripts/github-actions/free-disk-space.sh - name: Remove driver directories Windows - if: inputs.os == 'windows' + if: contains(inputs.os, 'windows') run: | rm "$env:ChromeWebDriver" -r -v rm "$env:EdgeWebDriver" -r -v rm "$env:GeckoWebDriver" -r -v - name: Remove driver directories Non-Windows - if: inputs.os != 'windows' + if: "!contains(inputs.os, 'windows')" run: | sudo rm -rf "$CHROMEWEBDRIVER" "$EDGEWEBDRIVER" "$GECKOWEBDRIVER" - name: Set Ruby version @@ -132,7 +132,7 @@ jobs: name: ${{ inputs.cache-key }} manifest: crates: rust/Cargo.Bazel.lock - rules_ruby++ruby+ruby: ${{ inputs.os == 'windows' && 'false' || 'rb/.ruby-version' }} + rules_ruby++ruby+ruby: ${{ contains(inputs.os, 'windows') && 'false' || 'rb/.ruby-version' }} repository-cache: true - name: Setup Bazel without caching if: inputs.caching == false @@ -150,7 +150,7 @@ jobs: fluxbox -display :99 & echo "DISPLAY=:99" >> "$GITHUB_ENV" - name: Set resolution - if: inputs.os == 'windows' && inputs.browser != '' + if: contains(inputs.os, 'windows') && inputs.browser != '' run: Set-DisplayResolution -Width 1920 -Height 1080 -Force - name: Setup Safari if: inputs.browser == 'safari'