Make native startup libraries available to Windows voice-host tests (#59082)

## What changed

Add a shared command builder for `codex-voice-host` integration tests. On Windows MSVC builds with Bazel runfiles available, locate the architecture-specific voice runtime and prepend its `bin` directory to the helper's `PATH`.

Use the builder for lifecycle helper launches and build-identity queries in the lifecycle, installed-client, and packaged-runtime tests.

GitOrigin-RevId: c9fbd0769842eb4ee20742e126a9c4173dd7e128
This commit is contained in:
Felipe Coury
2026-11-03 07:06:04 +00:00
committed by copyberry
parent 616cab3a35
commit ac91c14443
4 changed files with 44 additions and 8 deletions
+31
View File
@@ -0,0 +1,31 @@
//! Launches the helper with its Bazel-provided native startup libraries available.
#[cfg(all(windows, target_env = "msvc"))]
use std::env;
#[cfg(all(windows, target_env = "msvc"))]
use anyhow::Context;
use anyhow::Result;
use codex_utils_cargo_bin::cargo_bin;
use tokio::process::Command;
pub(crate) fn voice_host_command() -> Result<Command> {
let command = Command::new(cargo_bin("codex-voice-host")?);
#[cfg(all(windows, target_env = "msvc"))]
let mut command = command;
#[cfg(all(windows, target_env = "msvc"))]
if codex_utils_cargo_bin::runfiles_available() {
let resource = format!(
"../../third_party/voice/native_link_windows_{}/runtime.json",
env::consts::ARCH
);
let runtime = codex_utils_cargo_bin::find_resource!(resource)?;
let runtime_bin = runtime.parent().context("voice runtime root")?.join("bin");
let path = env::join_paths(
std::iter::once(runtime_bin)
.chain(env::split_paths(&env::var_os("PATH").unwrap_or_default())),
)?;
command.env("PATH", path);
}
Ok(command)
}
@@ -1,5 +1,7 @@
//! Exercise the production client against copied helper packages and startup libraries.
mod common;
use std::fs;
use std::path::Path;
use std::path::PathBuf;
@@ -14,9 +16,9 @@ use codex_install_context::InstallContext;
use codex_realtime_webrtc::SessionDescription;
use codex_realtime_webrtc::VoiceHost;
use codex_utils_cargo_bin::cargo_bin;
use common::voice_host_command;
use futures::future::BoxFuture;
use pretty_assertions::assert_eq;
use tokio::process::Command;
use tokio::sync::Notify;
use tokio::sync::mpsc;
use tokio::time::timeout;
@@ -36,7 +38,7 @@ const DEADLINE: Duration = Duration::from_secs(/*secs*/ 10);
async fn build_commit() -> Result<String> {
let output = timeout(
DEADLINE,
Command::new(cargo_bin("codex-voice-host")?)
voice_host_command()?
.arg("--build-commit")
.kill_on_drop(true)
.output(),
+5 -4
View File
@@ -1,5 +1,7 @@
//! Exercise the real helper protocol and bounded process I/O.
mod common;
use std::process::Stdio;
use std::time::Duration;
@@ -8,18 +10,17 @@ use anyhow::Result;
use codex_realtime_webrtc::Message;
use codex_realtime_webrtc::decode_frame;
use codex_realtime_webrtc::encode_frame;
use codex_utils_cargo_bin::cargo_bin;
use common::voice_host_command;
use pretty_assertions::assert_eq;
use tokio::io::AsyncReadExt;
use tokio::io::AsyncWriteExt;
use tokio::process::Child;
use tokio::process::Command;
use tokio::time::timeout;
const DEADLINE: Duration = Duration::from_secs(/*secs*/ 10);
fn spawn() -> Result<Child> {
Ok(Command::new(cargo_bin("codex-voice-host")?)
Ok(voice_host_command()?
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::piped())
@@ -30,7 +31,7 @@ fn spawn() -> Result<Child> {
async fn build_commit() -> Result<String> {
let output = timeout(
DEADLINE,
Command::new(cargo_bin("codex-voice-host")?)
voice_host_command()?
.arg("--build-commit")
.kill_on_drop(true)
.output(),
@@ -1,5 +1,7 @@
//! Exercise native initialization with real prepared libraries in a relocated package.
mod common;
use std::fs;
use std::time::Duration;
@@ -9,7 +11,7 @@ use anyhow::ensure;
use codex_install_context::InstallContext;
use codex_realtime_webrtc::VoiceHost;
use codex_utils_cargo_bin::cargo_bin;
use tokio::process::Command;
use common::voice_host_command;
use tokio::time::timeout;
const DEADLINE: Duration = Duration::from_secs(/*secs*/ 10);
@@ -64,7 +66,7 @@ async fn relocated_runtime_initializes_closes_and_rejects_duplicate_initializati
.context("package layout")?;
let output = timeout(
DEADLINE,
Command::new(&helper_source)
voice_host_command()?
.arg("--build-commit")
.kill_on_drop(true)
.output(),