fix: make the find_resource! macro responsible for the absolutize() call (#8884)

https://github.com/openai/codex/pull/8879 introduced the
`find_resource!` macro, but now that I am about to use it in more
places, I realize that it should take care of this normalization case
for callers.

Note the `use $crate::path_absolutize::Absolutize;` line is there so
that users of `find_resource!` do not have to explicitly include
`path-absolutize` to their own `Cargo.toml`.
This commit is contained in:
Michael Bolin
2026-01-07 23:03:43 -08:00
committed by GitHub
parent ccba737d26
commit 35fd69a9f0
5 changed files with 27 additions and 18 deletions

View File

@@ -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 }

View File

@@ -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;
@@ -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.