diff --git a/codex-rs/core/tests/common/lib.rs b/codex-rs/core/tests/common/lib.rs index a26cd5ae77..b5ef6dd355 100644 --- a/codex-rs/core/tests/common/lib.rs +++ b/codex-rs/core/tests/common/lib.rs @@ -483,3 +483,28 @@ macro_rules! skip_if_windows { } }}; } + +pub fn is_github_actions_linux_aarch64() -> bool { + cfg!(all(target_os = "linux", target_arch = "aarch64")) + && ::std::env::var("GITHUB_ACTIONS").is_ok() +} + +#[macro_export] +macro_rules! skip_if_github_actions_linux_aarch64 { + () => {{ + if $crate::is_github_actions_linux_aarch64() { + println!( + "Skipping test because the default Linux sandbox is unavailable on GitHub Actions linux-aarch64." + ); + return; + } + }}; + ($return_value:expr $(,)?) => {{ + if $crate::is_github_actions_linux_aarch64() { + println!( + "Skipping test because the default Linux sandbox is unavailable on GitHub Actions linux-aarch64." + ); + return $return_value; + } + }}; +} diff --git a/codex-rs/core/tests/suite/abort_tasks.rs b/codex-rs/core/tests/suite/abort_tasks.rs index f56e229999..f2326c4189 100644 --- a/codex-rs/core/tests/suite/abort_tasks.rs +++ b/codex-rs/core/tests/suite/abort_tasks.rs @@ -12,6 +12,7 @@ use core_test_support::responses::mount_sse_once; use core_test_support::responses::mount_sse_sequence; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_github_actions_linux_aarch64; use core_test_support::test_codex::test_codex; use core_test_support::wait_for_event; use regex_lite::Regex; @@ -70,6 +71,8 @@ async fn interrupt_long_running_tool_emits_turn_aborted() { /// responses server, and ensures the model receives the synthesized abort. #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn interrupt_tool_records_history_entries() { + skip_if_github_actions_linux_aarch64!(); + let command = "sleep 60"; let call_id = "call-history"; diff --git a/codex-rs/core/tests/suite/approvals.rs b/codex-rs/core/tests/suite/approvals.rs index 34934b3d4b..3168ede83c 100644 --- a/codex-rs/core/tests/suite/approvals.rs +++ b/codex-rs/core/tests/suite/approvals.rs @@ -31,6 +31,7 @@ use core_test_support::responses::ev_response_created; use core_test_support::responses::mount_sse_once; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_github_actions_linux_aarch64; use core_test_support::skip_if_no_network; use core_test_support::test_codex::TestCodex; use core_test_support::test_codex::test_codex; @@ -1573,6 +1574,7 @@ fn scenarios() -> Vec { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn approval_matrix_covers_all_modes() -> Result<()> { + skip_if_github_actions_linux_aarch64!(Ok(())); skip_if_no_network!(Ok(())); for scenario in scenarios() { diff --git a/codex-rs/core/tests/suite/tool_parallelism.rs b/codex-rs/core/tests/suite/tool_parallelism.rs index 357dcff0fd..d3daf2ba89 100644 --- a/codex-rs/core/tests/suite/tool_parallelism.rs +++ b/codex-rs/core/tests/suite/tool_parallelism.rs @@ -20,6 +20,7 @@ use core_test_support::responses::mount_sse_once; use core_test_support::responses::mount_sse_sequence; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_github_actions_linux_aarch64; use core_test_support::skip_if_no_network; use core_test_support::streaming_sse::StreamingSseChunk; use core_test_support::streaming_sse::start_streaming_sse_server; @@ -141,6 +142,7 @@ async fn read_file_tools_run_in_parallel() -> anyhow::Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn shell_tools_run_in_parallel() -> anyhow::Result<()> { + skip_if_github_actions_linux_aarch64!(Ok(())); skip_if_no_network!(Ok(())); let server = start_mock_server().await; diff --git a/codex-rs/core/tests/suite/tools.rs b/codex-rs/core/tests/suite/tools.rs index 9f1803c75e..cfc325d891 100644 --- a/codex-rs/core/tests/suite/tools.rs +++ b/codex-rs/core/tests/suite/tools.rs @@ -21,6 +21,7 @@ use core_test_support::responses::mount_sse_once; use core_test_support::responses::mount_sse_sequence; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_github_actions_linux_aarch64; use core_test_support::skip_if_no_network; use core_test_support::test_codex::test_codex; use regex_lite::Regex; @@ -190,6 +191,7 @@ async fn shell_escalated_permissions_rejected_then_ok() -> Result<()> { #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn sandbox_denied_shell_returns_original_output() -> Result<()> { + skip_if_github_actions_linux_aarch64!(Ok(())); skip_if_no_network!(Ok(())); let server = start_mock_server().await; diff --git a/codex-rs/core/tests/suite/unified_exec.rs b/codex-rs/core/tests/suite/unified_exec.rs index 705e415620..2384e027fa 100644 --- a/codex-rs/core/tests/suite/unified_exec.rs +++ b/codex-rs/core/tests/suite/unified_exec.rs @@ -24,6 +24,7 @@ use core_test_support::responses::ev_response_created; use core_test_support::responses::mount_sse_sequence; use core_test_support::responses::sse; use core_test_support::responses::start_mock_server; +use core_test_support::skip_if_github_actions_linux_aarch64; use core_test_support::skip_if_no_network; use core_test_support::skip_if_sandbox; use core_test_support::skip_if_windows; @@ -2493,6 +2494,7 @@ PY #[tokio::test(flavor = "multi_thread", worker_threads = 2)] async fn unified_exec_runs_under_sandbox() -> Result<()> { + skip_if_github_actions_linux_aarch64!(Ok(())); skip_if_no_network!(Ok(())); skip_if_sandbox!(Ok(())); skip_if_windows!(Ok(()));