mirror of
https://github.com/openai/codex.git
synced 2026-11-13 14:46:14 +00:00
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:
1 parent
ccba737d26
commit
35fd69a9f0
5 files changed
+27
-18
No files matched your search
Generated
+1
-1
@@ -1881,6 +1881,7 @@ name = "codex-utils-cargo-bin"
|
|||||||
version = "0.0.0"
|
version = "0.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
|
"path-absolutize",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -2845,7 +2846,6 @@ dependencies = [
|
|||||||
"anyhow",
|
"anyhow",
|
||||||
"codex-core",
|
"codex-core",
|
||||||
"codex-utils-cargo-bin",
|
"codex-utils-cargo-bin",
|
||||||
"path-absolutize",
|
|
||||||
"rmcp",
|
"rmcp",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"tokio",
|
"tokio",
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ path = "lib.rs"
|
|||||||
anyhow = { workspace = true }
|
anyhow = { workspace = true }
|
||||||
codex-core = { workspace = true }
|
codex-core = { workspace = true }
|
||||||
codex-utils-cargo-bin = { workspace = true }
|
codex-utils-cargo-bin = { workspace = true }
|
||||||
path-absolutize = { workspace = true }
|
|
||||||
rmcp = { workspace = true }
|
rmcp = { workspace = true }
|
||||||
serde_json = { workspace = true }
|
serde_json = { workspace = true }
|
||||||
tokio = { workspace = true }
|
tokio = { workspace = true }
|
||||||
@@ -2,7 +2,6 @@ use codex_core::MCP_SANDBOX_STATE_METHOD;
|
|||||||
use codex_core::SandboxState;
|
use codex_core::SandboxState;
|
||||||
use codex_core::protocol::SandboxPolicy;
|
use codex_core::protocol::SandboxPolicy;
|
||||||
use codex_utils_cargo_bin::find_resource;
|
use codex_utils_cargo_bin::find_resource;
|
||||||
use path_absolutize::Absolutize;
|
|
||||||
use rmcp::ClientHandler;
|
use rmcp::ClientHandler;
|
||||||
use rmcp::ErrorData as McpError;
|
use rmcp::ErrorData as McpError;
|
||||||
use rmcp::RoleClient;
|
use rmcp::RoleClient;
|
||||||
@@ -38,14 +37,8 @@ where
|
|||||||
let execve_wrapper = codex_utils_cargo_bin::cargo_bin("codex-execve-wrapper")?;
|
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
|
// `bash` is a test resource rather than a binary target, so we must use
|
||||||
// `find_resource!` to locate it instead of `cargo_bin`.
|
// `find_resource!` to locate it instead of `cargo_bin()`.
|
||||||
//
|
let bash = find_resource!("../suite/bash")?;
|
||||||
// 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
|
// Need to ensure the artifact associated with the bash DotSlash file is
|
||||||
// available before it is run in a read-only sandbox.
|
// available before it is run in a read-only sandbox.
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ workspace = true
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
assert_cmd = { workspace = true }
|
assert_cmd = { workspace = true }
|
||||||
|
path-absolutize = { workspace = true }
|
||||||
thiserror = { workspace = true }
|
thiserror = { workspace = true }
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
use std::ffi::OsString;
|
use std::ffi::OsString;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
pub use path_absolutize;
|
||||||
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
#[derive(Debug, thiserror::Error)]
|
||||||
pub enum CargoBinError {
|
pub enum CargoBinError {
|
||||||
#[error("failed to read current exe")]
|
#[error("failed to read current exe")]
|
||||||
@@ -91,19 +93,33 @@ macro_rules! find_resource {
|
|||||||
// included in the compiled binary (even if it is built with Cargo), but
|
// included in the compiled binary (even if it is built with Cargo), but
|
||||||
// we only check it at runtime if `RUNFILES_DIR` is set.
|
// we only check it at runtime if `RUNFILES_DIR` is set.
|
||||||
let resource = std::path::Path::new(&$resource);
|
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") {
|
Ok(bazel_runtime_files) => match option_env!("BAZEL_PACKAGE") {
|
||||||
Some(bazel_package) => Ok(std::path::PathBuf::from(bazel_runtime_files)
|
Some(bazel_package) => {
|
||||||
.join("_main")
|
use $crate::path_absolutize::Absolutize;
|
||||||
.join(bazel_package)),
|
|
||||||
|
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(
|
None => Err(std::io::Error::new(
|
||||||
std::io::ErrorKind::NotFound,
|
std::io::ErrorKind::NotFound,
|
||||||
"BAZEL_PACKAGE not set in Bazel build",
|
"BAZEL_PACKAGE not set in Bazel build",
|
||||||
)),
|
)),
|
||||||
},
|
},
|
||||||
Err(_) => Ok(std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"))),
|
Err(_) => {
|
||||||
};
|
let manifest_dir = std::path::PathBuf::from(env!("CARGO_MANIFEST_DIR"));
|
||||||
manifest_dir.map(|dir| dir.join(resource))
|
Ok(manifest_dir.join(resource))
|
||||||
|
}
|
||||||
|
}
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user