Commit bf74e2c
ci(release): add Windows x86_64 GPU wheel build + smoke + publish wiring
Before this change, the GPU wheel only shipped Linux x86_64
(manylinux_2_28). End users on Windows running `pip install
sparrow-engine-gpu` got 'No matching distribution found' because PyPI
had no Windows platform tag for the GPU wheel.
The CPU wheel already had a 3-OS matrix (Linux + macOS arm64 + Windows
x86_64). The GPU wheel had Windows scaffolded in Phase C but gated
off; Phase F landed Linux-only and Windows was never re-enabled.
New jobs:
- `build-gpu-windows`: runs-on: windows-latest. No CUDA Toolkit step.
cudarc `fallback-dynamic-loading` feature (vendor/cudarc/build.rs:70)
activates the dynamic-loading cfg from the feature flag alone — no
nvcc / driver probing. nvjpeg-sys ships pre-generated bindings.
ort uses `load-dynamic`. So compile-time CUDA is not required.
Setup mirrors build-cpu-windows + Linux GPU's uv+maturin pattern:
checkout, setup-python 3.11, setup-uv, `uv tool install maturin`,
bash-shell run of `SPARROW_ENGINE_FLAVOR=gpu ./build.sh`. The OS
branches in build.sh (previous commit) skip auditwheel + the
--compatibility linux flag + the Linux-only nvidia-* runtime deps.
- `smoke-gpu-windows`: pip-install the wheel + onnxruntime-gpu,
import-only test. NOT calling sparrow_engine.init() because the
GPU flavor's Device::Auto/Cpu coerce to Cuda(0) (flavor-strict
post-MT-4.1-2), and windows-latest has no GPU — init() would fail
at CUDA context creation. Import-only still validates pip
resolution, cdylib load, PyO3 binding init, and the METADATA
Provides-Dist mutex with sparrow-engine.
Publish wiring:
- publish-pypi-gpu (line ~414) `needs:` now [build-gpu-linux,
build-gpu-windows, smoke-gpu-windows]. The existing
download-artifact step (pattern: wheel-gpu-*) auto-collects the new
wheel-gpu-windows artifact via merge-multiple, no collector change
needed.
- publish-testpypi-gpu (line ~457) same wiring.
The maturin install step uses `uv tool dir --bin` (Linux:
~/.local/bin, Windows: %USERPROFILE%\.local\bin in recent uv) rather
than hard-coded paths; actionlint shellcheck pass had flagged the
hard-coded $USERPROFILE escape sequence as fragile.
Verification:
- yaml.safe_load() on the workflow: parses OK (16 jobs).
- actionlint: zero new findings in the build-gpu-windows /
smoke-gpu-windows / publish-*-gpu line ranges. 12 pre-existing
info-level findings on unrelated jobs (use-find-not-ls in other
steps) are unchanged.
Manual verification still pending:
- workflow_dispatch with target=build-only after this lands, to
confirm the windows-latest runner completes the build and the
artifact uploads.
- workflow_dispatch with target=testpypi to publish to TestPyPI.
- pip install -i https://test.pypi.org/simple/ sparrow-engine-gpu
on a Windows test box.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>1 parent eb79f72 commit bf74e2c
1 file changed
Lines changed: 93 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
316 | 316 | | |
317 | 317 | | |
318 | 318 | | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
| 387 | + | |
| 388 | + | |
| 389 | + | |
| 390 | + | |
| 391 | + | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
319 | 408 | | |
320 | 409 | | |
321 | 410 | | |
| |||
411 | 500 | | |
412 | 501 | | |
413 | 502 | | |
| 503 | + | |
| 504 | + | |
414 | 505 | | |
415 | 506 | | |
416 | 507 | | |
| |||
456 | 547 | | |
457 | 548 | | |
458 | 549 | | |
| 550 | + | |
| 551 | + | |
459 | 552 | | |
460 | 553 | | |
461 | 554 | | |
| |||
0 commit comments