Add free-threaded Python CI#1597
Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds free-threaded Python 3.14t build and GPU test jobs to both GitHub Actions ( ChangesFree-threaded Python 3.14t CI
Estimated code review effort🎯 2 (Simple) | ⏱️ ~10 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Greptile SummaryThis PR adds CI coverage for free-threaded Python 3.14t by introducing dedicated build and GPU test jobs in both GitHub Actions and GitLab CI, building Warp with CUDA 13 and running the core test suite without optional dependencies (JAX, Torch, USD, RMM).
Confidence Score: 5/5Safe to merge; the changes are additive CI jobs that follow established patterns in both GitHub Actions and GitLab CI, and failures in the new jobs do not block existing jobs. Both new CI paths are additive and isolated from existing jobs. The GitHub Actions path pins uv 0.11.16 and uses the same action versions, artifact naming conventions, and runner labels as surrounding jobs. The GitLab path follows the same build → artifact → test flow as all other Linux GPU jobs. The only outstanding concern (uv 0.10.0 in the GitLab image may not include Python 3.14 stable in its bundled manifest) was raised in a prior review thread and does not block merge — a runtime failure there would surface immediately in the new job without affecting any existing job. .gitlab-ci.yml — the test job uses $UV_TRIXIE_SLIM_IMAGE (uv 0.10.0) and the build job uses $WARP_BUILDER_IMAGE_CU13 (unknown uv version), both of which need to be verified as supporting Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
subgraph GitHub Actions
GH_BUILD["build-warp-python-free-threaded\n(ubuntu-24.04, uv 0.11.16)"]
GH_ARTIFACT["Artifact: build-artifact-ubuntu-x86_64-cuda13-python314t"]
GH_GPU_CHANGES["gpu-changes"]
GH_TEST["test-warp-gpu-linux-python-free-threaded\n(linux-amd64-gpu-rtxpro6000-latest-1)"]
GH_BUILD --> GH_ARTIFACT
GH_ARTIFACT --> GH_TEST
GH_GPU_CHANGES -->|gpu_relevant output| GH_TEST
end
subgraph GitLab CI
GL_BUILD["linux-x86_64 python free-threaded build\n($WARP_BUILDER_IMAGE_CU13)"]
GL_ARTIFACT[".save_warp_bin_artifact"]
GL_TEST["linux-x86_64 python free-threaded test\n($UV_TRIXIE_SLIM_IMAGE / uv 0.10.0)"]
GL_BUILD --> GL_ARTIFACT
GL_ARTIFACT --> GL_TEST
end
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
subgraph GitHub Actions
GH_BUILD["build-warp-python-free-threaded\n(ubuntu-24.04, uv 0.11.16)"]
GH_ARTIFACT["Artifact: build-artifact-ubuntu-x86_64-cuda13-python314t"]
GH_GPU_CHANGES["gpu-changes"]
GH_TEST["test-warp-gpu-linux-python-free-threaded\n(linux-amd64-gpu-rtxpro6000-latest-1)"]
GH_BUILD --> GH_ARTIFACT
GH_ARTIFACT --> GH_TEST
GH_GPU_CHANGES -->|gpu_relevant output| GH_TEST
end
subgraph GitLab CI
GL_BUILD["linux-x86_64 python free-threaded build\n($WARP_BUILDER_IMAGE_CU13)"]
GL_ARTIFACT[".save_warp_bin_artifact"]
GL_TEST["linux-x86_64 python free-threaded test\n($UV_TRIXIE_SLIM_IMAGE / uv 0.10.0)"]
GL_BUILD --> GL_ARTIFACT
GL_ARTIFACT --> GL_TEST
end
Reviews (2): Last reviewed commit: "Add free-threaded Python CI" | Re-trigger Greptile |
| linux-x86_64 python free-threaded test: | ||
| stage: test | ||
| needs: [linux-x86_64 python free-threaded build] | ||
| image: $UV_TRIXIE_SLIM_IMAGE | ||
| variables: | ||
| IPP_RUNNER_EXECUTION_DURATION: "3600" | ||
| UV_PYTHON: "3.14t" | ||
| extends: | ||
| - .ipp_lnx_x86_64_gpu | ||
| - .save_test_report_artifact | ||
| - .basic_test_changes_rules | ||
| before_script: | ||
| - !reference [.snippets, section-start-install-deps] | ||
| - df -h | ||
| - apt-get update && apt-get install build-essential --no-install-recommends -y | ||
| - uv python install 3.14t | ||
| - !reference [.snippets, move-linux-x86_64-binaries] | ||
| - !reference [.snippets, section-end-install-deps] | ||
| script: | ||
| - uv run --python 3.14t --extra dev -m warp.tests --junit-report-xml rspec.xml -s autodetect --failfast |
There was a problem hiding this comment.
uv version in GitLab image may not include Python 3.14t builds
The linux-x86_64 python free-threaded test job runs inside $UV_TRIXIE_SLIM_IMAGE, which is pinned to uv:0.10.0-trixie-slim. The GitHub Actions workflow explicitly requires uv 0.11.16, a significantly newer release. Python 3.14 stable was released in October 2025, so its builds in python-build-standalone may not be included in uv 0.10.0's embedded manifest — meaning uv python install 3.14t would fail (or silently resolve to a pre-release 3.14 build) in the GitLab test job while working correctly in the GitHub Actions counterpart. The same concern applies to the build job's uv python install 3.14t step if the WARP_BUILDER_IMAGE_CU13 image also ships uv 0.10.x.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
@greptileai Verified directly rather than changing the image: uv 0.10.0 ran uv python install 3.14t successfully and installed cpython-3.14.3+freethreaded-linux-x86_64-gnu. The pinned test image therefore supports this selector and does not fall back to a prerelease. The builder job also exercises uv python install 3.14t, which will fail explicitly if its private image lacks support. No change is needed. Please verify the requested interpreter against the cited uv version before inferring availability from a version gap.
There was a problem hiding this comment.
You're right, and thank you for verifying directly. My inference from the version gap was incorrect — cpython-3.14.3+freethreaded builds were available in python-build-standalone well before Python 3.14 stable, so uv 0.10.0's embedded manifest includes them. Direct verification is the right standard here, and I should not have inferred unavailability from a version delta alone. The job is fine as written.
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.github/workflows/ci.yml:
- Around line 577-578: The reusable CI step using
nv-gha-runners/setup-proxy-cache is still referenced with the mutable `@main` tag,
so update every occurrence in the ci workflow to a fixed commit SHA. Locate each
“Setup proxy cache” step in .github/workflows/ci.yml and replace the action
reference with the reviewed pinned hash consistently across all four uses.
- Around line 151-178: The CI workflow currently uploads warp/bin/ even when
steps.cache-build.outputs.cache-hit is true, which can let cached artifacts from
an untrusted source reach the downstream GPU test job. Update the cache handling
in the build job so restore and save are separated, and only persist warp/bin/
from trusted refs after Build Warp runs rather than on a cache hit. Keep using
the existing cache-build, Build Warp, and Upload build artifact steps as
anchors, and also pin nv-gha-runners/setup-proxy-cache@main to a specific commit
instead of a moving branch.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yml
Review profile: CHILL
Plan: Enterprise
Run ID: 8902a7ab-c579-47e2-b000-ba041a04880a
📒 Files selected for processing (2)
.github/workflows/ci.yml.gitlab-ci.yml
CI only exercised the default GIL-enabled Python builds, which left Python 3.14 free-threaded compatibility untested. uv can install this interpreter explicitly with the 3.14t specifier, so the pipelines can validate that Warp still builds and runs the core GPU test suite there. Add one build and one GPU test job to both GitHub Actions and GitLab CI. The jobs keep the dependency set conservative by building without extras and testing with the existing dev extra instead of adding optional JAX, Torch, USD, or RMM coverage. Signed-off-by: Eric Shi <ershi@nvidia.com>
90b204f to
3fbb332
Compare
Description
Add CI coverage for Warp build and GPU tests using uv's free-threaded
Python 3.14 selector,
3.14t. This keeps the first coverage focused onWarp's core build and test path before broadening optional dependency
coverage.
Changes
3.14t, builds Warpwith CUDA 13, and uploads a separate build artifact.
linux-amd64-gpu-rtxpro6000-latest-1that consumes the
3.14tbuild artifact and runs the Warp test suitewith
--extra dev.3.14t.coverage.
Checklist
Unreleasedsection.Validation summary
Parsed
.github/workflows/ci.ymland.gitlab-ci.ymland structurallychecked the new jobs for
3.14tcommands, artifact wiring, runner labels,and GitLab
needs.Ran
uvx pre-commit run --files .github/workflows/ci.yml .gitlab-ci.yml.Built Warp locally with
uv run --python 3.14t build_lib.py; diagnosticsreported Python
3.14.6 free-threading build.Ran a local Python
3.14tsmoke selection of Warp tests (374 tests) andthe deterministic scatter tests (
57 tests) successfully.Summary by CodeRabbit