From ec5e82b77c2695b71a167a67962b79f2aa78d49a Mon Sep 17 00:00:00 2001 From: Michael Bolin Date: Thu, 15 May 2025 14:07:16 -0700 Subject: [PATCH] chore: pin Rust version to 1.86 and use io::Error::other to prepare for 1.87 (#947) Previously, our GitHub actions specified the Rust toolchain as `dtolnay/rust-toolchain@stable`, which meant the version could change out from under us. In this case, the move from 1.86 to 1.87 introduced new clippy warnings, causing build failures. Because it will take a little time to fix all the new clippy warnings, this PR pins things to 1.86 for now to unbreak the build. It also replaces `io::Error::new(io::ErrorKind::Other)` with `io::Error::other()` in preparation for 1.87. --- .github/workflows/rust-ci.yml | 7 +++++-- .github/workflows/rust-release.yml | 2 +- codex-rs/core/src/exec.rs | 6 ++---- codex-rs/core/src/exec_linux.rs | 7 +++---- codex-rs/core/src/rollout.rs | 29 ++++++++++----------------- codex-rs/mcp-client/src/mcp_client.rs | 14 +++++++------ 6 files changed, 30 insertions(+), 35 deletions(-) diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index c4cb75e7..a9121a34 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -26,7 +26,9 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@1.86 + with: + components: rustfmt - name: cargo fmt run: cargo fmt -- --config imports_granularity=Item --check @@ -58,9 +60,10 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@1.86 with: targets: ${{ matrix.target }} + components: clippy - uses: actions/cache@v4 with: diff --git a/.github/workflows/rust-release.yml b/.github/workflows/rust-release.yml index 96c2f1a0..7e9e4b46 100644 --- a/.github/workflows/rust-release.yml +++ b/.github/workflows/rust-release.yml @@ -74,7 +74,7 @@ jobs: steps: - uses: actions/checkout@v4 - - uses: dtolnay/rust-toolchain@stable + - uses: dtolnay/rust-toolchain@1.86 with: targets: ${{ matrix.target }} diff --git a/codex-rs/core/src/exec.rs b/codex-rs/core/src/exec.rs index af09ded0..158a0da9 100644 --- a/codex-rs/core/src/exec.rs +++ b/codex-rs/core/src/exec.rs @@ -349,14 +349,12 @@ pub(crate) async fn consume_truncated_output( // we treat it as an exceptional I/O error let stdout_reader = child.stdout.take().ok_or_else(|| { - CodexErr::Io(io::Error::new( - io::ErrorKind::Other, + CodexErr::Io(io::Error::other( "stdout pipe was unexpectedly not available", )) })?; let stderr_reader = child.stderr.take().ok_or_else(|| { - CodexErr::Io(io::Error::new( - io::ErrorKind::Other, + CodexErr::Io(io::Error::other( "stderr pipe was unexpectedly not available", )) })?; diff --git a/codex-rs/core/src/exec_linux.rs b/codex-rs/core/src/exec_linux.rs index 22e97ea4..e74c5621 100644 --- a/codex-rs/core/src/exec_linux.rs +++ b/codex-rs/core/src/exec_linux.rs @@ -51,10 +51,9 @@ pub fn exec_linux( match tool_call_output { Ok(Ok(output)) => Ok(output), Ok(Err(e)) => Err(e), - Err(e) => Err(CodexErr::Io(io::Error::new( - io::ErrorKind::Other, - format!("thread join failed: {e:?}"), - ))), + Err(e) => Err(CodexErr::Io(io::Error::other(format!( + "thread join failed: {e:?}" + )))), } } diff --git a/codex-rs/core/src/rollout.rs b/codex-rs/core/src/rollout.rs index 80b1f0a3..4127b603 100644 --- a/codex-rs/core/src/rollout.rs +++ b/codex-rs/core/src/rollout.rs @@ -6,7 +6,6 @@ use std::fs::File; use std::fs::{self}; use std::io::Error as IoError; -use std::io::ErrorKind; use serde::Serialize; use time::OffsetDateTime; @@ -64,9 +63,9 @@ impl RolloutRecorder { let timestamp_format: &[FormatItem] = format_description!( "[year]-[month]-[day]T[hour]:[minute]:[second].[subsecond digits:3]Z" ); - let timestamp = timestamp.format(timestamp_format).map_err(|e| { - IoError::new(ErrorKind::Other, format!("failed to format timestamp: {e}")) - })?; + let timestamp = timestamp + .format(timestamp_format) + .map_err(|e| IoError::other(format!("failed to format timestamp: {e}")))?; let meta = SessionMeta { timestamp, @@ -131,19 +130,13 @@ impl RolloutRecorder { async fn record_item(&self, item: &impl Serialize) -> std::io::Result<()> { // Serialize the item to JSON first so that the writer thread only has // to perform the actual write. - let json = serde_json::to_string(item).map_err(|e| { - IoError::new( - ErrorKind::Other, - format!("failed to serialize response items: {e}"), - ) - })?; + let json = serde_json::to_string(item) + .map_err(|e| IoError::other(format!("failed to serialize response items: {e}")))?; - self.tx.send(json).await.map_err(|e| { - IoError::new( - ErrorKind::Other, - format!("failed to queue rollout item: {e}"), - ) - }) + self.tx + .send(json) + .await + .map_err(|e| IoError::other(format!("failed to queue rollout item: {e}"))) } } @@ -165,7 +158,7 @@ fn create_log_file(config: &Config, session_id: Uuid) -> std::io::Result std::io::Result(CHANNEL_CAPACITY); let pending: Arc>> = Arc::new(Mutex::new(HashMap::new()));