feat: introduce find_resource! macro that works with Cargo or Bazel

This commit is contained in:
Michael Bolin
2026-01-07 17:31:06 -08:00
parent ef8b8ebc94
commit 30ebb2a525
11 changed files with 112 additions and 49 deletions
@@ -11,6 +11,7 @@ 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 -10
View File
@@ -1,6 +1,8 @@
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;
@@ -35,16 +37,15 @@ where
let mcp_executable = codex_utils_cargo_bin::cargo_bin("codex-exec-mcp-server")?;
let execve_wrapper = codex_utils_cargo_bin::cargo_bin("codex-execve-wrapper")?;
// `bash` requires a special lookup when running under Bazel because it is a
// _resource_ rather than a binary target.
let bash = if let Some(bazel_runfiles_dir) = std::env::var_os("RUNFILES_DIR") {
PathBuf::from(bazel_runfiles_dir).join("_main/codex-rs/exec-server/tests/suite/bash")
} else {
Path::new(env!("CARGO_MANIFEST_DIR"))
.join("..")
.join("suite")
.join("bash")
};
// `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();
// Need to ensure the artifact associated with the bash DotSlash file is
// available before it is run in a read-only sandbox.