From 641a1ee1c4831505f9c6cab0c5dea9e6e8a1884f Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 11:59:42 +0000 Subject: [PATCH 01/15] chore[ci]: add window test to CI Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e58219c132..3be1baecd9e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -400,6 +400,27 @@ jobs: --target x86_64-unknown-linux-gnu \ --verbose + rust-test-windows: + name: "Rust tests (Windows)" + timeout-minutes: 120 + runs-on: + - runs-on=${{ github.run_id }} + - family=m7i + - cpu=8 + - image=windows22-full-x64 + - tag=rust-test-windows + steps: + - uses: actions/checkout@v5 + - uses: ./.github/actions/setup-rust + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + - name: Install nextest + uses: taiki-e/install-action@v2 + with: + tool: nextest + - name: Rust Tests + run: cargo nextest run --locked --workspace --all-features --no-fail-fast + build-java: name: "Java" runs-on: ubuntu-latest From ac60bb37c551f304ede9a88d307969d5aec77ca3 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 12:09:06 +0000 Subject: [PATCH 02/15] feat: Add Windows and Linux ARM64 CI testing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add rust-test-other matrix job with Windows x64 and Linux ARM64 runners - Use runs-on service for both platforms (m7i for Windows, m7g for ARM) - Fix Mold linker installation to be Linux-only (prevents PowerShell error on Windows) - Enable S3 cache for Linux ARM64 runner 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/actions/setup-rust/action.yml | 1 + .github/workflows/ci.yml | 34 ++++++++++++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index bee8fff6569..93d35cc8726 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -25,6 +25,7 @@ runs: run: echo "version=$(cat rust-toolchain.toml | grep channel | awk -F'\"' '{print $2}')" >> $GITHUB_OUTPUT - name: Install Mold + if: runner.os == 'Linux' uses: rui314/setup-mold@v1 - name: Rust Toolchain diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3be1baecd9e..9187b8b5b7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -400,16 +400,34 @@ jobs: --target x86_64-unknown-linux-gnu \ --verbose - rust-test-windows: - name: "Rust tests (Windows)" + rust-test-other: + name: "Rust tests (${{ matrix.os }})" timeout-minutes: 120 - runs-on: - - runs-on=${{ github.run_id }} - - family=m7i - - cpu=8 - - image=windows22-full-x64 - - tag=rust-test-windows + strategy: + fail-fast: false + matrix: + include: + - os: windows-x64 + runner: + - runs-on=${{ github.run_id }} + - family=m7i + - cpu=8 + - image=windows22-full-x64 + - tag=rust-test-windows + - os: linux-arm64 + runner: + - runs-on=${{ github.run_id }} + - family=m7g + - cpu=8 + - image=ubuntu24-full-arm64 + - extras=s3-cache + - tag=rust-test-linux-arm64 + runs-on: ${{ matrix.runner }} steps: + - uses: runs-on/action@v2 + if: matrix.os == 'linux-arm64' + with: + sccache: s3 - uses: actions/checkout@v5 - uses: ./.github/actions/setup-rust with: From c285c9badb9ed0517de9c788cb0c574aa767d4cc Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 12:26:10 +0000 Subject: [PATCH 03/15] fix: Add PowerShell to PATH for Windows runner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The arduino/setup-protoc action requires PowerShell to be in the PATH on Windows. Add it explicitly for Windows runners. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/actions/setup-rust/action.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index 93d35cc8726..f6be71c3ed6 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -50,6 +50,11 @@ runs: shell: bash run: echo "PATH=$PATH" >> $GITHUB_ENV + - name: Add PowerShell to PATH (Windows) + if: runner.os == 'Windows' + shell: bash + run: echo "C:\Windows\System32\WindowsPowerShell\v1.0" >> $GITHUB_PATH + - name: Install Protoc (for lance-encoding build step) uses: arduino/setup-protoc@v3 with: From f6b2e2ee84439e5e6961feee5773d8b26cbcbd86 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 12:42:13 +0000 Subject: [PATCH 04/15] fix: Use Chocolatey to install protoc on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The arduino/setup-protoc action has an issue with Expand-Archive on Windows runners. Use Chocolatey instead to install protoc on Windows. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/actions/setup-rust/action.yml | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index f6be71c3ed6..6689fd2c641 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -50,13 +50,16 @@ runs: shell: bash run: echo "PATH=$PATH" >> $GITHUB_ENV - - name: Add PowerShell to PATH (Windows) - if: runner.os == 'Windows' - shell: bash - run: echo "C:\Windows\System32\WindowsPowerShell\v1.0" >> $GITHUB_PATH - - name: Install Protoc (for lance-encoding build step) + if: runner.os != 'Windows' uses: arduino/setup-protoc@v3 with: version: "29.3" repo-token: ${{ inputs.repo-token }} + + - name: Install Protoc on Windows + if: runner.os == 'Windows' + shell: bash + run: | + choco install protoc --version=29.3 -y + echo "C:\ProgramData\chocolatey\lib\protoc\tools\bin" >> $GITHUB_PATH From e0d9d8bf5f983ab10b7a1aabea7a877d5346a6f2 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 13:13:17 +0000 Subject: [PATCH 05/15] fix: Add MSVC Build Tools for Windows runner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows22-base-x64 image doesn't include MSVC Build Tools which are required for compiling Rust with the msvc toolchain. Add them explicitly. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9187b8b5b7b..5e80ab10c24 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -412,7 +412,7 @@ jobs: - runs-on=${{ github.run_id }} - family=m7i - cpu=8 - - image=windows22-full-x64 + - image=windows22-base-x64 - tag=rust-test-windows - os: linux-arm64 runner: @@ -429,6 +429,9 @@ jobs: with: sccache: s3 - uses: actions/checkout@v5 + - name: Install MSVC Build Tools (Windows) + if: matrix.os == 'windows-x64' + uses: ilammy/msvc-dev-cmd@v1 - uses: ./.github/actions/setup-rust with: repo-token: ${{ secrets.GITHUB_TOKEN }} From 77e3f01be8a623b8ce22909dfae73767bb421a11 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 13:25:50 +0000 Subject: [PATCH 06/15] fix: Use windows22-full-x64 image for Visual Studio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows22-base-x64 image doesn't have Visual Studio or vswhere installed. Switch to windows22-full-x64 which includes Visual Studio for MSVC builds. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e80ab10c24..601a06ce65a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -412,7 +412,7 @@ jobs: - runs-on=${{ github.run_id }} - family=m7i - cpu=8 - - image=windows22-base-x64 + - image=windows22-full-x64 - tag=rust-test-windows - os: linux-arm64 runner: From 8503b98949bca2ad72ae905d41c2a84390d2febf Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 13:49:47 +0000 Subject: [PATCH 07/15] fix: Exclude bench-vortex from Windows tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bench-vortex has dependencies that are problematic on Windows (protoc). Exclude it from the test run and simplify protoc installation back to the standard approach. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/actions/setup-rust/action.yml | 8 -------- .github/workflows/ci.yml | 2 +- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index 6689fd2c641..93d35cc8726 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -51,15 +51,7 @@ runs: run: echo "PATH=$PATH" >> $GITHUB_ENV - name: Install Protoc (for lance-encoding build step) - if: runner.os != 'Windows' uses: arduino/setup-protoc@v3 with: version: "29.3" repo-token: ${{ inputs.repo-token }} - - - name: Install Protoc on Windows - if: runner.os == 'Windows' - shell: bash - run: | - choco install protoc --version=29.3 -y - echo "C:\ProgramData\chocolatey\lib\protoc\tools\bin" >> $GITHUB_PATH diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 601a06ce65a..8a594f9d897 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -440,7 +440,7 @@ jobs: with: tool: nextest - name: Rust Tests - run: cargo nextest run --locked --workspace --all-features --no-fail-fast + run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex build-java: name: "Java" From d98826981b7828578060a96d2eea4f01a821ddb1 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 14:12:27 +0000 Subject: [PATCH 08/15] fix: Install Visual Studio Build Tools via Chocolatey MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The windows22-full-x64 image doesn't include Visual Studio by default. Install visualstudio2022buildtools with VCTools workload via Chocolatey. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8a594f9d897..e4f5cabbb8a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -429,9 +429,11 @@ jobs: with: sccache: s3 - uses: actions/checkout@v5 - - name: Install MSVC Build Tools (Windows) + - name: Install Visual Studio Build Tools (Windows) if: matrix.os == 'windows-x64' - uses: ilammy/msvc-dev-cmd@v1 + shell: bash + run: | + choco install visualstudio2022buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive" -y - uses: ./.github/actions/setup-rust with: repo-token: ${{ secrets.GITHUB_TOKEN }} From 009848fce18da3a0183d440490e304dc75988cea Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 14:23:45 +0000 Subject: [PATCH 09/15] fix: Skip protoc installation on Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit protoc installation requires PowerShell which isn't properly configured on Windows runners. Skip it entirely for Windows since we already exclude bench-vortex which needs it. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/actions/setup-rust/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index 93d35cc8726..ce07df4a696 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -51,6 +51,7 @@ runs: run: echo "PATH=$PATH" >> $GITHUB_ENV - name: Install Protoc (for lance-encoding build step) + if: runner.os != 'Windows' uses: arduino/setup-protoc@v3 with: version: "29.3" From 327294e3ce84f2914da03f2706ba9f221bd42300 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 14:36:41 +0000 Subject: [PATCH 10/15] fix: Exclude vortex-python from Windows tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit vortex-python requires Python via pyo3 which isn't properly configured on Windows runners. Exclude it from Windows tests. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e4f5cabbb8a..9e122ec81ae 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -442,7 +442,7 @@ jobs: with: tool: nextest - name: Rust Tests - run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex + run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex --exclude vortex-python build-java: name: "Java" From 83c0920d00814af9abe510afb234a45df9e3c10e Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 14:55:24 +0000 Subject: [PATCH 11/15] fix: Setup Python properly for Windows tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Use actions/setup-python to ensure Python is properly configured in PATH for pyo3-build-config. Revert vortex-python exclusion since Python will now be available. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9e122ec81ae..f19410e7fb6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -434,6 +434,11 @@ jobs: shell: bash run: | choco install visualstudio2022buildtools --package-parameters "--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --passive" -y + - name: Setup Python (Windows) + if: matrix.os == 'windows-x64' + uses: actions/setup-python@v5 + with: + python-version: '3.11' - uses: ./.github/actions/setup-rust with: repo-token: ${{ secrets.GITHUB_TOKEN }} @@ -442,7 +447,7 @@ jobs: with: tool: nextest - name: Rust Tests - run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex --exclude vortex-python + run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex build-java: name: "Java" From 44daa7c234f66d5075e5e947fa086039f645f5c4 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 15:01:49 +0000 Subject: [PATCH 12/15] fix: Use double quotes for Python version in YAML MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix yamllint error by using double quotes instead of single quotes for python-version string value. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f19410e7fb6..7163d328808 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -438,7 +438,7 @@ jobs: if: matrix.os == 'windows-x64' uses: actions/setup-python@v5 with: - python-version: '3.11' + python-version: "3.11" - uses: ./.github/actions/setup-rust with: repo-token: ${{ secrets.GITHUB_TOKEN }} From e999661a1388eb2a113acaf9739ba3e4d59c7d98 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 15:30:10 +0000 Subject: [PATCH 13/15] fix: Add missing Read and Seek imports for Windows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add platform-specific imports for Read and Seek traits on non-Unix platforms (Windows) and fix seek call to use SeekFrom::Start. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Signed-off-by: Joe Isaacs --- vortex-io/src/file/object_store.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/vortex-io/src/file/object_store.rs b/vortex-io/src/file/object_store.rs index a692fe80835..ca6084dc50a 100644 --- a/vortex-io/src/file/object_store.rs +++ b/vortex-io/src/file/object_store.rs @@ -4,6 +4,8 @@ use std::io; #[cfg(unix)] use std::os::unix::fs::FileExt; +#[cfg(not(unix))] +use std::io::{Read, Seek}; use std::sync::Arc; use async_compat::Compat; @@ -139,7 +141,7 @@ impl ReadSource for ObjectStoreIoSource { Ok::<_, io::Error>(buffer) } #[cfg(not(unix))] { - file.seek(range.start)?; + file.seek(io::SeekFrom::Start(range.start))?; file.read_exact(&mut buffer)?; Ok::<_, io::Error>(buffer) } From 2cb363b4489a0dd30e44d4c6f1e9f7a4beaee921 Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 15:51:33 +0000 Subject: [PATCH 14/15] fix Signed-off-by: Joe Isaacs --- vortex-io/src/file/object_store.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/vortex-io/src/file/object_store.rs b/vortex-io/src/file/object_store.rs index ca6084dc50a..611952881de 100644 --- a/vortex-io/src/file/object_store.rs +++ b/vortex-io/src/file/object_store.rs @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: Copyright the Vortex contributors use std::io; -#[cfg(unix)] -use std::os::unix::fs::FileExt; #[cfg(not(unix))] use std::io::{Read, Seek}; +#[cfg(unix)] +use std::os::unix::fs::FileExt; use std::sync::Arc; use async_compat::Compat; @@ -127,8 +127,9 @@ impl ReadSource for ObjectStoreIoSource { ) .await?; + #[cfg_attr(unix, allow(unused_mut))] let buffer = match response.payload { - object_store::GetResultPayload::File(file, _) => { + object_store::GetResultPayload::File(mut file, _) => { // SAFETY: We're setting the length to the exact size we're about to read. // The read_exact_at call will either fill the entire buffer or return an error, // ensuring no uninitialized memory is exposed. From 789786b2596ec0fbfabdc788ea037e2ccc1ddadd Mon Sep 17 00:00:00 2001 From: Joe Isaacs Date: Fri, 21 Nov 2025 16:26:53 +0000 Subject: [PATCH 15/15] fix Signed-off-by: Joe Isaacs --- .github/workflows/ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7163d328808..85fe62445e0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -446,7 +446,11 @@ jobs: uses: taiki-e/install-action@v2 with: tool: nextest - - name: Rust Tests + - name: Rust Tests (Windows) + if: matrix.os == 'windows-x64' + run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex --exclude vortex-python --exclude vortex-duckdb + - name: Rust Tests (Other) + if: matrix.os != 'windows-x64' run: cargo nextest run --locked --workspace --all-features --no-fail-fast --exclude bench-vortex build-java: