Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion codex-rs/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion codex-rs/exec-server/tests/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ path = "lib.rs"
anyhow = { workspace = true }
codex-core = { workspace = true }
codex-utils-cargo-bin = { workspace = true }
path-absolutize = { workspace = true }
rmcp = { workspace = true }
serde_json = { workspace = true }
tokio = { workspace = true }
11 changes: 2 additions & 9 deletions codex-rs/exec-server/tests/common/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ use codex_core::MCP_SANDBOX_STATE_METHOD;
use codex_core::SandboxState;
use codex_core::protocol::SandboxPolicy;
use codex_utils_cargo_bin::find_resource;
use path_absolutize::Absolutize;
use rmcp::ClientHandler;
use rmcp::ErrorData as McpError;
use rmcp::RoleClient;
Expand Down Expand Up @@ -38,14 +37,8 @@ where
let execve_wrapper = codex_utils_cargo_bin::cargo_bin("codex-execve-wrapper")?;

// `bash` is a test resource rather than a binary target, so we must use
// `find_resource!` to locate it instead of `cargo_bin`.
//
// Note we also have to normalize (but not canonicalize!) the path for
// _Bazel_ because the original value ends with
// `codex-rs/exec-server/tests/common/../suite/bash`, but the `tests/common`
// folder will not exist at runtime under Bazel. As such, we have to
// normalize it before passing it to `dotslash fetch`.
let bash = find_resource!("../suite/bash")?.absolutize()?.to_path_buf();
// `find_resource!` to locate it instead of `cargo_bin()`.
let bash = find_resource!("../suite/bash")?;

// Need to ensure the artifact associated with the bash DotSlash file is
// available before it is run in a read-only sandbox.
Expand Down
1 change: 1 addition & 0 deletions codex-rs/utils/cargo-bin/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,5 @@ workspace = true

[dependencies]
assert_cmd = { workspace = true }
path-absolutize = { workspace = true }
thiserror = { workspace = true }
30 changes: 23 additions & 7 deletions codex-rs/utils/cargo-bin/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
use std::ffi::OsString;
use std::path::PathBuf;

pub use path_absolutize;

#[derive(Debug, thiserror::Error)]
pub enum CargoBinError {
#[error("failed to read current exe")]
Expand Down Expand Up @@ -91,19 +93,33 @@ macro_rules! find_resource {
// included in the compiled binary (even if it is built with Cargo), but
// we only check it at runtime if `RUNFILES_DIR` is set.
let resource = std::path::Path::new(&$resource);
let manifest_dir = match std::env::var("RUNFILES_DIR") {
match std::env::var("RUNFILES_DIR") {
Ok(bazel_runtime_files) => match option_env!("BAZEL_PACKAGE") {
Some(bazel_package) => Ok(std::path::PathBuf::from(bazel_runtime_files)
.join("_main")
.join(bazel_package)),
Some(bazel_package) => {
use $crate::path_absolutize::Absolutize;

let manifest_dir = std::path::PathBuf::from(bazel_runtime_files)
.join("_main")
.join(bazel_package)
.join(resource);
// Note we also have to normalize (but not canonicalize!)
// the path for _Bazel_ because the original value ends with
// `codex-rs/exec-server/tests/common/../suite/bash`, but
// the `tests/common` folder will not exist at runtime under
// Bazel. As such, we have to normalize it before passing it
// to `dotslash fetch`.
manifest_dir.absolutize().map(|p| p.to_path_buf())
}
None => Err(std::io::Error::new(
std::io::ErrorKind::NotFound,
"BAZEL_PACKAGE not set in Bazel build",
)),
},
Err(_) => Ok(std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))),
};
manifest_dir.map(|dir| dir.join(resource))
Err(_) => {
let manifest_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"));
Ok(manifest_dir.join(resource))
}
}
}};
}

Expand Down
Loading