[BLD] Add win_arm64 wheel build to CI#7447
Draft
vortex-captain wants to merge 2 commits into
Draft
Conversation
Reviewer ChecklistPlease leverage this checklist to ensure your code review is thorough before approving Testing, Bugs, Errors, Logs, Documentation
System Compatibility
Quality
|
added 2 commits
July 16, 2026 14:58
Add an aarch64-pc-windows-msvc build leg to the PyPI wheel workflow, mirroring the win_amd64 build. No test job is added, matching how linux aarch64 and macOS wheels are already built without CI tests. Native-toolchain requirements handled (not feature changes): - clang on PATH for ring - CFLAGS/CXXFLAGS _ARM64_=1 for simsimd/usearch on Windows-ARM - generator 0.8.9 (adds aarch64_windows.rs) - skip the x64 sqlite DLL upgrade on ARM64
Temporary workflow_dispatch workflow to validate the Windows ARM64 wheel build on a GitHub-hosted windows-11-arm runner, with tests skipped. Delete before merging.
cea24fa to
44f3aac
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a Windows ARM64 (
aarch64-pc-windows-msvc) wheel build leg to the PyPIrelease workflow, mirroring the existing
win_amd64build as closely aspossible.
The wheel is
cp39-abi3-win_arm64(frompyo3abi3-py39), matching the abi3tag produced on every other platform.
Changes
.github/workflows/_build_release_pypi.yml— add{ os: windows, runner: windows-11-arm, target: aarch64 }to the build matrix,plus a step to put the VS-bundled ARM64
clangonPATHand setCFLAGS/CXXFLAGS_aarch64_pc_windows_msvc=-D_ARM64_=1for the arm64 leg only..github/actions/python/action.yaml— skip the x64 SQLite-DLL upgrade onARM64 (the x64 DLL is ABI-incompatible; arm64 Python already ships sqlite ≥ 3.35).
Cargo.lock— bumpgenerator0.8.8 → 0.8.9 (addsaarch64_windows.rs,required for
aarch64-pc-windows-msvc).Native-toolchain notes (not feature changes)
Feature enablement is identical to
win_amd64/linux aarch64— same[tool.maturin]features,abi3-py39, no--zig(Linux-only). The arm64 legonly needed build-toolchain fixes:
ringrequiresclangonaarch64-pc-windows-msvc.simsimd(bundled directly and viausearch) includes<processthreadsapi.h>on Windows-ARM, which needs the
_ARM64_SDK arch macro. It is compiled as C(
CFLAGS) directly and as C++ byusearch(CXXFLAGS), so both are set.skipped on arm64.
Build validation ✅
The build leg was validated on a GitHub-hosted
windows-11-armrunner andsucceeded, producing
chromadb-*-cp39-abi3-win_arm64.whl(~22.7 MB).Why no win_arm64 test job is added
No
aarch64target is currently tested in CI on any OS —linux aarch64andboth
macOSarches (x86_64 and aarch64) are already built-and-published without atest job; only
linux x86_64andwindows x64run the test suite. This PR keepswin_arm64 consistent with that existing policy: it builds and publishes the
wheel (same as linux aarch64 / macOS) but does not add a test job.
Adding a win_arm64 test job would also currently be blocked by external ecosystem
gaps — dependencies with no
win_arm64wheels on PyPI:grpciopyproject.toml, and transitive viaopentelemetry-exporter-otlp-proto-grpc)win_arm64wheel ⇒pip install chromadbcannot resolve on arm64 without an external arm64 wheel source.grpcio-tools.github/actions/python)win_arm64wheel. Not required to run tests (stubs ship inside the wheel), but the proto-gen step would need adjusting for arm64.pulsar-client(via legacychromadb==0.4.1)test_cross_version_persist.pywin_arm64wheel ⇒ the cross-version persistence test cannot install old chromadb releases.Local test results (win_arm64, all
win_amd64-equivalent jobs)Even though no CI test job is added, the wheel was validated locally on a native
Windows ARM64 host against the built
cp39-abi3-win_arm64wheel(
grpcio/grpcio-toolssupplied from prebuilt arm64 wheels;chroma-hnswlibbuilt from source), using the exact CI targets and env
(
CHROMA_RUST_BINDINGS_TEST_ONLY=1,PROPERTY_TESTING_PRESET=normal):test-rust-bindings— coretest-rust-bindings— propertytest-rust-bindings-stresstest-python-clitest-rust-single-node-integration— coretest-rust-single-node-integration— propertytest-rust-single-node-integration— stresstest-rust-thin-clienttest-rust-bindings— cross-versionpulsar-clienthas no win_arm64 wheel)test-cluster-rust-frontendis ubuntu-only and not part of the Windows path.Note: this leg publishes to PyPI
Adding the
windows/aarch64entry to thebuildmatrix means its artifact isswept up by the
releasejob'sdownload-artifact+maturin upload wheels-*/*and published to PyPI on release (Test PyPI on
main, real PyPI on a versiontag) — the intended outcome, and consistent with the already-published-untested
linux aarch64 / macOS wheels.
Notes for reviewers
[BLD] TMP: win_arm64 build-only validation workflowadds atemporary
workflow_dispatchworkflow used only to validate the build on ahosted arm64 runner. It should be dropped before merge.