mirror of
https://github.com/openai/codex.git
synced 2026-04-27 16:15:09 +00:00
Stabilize exec-server filesystem tests in CI (#17671)
## Summary\n- add an exec-server package-local test helper binary that can run exec-server and fs-helper flows\n- route exec-server filesystem tests through that helper instead of cross-crate codex helper binaries\n- stop relying on Bazel-only extra binary wiring for these tests\n\n## Testing\n- not run (per repo guidance for codex changes) --------- Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
77
codex-rs/test-binary-support/lib.rs
Normal file
77
codex-rs/test-binary-support/lib.rs
Normal file
@@ -0,0 +1,77 @@
|
||||
use std::path::Path;
|
||||
|
||||
use codex_arg0::Arg0DispatchPaths;
|
||||
use codex_arg0::Arg0PathEntryGuard;
|
||||
use codex_arg0::arg0_dispatch;
|
||||
use tempfile::TempDir;
|
||||
|
||||
pub struct TestBinaryDispatchGuard {
|
||||
_codex_home: TempDir,
|
||||
arg0: Arg0PathEntryGuard,
|
||||
_previous_codex_home: Option<std::ffi::OsString>,
|
||||
}
|
||||
|
||||
impl TestBinaryDispatchGuard {
|
||||
pub fn paths(&self) -> &Arg0DispatchPaths {
|
||||
self.arg0.paths()
|
||||
}
|
||||
}
|
||||
|
||||
pub enum TestBinaryDispatchMode {
|
||||
DispatchArg0Only,
|
||||
Skip,
|
||||
InstallAliases,
|
||||
}
|
||||
|
||||
pub fn configure_test_binary_dispatch<F>(
|
||||
codex_home_prefix: &str,
|
||||
classify: F,
|
||||
) -> Option<TestBinaryDispatchGuard>
|
||||
where
|
||||
F: FnOnce(&str, Option<&str>) -> TestBinaryDispatchMode,
|
||||
{
|
||||
let mut args = std::env::args_os();
|
||||
let argv0 = args.next().unwrap_or_default();
|
||||
let exe_name = Path::new(&argv0)
|
||||
.file_name()
|
||||
.and_then(|name| name.to_str())
|
||||
.unwrap_or("");
|
||||
let argv1 = args.next();
|
||||
match classify(exe_name, argv1.as_deref().and_then(|arg| arg.to_str())) {
|
||||
TestBinaryDispatchMode::DispatchArg0Only => {
|
||||
let _ = arg0_dispatch();
|
||||
None
|
||||
}
|
||||
TestBinaryDispatchMode::Skip => None,
|
||||
TestBinaryDispatchMode::InstallAliases => {
|
||||
let codex_home = match tempfile::Builder::new().prefix(codex_home_prefix).tempdir() {
|
||||
Ok(codex_home) => codex_home,
|
||||
Err(error) => panic!("failed to create test CODEX_HOME: {error}"),
|
||||
};
|
||||
let previous_codex_home = std::env::var_os("CODEX_HOME");
|
||||
// Safety: this runs from a test ctor before test threads begin.
|
||||
unsafe {
|
||||
std::env::set_var("CODEX_HOME", codex_home.path());
|
||||
}
|
||||
|
||||
let arg0 = match arg0_dispatch() {
|
||||
Some(arg0) => arg0,
|
||||
None => panic!("failed to configure arg0 dispatch aliases for test binary"),
|
||||
};
|
||||
match previous_codex_home.as_ref() {
|
||||
Some(value) => unsafe {
|
||||
std::env::set_var("CODEX_HOME", value);
|
||||
},
|
||||
None => unsafe {
|
||||
std::env::remove_var("CODEX_HOME");
|
||||
},
|
||||
}
|
||||
|
||||
Some(TestBinaryDispatchGuard {
|
||||
_codex_home: codex_home,
|
||||
arg0,
|
||||
_previous_codex_home: previous_codex_home,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user