From de5e3b243f747f6417af11b219e6cb52177707e4 Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Sat, 12 Jul 2025 13:45:06 +0200 Subject: [PATCH 1/5] [rust] Enable tests in GitHub Actions on Linux arm64 Now that GitHub-hosted Linux arm64 runners are available, we can start using them to test the Selenium Manager code. --- .github/workflows/ci-rust.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index 6b165b69cc05f..ff0dc40890ef6 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -35,6 +35,7 @@ jobs: include: - os: macos - os: ubuntu + - os: ubuntu-24.04-arm - os: windows with: name: Tests (${{ matrix.os }}) From a88d4e16594a37fd648bddd2be1550989b3f080b Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Sat, 12 Jul 2025 15:17:16 +0200 Subject: [PATCH 2/5] [rust] Selenium Manager: Update tests to work with Linux arm64 Currently, only Firefox and Geckodriver have official support for Linux arm64. This commit ensures that the Selenium Manager test suite passes on this platform, by skipping tests on non- Firefox browsers. --- rust/src/chrome.rs | 2 ++ rust/src/edge.rs | 3 ++ rust/tests/browser_download_tests.rs | 39 +++++++++++++++----------- rust/tests/browser_tests.rs | 9 ++++++ rust/tests/cache_tests.rs | 1 + rust/tests/common.rs | 6 ++++ rust/tests/config_tests.rs | 5 ++++ rust/tests/exec_driver_tests.rs | 5 ++++ rust/tests/mirror_tests.rs | 4 +-- rust/tests/offline_tests.rs | 15 ++++++---- rust/tests/output_tests.rs | 41 +++++++++++++++++++--------- rust/tests/proxy_tests.rs | 14 +++++++--- rust/tests/stable_browser_tests.rs | 6 ++++ rust/tests/webview_tests.rs | 1 + 14 files changed, 111 insertions(+), 40 deletions(-) diff --git a/rust/src/chrome.rs b/rust/src/chrome.rs index 9467faa6d091b..1befde50d34cf 100644 --- a/rust/src/chrome.rs +++ b/rust/src/chrome.rs @@ -383,6 +383,8 @@ impl SeleniumManager for ChromeManager { } else { "mac64" } + } else if LINUX.is(os) && ARM64.is(arch) { + return Err(anyhow!("Linux arm64 is not supported yet by Google Chrome. Please try another browser.")); } else { "linux64" }; diff --git a/rust/src/edge.rs b/rust/src/edge.rs index 607c5174d696e..6d9f981cf5090 100644 --- a/rust/src/edge.rs +++ b/rust/src/edge.rs @@ -28,6 +28,7 @@ use crate::{ DASH_DASH_VERSION, DEV, ENV_PROGRAM_FILES_X86, NIGHTLY, OFFLINE_REQUEST_ERR_MSG, REG_PV_ARG, REG_VERSION_ARG, STABLE, }; +use anyhow::anyhow; use anyhow::Error; use reqwest::Client; use serde::{Deserialize, Serialize}; @@ -288,6 +289,8 @@ impl SeleniumManager for EdgeManager { } else { "mac64" } + } else if LINUX.is(os) && ARM64.is(arch) { + return Err(anyhow!("Linux arm64 is not supported yet by Google Chrome. Please try another browser.")); } else { "linux64" }; diff --git a/rust/tests/browser_download_tests.rs b/rust/tests/browser_download_tests.rs index 23214694a4218..a25dc8004a409 100644 --- a/rust/tests/browser_download_tests.rs +++ b/rust/tests/browser_download_tests.rs @@ -18,6 +18,7 @@ use crate::common::{assert_browser, assert_driver, get_selenium_manager}; use rstest::rstest; +use std::env::consts::ARCH; use std::env::consts::OS; mod common; @@ -27,23 +28,27 @@ mod common; #[case("firefox")] #[case("edge")] fn browser_latest_download_test(#[case] browser: String) { - if !browser.eq("edge") || !OS.eq("windows") { - let mut cmd = get_selenium_manager(); - cmd.args([ - "--browser", - &browser, - "--force-browser-download", - "--output", - "json", - "--debug", - ]) - .assert() - .success() - .code(0); - - assert_driver(&mut cmd); - assert_browser(&mut cmd); + if browser.eq("edge") && OS.eq("windows") { + return + } else if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { + return } + + let mut cmd = get_selenium_manager(); + cmd.args([ + "--browser", + &browser, + "--force-browser-download", + "--output", + "json", + "--debug", + ]) + .assert() + .success() + .code(0); + + assert_driver(&mut cmd); + assert_browser(&mut cmd); } #[rstest] @@ -59,6 +64,8 @@ fn browser_latest_download_test(#[case] browser: String) { fn browser_version_download_test(#[case] browser: String, #[case] browser_version: String) { if OS.eq("windows") && browser.eq("edge") { println!("Skipping Edge download test on Windows since the installation requires admin privileges"); + } else if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { + println!("Skipping non-Firefox download test on Linux arm64 since no other browsers are supported yet"); } else { let mut cmd = get_selenium_manager(); cmd.args([ diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index 13bf093a12564..c340b6ce9f833 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -19,6 +19,7 @@ use crate::common::{assert_output, get_selenium_manager, get_stdout}; use exitcode::DATAERR; use rstest::rstest; +use std::env::consts::ARCH; use std::env::consts::OS; use std::path::Path; @@ -40,6 +41,10 @@ fn browser_version_test( #[case] browser_version: String, #[case] driver_version: String, ) { + if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { + return + } + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", @@ -78,6 +83,10 @@ fn wrong_parameters_test( #[case] driver_version: String, #[case] error_code: i32, ) { + if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { + return + } + let mut cmd = get_selenium_manager(); let result = cmd .args([ diff --git a/rust/tests/cache_tests.rs b/rust/tests/cache_tests.rs index 68478fb73826f..18ef1ad23aa4f 100644 --- a/rust/tests/cache_tests.rs +++ b/rust/tests/cache_tests.rs @@ -23,6 +23,7 @@ use std::path::Path; mod common; +#[cfg(not(all(target_os = "linux", target_arch = "aarch64")))] #[rstest] #[case("../tmp")] #[case("../áèîö")] diff --git a/rust/tests/common.rs b/rust/tests/common.rs index ae8c820b1d4e6..07693212370ba 100644 --- a/rust/tests/common.rs +++ b/rust/tests/common.rs @@ -23,6 +23,7 @@ use selenium_manager::logger::JsonOutput; use selenium_manager::shell; use selenium_manager::shell::run_shell_command_by_os; use std::borrow::BorrowMut; +use std::env::consts::ARCH; use std::env::consts::OS; use std::path::{Path, PathBuf}; @@ -119,3 +120,8 @@ pub fn assert_output( .contains(&error_code.to_string())); } } + +#[allow(dead_code)] +pub fn is_linux_arm64() -> bool { + OS == "linux" && ARCH == "aarch64" +} diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index df41f9c29bf01..087f412b7fa50 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -19,6 +19,8 @@ use crate::common::{assert_browser, assert_driver, get_selenium_manager, get_std use rstest::rstest; +use std::env::consts::ARCH; +use std::env::consts::OS; use std::fs::File; use std::io::{BufWriter, Write}; use tempfile::Builder; @@ -30,6 +32,9 @@ mod common; #[case("firefox")] #[case("edge")] fn config_test(#[case] browser_name: String) { + if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { + return + } let tmp_dir = Builder::new().prefix("sm-config-test").tempdir().unwrap(); let config_path = tmp_dir.path().join("se-config.toml"); let config_file = File::create(config_path.as_path()).unwrap(); diff --git a/rust/tests/exec_driver_tests.rs b/rust/tests/exec_driver_tests.rs index da6db43ecb304..137f48ad5e739 100644 --- a/rust/tests/exec_driver_tests.rs +++ b/rust/tests/exec_driver_tests.rs @@ -18,6 +18,7 @@ use crate::common::{assert_browser, assert_driver, exec_driver, get_selenium_manager}; use rstest::rstest; +use std::env::consts::ARCH; use std::env::consts::OS; mod common; @@ -28,6 +29,10 @@ mod common; #[case("firefox", "geckodriver")] #[case("iexplorer", "IEDriverServer")] fn exec_driver_test(#[case] browser_name: String, #[case] driver_name: String) { + if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { + return + } + let mut cmd = get_selenium_manager(); cmd.args(["--browser", &browser_name, "--output", "json"]) .assert() diff --git a/rust/tests/mirror_tests.rs b/rust/tests/mirror_tests.rs index 127fb37f17b86..9421544b19558 100644 --- a/rust/tests/mirror_tests.rs +++ b/rust/tests/mirror_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_driver, get_selenium_manager}; +use crate::common::{assert_driver, is_linux_arm64, get_selenium_manager}; mod common; @@ -24,7 +24,7 @@ fn mirror_test() { let mut cmd = get_selenium_manager(); cmd.args([ "--browser", - "chrome", + if is_linux_arm64() { "firefox" } else { "chrome" }, "--driver-mirror-url", "https://registry.npmmirror.com/-/binary/chromedriver/", "--browser-version", diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index 2d1020a4532f3..e56ebf380600d 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -15,17 +15,22 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{get_selenium_manager, get_stdout}; +use crate::common::{get_selenium_manager, get_stdout, is_linux_arm64}; mod common; #[test] fn offline_test() { let mut cmd = get_selenium_manager(); - cmd.args(["--debug", "--browser", "chrome", "--offline"]) - .assert() - .success() - .code(0); + cmd.args([ + "--debug", + "--browser", + if is_linux_arm64() { "firefox" } else { "chrome" }, + "--offline" + ]) + .assert() + .success() + .code(0); let stdout = get_stdout(&mut cmd); diff --git a/rust/tests/output_tests.rs b/rust/tests/output_tests.rs index 96eb7104c5d21..08ca20456f283 100644 --- a/rust/tests/output_tests.rs +++ b/rust/tests/output_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{get_selenium_manager, get_stderr, get_stdout}; +use crate::common::{get_selenium_manager, get_stderr, get_stdout, is_linux_arm64}; use selenium_manager::logger::{JsonOutput, MinimalJson, DRIVER_PATH}; use std::path::Path; @@ -25,10 +25,15 @@ mod common; #[test] fn json_output_test() { let mut cmd = get_selenium_manager(); - cmd.args(["--browser", "chrome", "--output", "json"]) - .assert() - .success() - .code(0); + cmd.args([ + "--browser", + if is_linux_arm64() { "firefox" } else { "chrome" }, + "--output", + "json" + ]) + .assert() + .success() + .code(0); let stdout = get_stdout(&mut cmd); @@ -45,10 +50,15 @@ fn json_output_test() { #[test] fn shell_output_test() { let mut cmd = get_selenium_manager(); - cmd.args(["--browser", "chrome", "--output", "shell"]) - .assert() - .success() - .code(0); + cmd.args([ + "--browser", + if is_linux_arm64() { "firefox" } else { "chrome" }, + "--output", + "shell" + ]) + .assert() + .success() + .code(0); let stdout = get_stdout(&mut cmd); assert!(stdout.contains(DRIVER_PATH)); @@ -57,10 +67,15 @@ fn shell_output_test() { #[test] fn mixed_output_test() { let mut cmd = get_selenium_manager(); - cmd.args(["--browser", "chrome", "--output", "mixed"]) - .assert() - .success() - .code(0); + cmd.args([ + "--browser", + if is_linux_arm64() { "firefox" } else { "chrome" }, + "--output", + "mixed" + ]) + .assert() + .success() + .code(0); let stdout = get_stdout(&mut cmd); let json: MinimalJson = serde_json::from_str(&stdout).unwrap(); diff --git a/rust/tests/proxy_tests.rs b/rust/tests/proxy_tests.rs index f66cc0a2b1037..41ce08866c642 100644 --- a/rust/tests/proxy_tests.rs +++ b/rust/tests/proxy_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_output, get_selenium_manager}; +use crate::common::{assert_output, get_selenium_manager, is_linux_arm64}; use exitcode::DATAERR; @@ -28,7 +28,7 @@ async fn wrong_proxy_test() { .args([ "--debug", "--browser", - "chrome", + if is_linux_arm64() { "firefox" } else { "chrome" }, "--proxy", "http://localhost:12345", ]) @@ -37,11 +37,17 @@ async fn wrong_proxy_test() { assert_output(&mut cmd, result, vec!["in PATH"], DATAERR); } + #[test] fn wrong_protocol_proxy_test() { let mut cmd = get_selenium_manager(); let result = cmd - .args(["--browser", "chrome", "--proxy", "wrong:://proxy"]) + .args([ + "--browser", + if is_linux_arm64() { "firefox" } else { "chrome" }, + "--proxy", + "wrong:://proxy" + ]) .assert() .try_success(); @@ -54,7 +60,7 @@ fn wrong_port_proxy_test() { let result = cmd .args([ "--browser", - "chrome", + if is_linux_arm64() { "firefox" } else { "chrome" }, "--proxy", "https:://localhost:1234567", ]) diff --git a/rust/tests/stable_browser_tests.rs b/rust/tests/stable_browser_tests.rs index c51ab8720889e..f059a7c1e2913 100644 --- a/rust/tests/stable_browser_tests.rs +++ b/rust/tests/stable_browser_tests.rs @@ -18,6 +18,8 @@ use crate::common::{assert_browser, assert_driver, get_selenium_manager}; use rstest::rstest; +use std::env::consts::ARCH; +use std::env::consts::OS; mod common; @@ -26,6 +28,10 @@ mod common; #[case("firefox")] #[case("edge")] fn stable_browser_test(#[case] browser_name: String) { + if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { + return + } + let mut cmd = get_selenium_manager(); cmd.args([ "--browser", diff --git a/rust/tests/webview_tests.rs b/rust/tests/webview_tests.rs index 1356f6973652e..7f89b7f302c41 100644 --- a/rust/tests/webview_tests.rs +++ b/rust/tests/webview_tests.rs @@ -19,6 +19,7 @@ use crate::common::{assert_driver, get_selenium_manager}; mod common; +#[cfg(not(all(target_os = "linux", target_arch = "aarch64")))] #[test] fn webview2_test() { let mut cmd = get_selenium_manager(); From 94b2d3500ec98e9fef95c977e241a8ac1e3b2e5a Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Sat, 12 Jul 2025 15:50:33 +0200 Subject: [PATCH 3/5] Apply AI review suggestions --- rust/src/edge.rs | 2 +- rust/tests/browser_download_tests.rs | 4 ++-- rust/tests/browser_tests.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/src/edge.rs b/rust/src/edge.rs index 6d9f981cf5090..4c8bb388b4744 100644 --- a/rust/src/edge.rs +++ b/rust/src/edge.rs @@ -290,7 +290,7 @@ impl SeleniumManager for EdgeManager { "mac64" } } else if LINUX.is(os) && ARM64.is(arch) { - return Err(anyhow!("Linux arm64 is not supported yet by Google Chrome. Please try another browser.")); + return Err(anyhow!("Linux arm64 is not supported yet by Microsoft Edge. Please try another browser.")); } else { "linux64" }; diff --git a/rust/tests/browser_download_tests.rs b/rust/tests/browser_download_tests.rs index a25dc8004a409..b15bd2c14994e 100644 --- a/rust/tests/browser_download_tests.rs +++ b/rust/tests/browser_download_tests.rs @@ -29,9 +29,9 @@ mod common; #[case("edge")] fn browser_latest_download_test(#[case] browser: String) { if browser.eq("edge") && OS.eq("windows") { - return + return; } else if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { - return + return; } let mut cmd = get_selenium_manager(); diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index c340b6ce9f833..0caea6843fbcc 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -42,7 +42,7 @@ fn browser_version_test( #[case] driver_version: String, ) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { - return + return; } let mut cmd = get_selenium_manager(); From 1855709c77b797e656617f956a49581d840d5651 Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Mon, 14 Jul 2025 13:49:46 +0200 Subject: [PATCH 4/5] Fix formatting --- rust/src/chrome.rs | 4 +++- rust/src/edge.rs | 4 +++- rust/tests/browser_download_tests.rs | 4 ++-- rust/tests/browser_tests.rs | 4 ++-- rust/tests/common.rs | 2 +- rust/tests/config_tests.rs | 2 +- rust/tests/exec_driver_tests.rs | 2 +- rust/tests/mirror_tests.rs | 8 +++++-- rust/tests/offline_tests.rs | 8 +++++-- rust/tests/output_tests.rs | 36 ++++++++++++++++++---------- rust/tests/proxy_tests.rs | 24 ++++++++++++++----- rust/tests/stable_browser_tests.rs | 2 +- 12 files changed, 68 insertions(+), 32 deletions(-) diff --git a/rust/src/chrome.rs b/rust/src/chrome.rs index 1befde50d34cf..3aad66ae6144b 100644 --- a/rust/src/chrome.rs +++ b/rust/src/chrome.rs @@ -384,7 +384,9 @@ impl SeleniumManager for ChromeManager { "mac64" } } else if LINUX.is(os) && ARM64.is(arch) { - return Err(anyhow!("Linux arm64 is not supported yet by Google Chrome. Please try another browser.")); + return Err(anyhow!( + "Linux arm64 is not supported yet by Google Chrome. Please try another browser." + )); } else { "linux64" }; diff --git a/rust/src/edge.rs b/rust/src/edge.rs index 4c8bb388b4744..e5e01e6ff3a50 100644 --- a/rust/src/edge.rs +++ b/rust/src/edge.rs @@ -290,7 +290,9 @@ impl SeleniumManager for EdgeManager { "mac64" } } else if LINUX.is(os) && ARM64.is(arch) { - return Err(anyhow!("Linux arm64 is not supported yet by Microsoft Edge. Please try another browser.")); + return Err(anyhow!( + "Linux arm64 is not supported yet by Microsoft Edge. Please try another browser." + )); } else { "linux64" }; diff --git a/rust/tests/browser_download_tests.rs b/rust/tests/browser_download_tests.rs index b15bd2c14994e..d72cbebef37e0 100644 --- a/rust/tests/browser_download_tests.rs +++ b/rust/tests/browser_download_tests.rs @@ -29,9 +29,9 @@ mod common; #[case("edge")] fn browser_latest_download_test(#[case] browser: String) { if browser.eq("edge") && OS.eq("windows") { - return; + return; } else if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { - return; + return; } let mut cmd = get_selenium_manager(); diff --git a/rust/tests/browser_tests.rs b/rust/tests/browser_tests.rs index 0caea6843fbcc..be9f7d9c01e91 100644 --- a/rust/tests/browser_tests.rs +++ b/rust/tests/browser_tests.rs @@ -42,7 +42,7 @@ fn browser_version_test( #[case] driver_version: String, ) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { - return; + return; } let mut cmd = get_selenium_manager(); @@ -84,7 +84,7 @@ fn wrong_parameters_test( #[case] error_code: i32, ) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser.eq("firefox") { - return + return; } let mut cmd = get_selenium_manager(); diff --git a/rust/tests/common.rs b/rust/tests/common.rs index 07693212370ba..746de1d8c7aa3 100644 --- a/rust/tests/common.rs +++ b/rust/tests/common.rs @@ -123,5 +123,5 @@ pub fn assert_output( #[allow(dead_code)] pub fn is_linux_arm64() -> bool { - OS == "linux" && ARCH == "aarch64" + OS == "linux" && ARCH == "aarch64" } diff --git a/rust/tests/config_tests.rs b/rust/tests/config_tests.rs index 087f412b7fa50..ad872a2eb1af2 100644 --- a/rust/tests/config_tests.rs +++ b/rust/tests/config_tests.rs @@ -33,7 +33,7 @@ mod common; #[case("edge")] fn config_test(#[case] browser_name: String) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { - return + return; } let tmp_dir = Builder::new().prefix("sm-config-test").tempdir().unwrap(); let config_path = tmp_dir.path().join("se-config.toml"); diff --git a/rust/tests/exec_driver_tests.rs b/rust/tests/exec_driver_tests.rs index 137f48ad5e739..33e394730f838 100644 --- a/rust/tests/exec_driver_tests.rs +++ b/rust/tests/exec_driver_tests.rs @@ -30,7 +30,7 @@ mod common; #[case("iexplorer", "IEDriverServer")] fn exec_driver_test(#[case] browser_name: String, #[case] driver_name: String) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { - return + return; } let mut cmd = get_selenium_manager(); diff --git a/rust/tests/mirror_tests.rs b/rust/tests/mirror_tests.rs index 9421544b19558..737a9413462ff 100644 --- a/rust/tests/mirror_tests.rs +++ b/rust/tests/mirror_tests.rs @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -use crate::common::{assert_driver, is_linux_arm64, get_selenium_manager}; +use crate::common::{assert_driver, get_selenium_manager, is_linux_arm64}; mod common; @@ -24,7 +24,11 @@ fn mirror_test() { let mut cmd = get_selenium_manager(); cmd.args([ "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, "--driver-mirror-url", "https://registry.npmmirror.com/-/binary/chromedriver/", "--browser-version", diff --git a/rust/tests/offline_tests.rs b/rust/tests/offline_tests.rs index e56ebf380600d..114b8e9982117 100644 --- a/rust/tests/offline_tests.rs +++ b/rust/tests/offline_tests.rs @@ -25,8 +25,12 @@ fn offline_test() { cmd.args([ "--debug", "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, - "--offline" + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, + "--offline", ]) .assert() .success() diff --git a/rust/tests/output_tests.rs b/rust/tests/output_tests.rs index 08ca20456f283..a99f247aa6393 100644 --- a/rust/tests/output_tests.rs +++ b/rust/tests/output_tests.rs @@ -26,10 +26,14 @@ mod common; fn json_output_test() { let mut cmd = get_selenium_manager(); cmd.args([ - "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, - "--output", - "json" + "--browser", + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, + "--output", + "json", ]) .assert() .success() @@ -51,10 +55,14 @@ fn json_output_test() { fn shell_output_test() { let mut cmd = get_selenium_manager(); cmd.args([ - "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, - "--output", - "shell" + "--browser", + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, + "--output", + "shell", ]) .assert() .success() @@ -68,10 +76,14 @@ fn shell_output_test() { fn mixed_output_test() { let mut cmd = get_selenium_manager(); cmd.args([ - "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, - "--output", - "mixed" + "--browser", + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, + "--output", + "mixed", ]) .assert() .success() diff --git a/rust/tests/proxy_tests.rs b/rust/tests/proxy_tests.rs index 41ce08866c642..9e01a827de676 100644 --- a/rust/tests/proxy_tests.rs +++ b/rust/tests/proxy_tests.rs @@ -28,7 +28,11 @@ async fn wrong_proxy_test() { .args([ "--debug", "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, "--proxy", "http://localhost:12345", ]) @@ -43,10 +47,14 @@ fn wrong_protocol_proxy_test() { let mut cmd = get_selenium_manager(); let result = cmd .args([ - "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, - "--proxy", - "wrong:://proxy" + "--browser", + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, + "--proxy", + "wrong:://proxy", ]) .assert() .try_success(); @@ -60,7 +68,11 @@ fn wrong_port_proxy_test() { let result = cmd .args([ "--browser", - if is_linux_arm64() { "firefox" } else { "chrome" }, + if is_linux_arm64() { + "firefox" + } else { + "chrome" + }, "--proxy", "https:://localhost:1234567", ]) diff --git a/rust/tests/stable_browser_tests.rs b/rust/tests/stable_browser_tests.rs index f059a7c1e2913..05266a5798153 100644 --- a/rust/tests/stable_browser_tests.rs +++ b/rust/tests/stable_browser_tests.rs @@ -29,7 +29,7 @@ mod common; #[case("edge")] fn stable_browser_test(#[case] browser_name: String) { if OS.eq("linux") && ARCH.eq("aarch64") && !browser_name.eq("firefox") { - return + return; } let mut cmd = get_selenium_manager(); From 65e8c659540a9c75772177c520cef5819d307be2 Mon Sep 17 00:00:00 2001 From: Dennis Ameling Date: Mon, 28 Jul 2025 18:42:46 +0200 Subject: [PATCH 5/5] Add release logic for Linux arm64 binaries --- .github/workflows/ci-rust.yml | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-rust.yml b/.github/workflows/ci-rust.yml index ff0dc40890ef6..3c11bf0e51c83 100644 --- a/.github/workflows/ci-rust.yml +++ b/.github/workflows/ci-rust.yml @@ -120,17 +120,28 @@ jobs: - name: "Install cross" run: | cargo install cross --git https://github.com/cross-rs/cross - - name: "Build release binary" + - name: "Build release binary (x64)" run: cross build --target x86_64-unknown-linux-musl --release working-directory: rust + - name: "Build release binary (arm64)" + run: cross build --target aarch64-unknown-linux-musl --release + working-directory: rust - name: "Rename binary" - run: mv rust/target/x86_64-unknown-linux-musl/release/selenium-manager selenium-manager-linux + run: | + mv rust/target/x86_64-unknown-linux-musl/release/selenium-manager selenium-manager-linux + mv rust/target/aarch64-unknown-linux-musl/release/selenium-manager selenium-manager-linux-arm64 - name: "Upload release binary" uses: actions/upload-artifact@v4 with: name: selenium-manager-linux path: selenium-manager-linux retention-days: 6 + - name: "Upload release binary" + uses: actions/upload-artifact@v4 + with: + name: selenium-manager-linux-arm64 + path: selenium-manager-linux-arm64 + retention-days: 6 linux-debug: name: "Linux Debug" @@ -149,18 +160,30 @@ jobs: - name: "Install cross" run: | cargo install cross --git https://github.com/cross-rs/cross - - name: "Build release binary" + - name: "Build release binary (x64)" run: | cross build --target x86_64-unknown-linux-musl --profile dev cd target/x86_64-unknown-linux-musl/debug tar -cvf ../../../../selenium-manager-linux-debug.tar selenium-manager working-directory: rust + - name: "Build release binary (arm64)" + run: | + cross build --target aarch64-unknown-linux-musl --profile dev + cd target/aarch64-unknown-linux-musl/debug + tar -cvf ../../../../selenium-manager-linux-arm64-debug.tar selenium-manager + working-directory: rust - name: "Upload release binary" uses: actions/upload-artifact@v4 with: name: selenium-manager-linux-debug path: selenium-manager-linux-debug.tar retention-days: 6 + - name: "Upload release binary" + uses: actions/upload-artifact@v4 + with: + name: selenium-manager-linux-arm64-debug + path: selenium-manager-linux-arm64-debug.tar + retention-days: 6 macos-stable: name: "MacOS Stable" @@ -246,9 +269,10 @@ jobs: - name: "Prepare and Commit" run: | linux_sha=$(shasum -a 256 artifacts/selenium-manager-linux/selenium-manager-linux | awk '{print $1}') + linux_arm64_sha=$(shasum -a 256 artifacts/selenium-manager-linux-arm64/selenium-manager-linux-arm64 | 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 + echo "{\"macos\": \"$macos_sha\", \"windows\": \"$windows_sha\", \"linux\": \"$linux_sha\", \"linux-arm64\": \"$linux_arm64_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 @@ -267,6 +291,7 @@ jobs: prerelease: false files: | artifacts/selenium-manager-linux/selenium-manager-linux + artifacts/selenium-manager-linux-arm64/selenium-manager-linux-arm64 artifacts/selenium-manager-macos/selenium-manager-macos artifacts/selenium-manager-windows/selenium-manager-windows.exe artifacts/selenium-manager-linux-debug/selenium-manager-linux-debug.tar