From 8de60988b4d2956073c119c829abe5664f489142 Mon Sep 17 00:00:00 2001 From: Attila Laszlo Nagy Date: Mon, 14 Sep 2026 18:51:20 +0200 Subject: [PATCH 1/2] fix(toolchain): upgrade Rust to 1.98.1 --- .github/workflows/release-audio.yml | 12 ++++---- mise.toml | 2 +- packages/sie_audio_prep/src/lib.rs | 4 ++- packages/sie_gateway/Dockerfile | 2 +- packages/sie_gateway/src/handlers/proxy.rs | 32 ++++++++++++++++------ packages/sie_server_rust/Dockerfile | 2 +- packages/sie_server_rust/Dockerfile.candle | 2 +- packages/sie_server_sidecar/Dockerfile | 4 +-- tools/ci/check_release_contract.py | 10 +++---- tools/ci/tests/test_release_contract.py | 6 ++-- 10 files changed, 47 insertions(+), 29 deletions(-) diff --git a/.github/workflows/release-audio.yml b/.github/workflows/release-audio.yml index 015a36ff7..f8bc8e85b 100644 --- a/.github/workflows/release-audio.yml +++ b/.github/workflows/release-audio.yml @@ -42,10 +42,10 @@ jobs: cache: false - name: Install pinned native build tools run: | - mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 - test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 -- rustc --version | cut -d' ' -f2)" = 1.97.0 - test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 -- cargo --version | cut -d' ' -f2)" = 1.97.0 - test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 -- zig version)" = 0.13.0 + mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 + test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 -- rustc --version | cut -d' ' -f2)" = 1.98.1 + test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 -- cargo --version | cut -d' ' -f2)" = 1.98.1 + test "$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 -- zig version)" = 0.13.0 - id: contract name: Validate exact release identity and asset filename env: @@ -56,12 +56,12 @@ jobs: set -euo pipefail test "$RELEASE_TAG" = "v$RELEASE_VERSION" test "$(git rev-parse HEAD)" = "$RELEASE_SHA" - filename="$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 -- python -c 'import runpy; print(runpy.run_path("packages/sie_audio_prep/build_wheel.py")["AUDIO_WHEEL_FILENAME"])')" + filename="$(mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 -- python -c 'import runpy; print(runpy.run_path("packages/sie_audio_prep/build_wheel.py")["AUDIO_WHEEL_FILENAME"])')" test "$filename" = "sie_audio_prep-$RELEASE_VERSION-cp312-abi3-manylinux_2_28_x86_64.whl" echo "filename=$filename" >> "$GITHUB_OUTPUT" - name: Build and validate exact Linux wheel run: >- - mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0 -- + mise --no-config exec python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1 -- python tools/ci/build_audio_prep_release_asset.py --out dist - name: Record exact tested wheel and original run provenance run: >- diff --git a/mise.toml b/mise.toml index c3264d88e..378e93f7f 100644 --- a/mise.toml +++ b/mise.toml @@ -4,7 +4,7 @@ experimental = true [tools] python = "3.12.12" uv = "0.5.31" -rust = { version = "1.97.0", profile = "default", components = ["rustfmt", "clippy", "llvm-tools"] } +rust = { version = "1.98.1", profile = "default", components = ["rustfmt", "clippy", "llvm-tools"] } "cargo:cargo-deny" = "0.20.2" "cargo:cargo-llvm-cov" = "0.8.7" node = ["24.12.0", "22.23.2"] diff --git a/packages/sie_audio_prep/src/lib.rs b/packages/sie_audio_prep/src/lib.rs index 9ab4deaaf..b6fc8ade7 100644 --- a/packages/sie_audio_prep/src/lib.rs +++ b/packages/sie_audio_prep/src/lib.rs @@ -837,7 +837,9 @@ mod tests { decode_audio(wav_pcm16(16_000, 1, &frames), None, AudioLimits::default()).unwrap(); let pcm = prepared.pcm_s16le(); let reconstructed = pcm - .chunks_exact(2) + .as_chunks::<2>() + .0 + .iter() .map(|bytes| f32::from(i16::from_le_bytes([bytes[0], bytes[1]])) / 32_768.0) .collect::>(); assert_eq!(reconstructed.len(), prepared.samples.len()); diff --git a/packages/sie_gateway/Dockerfile b/packages/sie_gateway/Dockerfile index 2c1d2cd58..7cd76a28f 100644 --- a/packages/sie_gateway/Dockerfile +++ b/packages/sie_gateway/Dockerfile @@ -1,4 +1,4 @@ -FROM rust:1.97.0-slim-bookworm@sha256:6d220bf85c74e842a79da63997af8d2e74455c0b8847d8bb3a5888572334991d AS chef +FROM rust:1.98.1-slim-bookworm@sha256:ebd900bae66fd508b466cef82d64a83a5fb34682e4c8b2797a42908bddc95a57 AS chef RUN cargo install cargo-chef --locked WORKDIR /app diff --git a/packages/sie_gateway/src/handlers/proxy.rs b/packages/sie_gateway/src/handlers/proxy.rs index 98783cfdd..1be6b9828 100644 --- a/packages/sie_gateway/src/handlers/proxy.rs +++ b/packages/sie_gateway/src/handlers/proxy.rs @@ -12098,7 +12098,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = f32::from_le_bytes([chunk[0], chunk[1], chunk[2], chunk[3]]); serde_json::Value::from(val as f64) @@ -12111,7 +12113,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = f64::from_le_bytes([ chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], @@ -12127,7 +12131,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let bits = u16::from_le_bytes([chunk[0], chunk[1]]); let val = f16_to_f32(bits); @@ -12141,7 +12147,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = i32::from_le_bytes([chunk[0], chunk[1], chunk[2], chunk[3]]); serde_json::Value::from(val as i64) @@ -12154,7 +12162,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = i64::from_le_bytes([ chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], @@ -12170,7 +12180,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = i16::from_le_bytes([chunk[0], chunk[1]]); serde_json::Value::from(val as i64) @@ -12183,7 +12195,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = u32::from_le_bytes([chunk[0], chunk[1], chunk[2], chunk[3]]); serde_json::Value::from(val as u64) @@ -12196,7 +12210,9 @@ fn decode_dtype_values(dtype: &str, data: &[u8]) -> Option() + .0 + .iter() .map(|chunk| { let val = u64::from_le_bytes([ chunk[0], chunk[1], chunk[2], chunk[3], chunk[4], chunk[5], chunk[6], diff --git a/packages/sie_server_rust/Dockerfile b/packages/sie_server_rust/Dockerfile index 217ef371d..d10b02889 100644 --- a/packages/sie_server_rust/Dockerfile +++ b/packages/sie_server_rust/Dockerfile @@ -9,7 +9,7 @@ # contract to the worker-sidecar. Native engines such as Candle run inside this # process rather than through a sibling Python adapter process. -ARG RUST_VERSION=1.97.0 +ARG RUST_VERSION=1.98.1 ARG CARGO_FEATURES="" FROM rust:${RUST_VERSION}-slim-bookworm AS chef diff --git a/packages/sie_server_rust/Dockerfile.candle b/packages/sie_server_rust/Dockerfile.candle index 07606d4f9..71476ddaf 100644 --- a/packages/sie_server_rust/Dockerfile.candle +++ b/packages/sie_server_rust/Dockerfile.candle @@ -10,7 +10,7 @@ # by the sidecar for engine=candle pools. ARG CUDA_VERSION=12.4.1 -ARG RUST_VERSION=1.97.0 +ARG RUST_VERSION=1.98.1 # Candle CUDA kernels cannot detect compute capability during Docker builds. # Local builds default to the currently supported L4 target, and releases publish # sie-server-rust:-cuda12-sm89. Override for ad-hoc target GPUs when diff --git a/packages/sie_server_sidecar/Dockerfile b/packages/sie_server_sidecar/Dockerfile index 5cb8dbaa8..7ba163f94 100644 --- a/packages/sie_server_sidecar/Dockerfile +++ b/packages/sie_server_sidecar/Dockerfile @@ -25,12 +25,12 @@ # testing mount a socket path and set SIE_IPC_SOCKET_PATH accordingly. ARG FEATURES=cloud-storage -ARG RUST_VERSION=1.97.0 +ARG RUST_VERSION=1.98.1 # ============================================================================= # Dependency planner: capture the Cargo graph only. # ============================================================================= -FROM rust:${RUST_VERSION}-slim-bookworm@sha256:6d220bf85c74e842a79da63997af8d2e74455c0b8847d8bb3a5888572334991d AS chef +FROM rust:${RUST_VERSION}-slim-bookworm@sha256:ebd900bae66fd508b466cef82d64a83a5fb34682e4c8b2797a42908bddc95a57 AS chef RUN cargo install cargo-chef --locked --version 0.1.77 WORKDIR /build diff --git a/tools/ci/check_release_contract.py b/tools/ci/check_release_contract.py index 7691dffac..782c072cc 100755 --- a/tools/ci/check_release_contract.py +++ b/tools/ci/check_release_contract.py @@ -504,16 +504,16 @@ def audio_release_errors() -> list[str]: if mise_tools.get("zig") != "0.13.0": errors.append("native audio release must pin Zig 0.13.0") rust = mise_tools.get("rust", {}) - if not isinstance(rust, dict) or rust.get("version") != "1.97.0": - errors.append("native audio release must use the repository Rust 1.97.0 pin") + if not isinstance(rust, dict) or rust.get("version") != "1.98.1": + errors.append("native audio release must use the repository Rust 1.98.1 pin") workflow = (ROOT / ".github/workflows/release-audio.yml").read_text() required = ( "ref: ${{ inputs.sha }}", AUDIO_MANYLINUX_IMAGE, "version: 2026.7.11", - "mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0", - "rust@1.97.0 -- rustc --version", - "rust@1.97.0 -- cargo --version", + "mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1", + "rust@1.98.1 -- rustc --version", + "rust@1.98.1 -- cargo --version", "python tools/ci/build_audio_prep_release_asset.py --out dist", expected_filename.replace(version, "$RELEASE_VERSION"), "tools/ci/upload_audio_prep_release_asset.bash", diff --git a/tools/ci/tests/test_release_contract.py b/tools/ci/tests/test_release_contract.py index 87f2c1b3f..287d36c80 100644 --- a/tools/ci/tests/test_release_contract.py +++ b/tools/ci/tests/test_release_contract.py @@ -239,9 +239,9 @@ def test_native_audio_builder_installs_exact_rust_and_never_clobbers() -> None: uploader = (contract.ROOT / "tools/ci/upload_native_release_asset.bash").read_text() assert contract.AUDIO_MANYLINUX_IMAGE in workflow assert "version: 2026.7.11" in workflow - assert "mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.97.0" in workflow - assert "rust@1.97.0 -- rustc --version" in workflow - assert "rust@1.97.0 -- cargo --version" in workflow + assert "mise --no-config install python@3.12.12 uv@0.5.31 zig@0.13.0 rust@1.98.1" in workflow + assert "rust@1.98.1 -- rustc --version" in workflow + assert "rust@1.98.1 -- cargo --version" in workflow assert "--clobber" not in workflow assert "--clobber" not in uploader assert "sha256sum" in uploader From 0e19b41aab0db90f82c91aaf94f8b9e491c66344 Mon Sep 17 00:00:00 2001 From: Attila Laszlo Nagy Date: Mon, 14 Sep 2026 19:12:07 +0200 Subject: [PATCH 2/2] fix(deps): patch rustls and pin sidecar builder --- Cargo.lock | 16 ++++++++-------- packages/sie_server_rust/Cargo.lock | 16 ++++++++-------- packages/sie_server_sidecar/Dockerfile | 3 +-- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 59b24616a..0c8e29b34 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -276,9 +276,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.17.1" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" dependencies = [ "aws-lc-sys", "zeroize", @@ -286,9 +286,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" dependencies = [ "cc", "cmake", @@ -3389,9 +3389,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "log", @@ -3454,9 +3454,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "aws-lc-rs", "ring", diff --git a/packages/sie_server_rust/Cargo.lock b/packages/sie_server_rust/Cargo.lock index 76bb8e34d..6ae0de903 100644 --- a/packages/sie_server_rust/Cargo.lock +++ b/packages/sie_server_rust/Cargo.lock @@ -136,9 +136,9 @@ checksum = "f2032f911046de80f0a198e0901378627c33f59ea0ac00e363d481118bd70a53" [[package]] name = "aws-lc-rs" -version = "1.17.1" +version = "1.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4342d8937fc7e5dd9b1c60292261c0670c882a2cd1719cfc11b1af41731e32ad" +checksum = "b281d307588d634de920874890732659e2e7672f72b5e10e81badc1a8a83621e" dependencies = [ "aws-lc-sys", "zeroize", @@ -146,9 +146,9 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.42.0" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d9ceb1da931507a12f4fccea479dccd00da1943e1b4ae72d8e502d707361444" +checksum = "9bff6c3b54fad79a2e60b8102caf565819711497c1f5f092f49508e2f5c31b27" dependencies = [ "cc", "cmake", @@ -3092,9 +3092,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.41" +version = "0.23.45" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b92b125634d9b795e7beca796cc790df15a7fb38323bf3196fda83292d06b1f" +checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634" dependencies = [ "aws-lc-rs", "log", @@ -3157,9 +3157,9 @@ checksum = "f87165f0995f63a9fbeea62b64d10b4d9d8e78ec6d7d51fb2125fda7bb36788f" [[package]] name = "rustls-webpki" -version = "0.103.13" +version = "0.103.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61c429a8649f110dddef65e2a5ad240f747e85f7758a6bccc7e5777bd33f756e" +checksum = "f3c3cf1d8b1e7d4927e2d154c3fcb02979afb9939629c62cd9048d4f07b60ac2" dependencies = [ "aws-lc-rs", "ring", diff --git a/packages/sie_server_sidecar/Dockerfile b/packages/sie_server_sidecar/Dockerfile index 7ba163f94..fd7f5acbf 100644 --- a/packages/sie_server_sidecar/Dockerfile +++ b/packages/sie_server_sidecar/Dockerfile @@ -25,12 +25,11 @@ # testing mount a socket path and set SIE_IPC_SOCKET_PATH accordingly. ARG FEATURES=cloud-storage -ARG RUST_VERSION=1.98.1 # ============================================================================= # Dependency planner: capture the Cargo graph only. # ============================================================================= -FROM rust:${RUST_VERSION}-slim-bookworm@sha256:ebd900bae66fd508b466cef82d64a83a5fb34682e4c8b2797a42908bddc95a57 AS chef +FROM rust:1.98.1-slim-bookworm@sha256:ebd900bae66fd508b466cef82d64a83a5fb34682e4c8b2797a42908bddc95a57 AS chef RUN cargo install cargo-chef --locked --version 0.1.77 WORKDIR /build