Skip to content

Add free-threaded Python CI#1597

Draft
shi-eric wants to merge 1 commit into
NVIDIA:mainfrom
shi-eric:ershi/python-3.14t-cicd
Draft

Add free-threaded Python CI#1597
shi-eric wants to merge 1 commit into
NVIDIA:mainfrom
shi-eric:ershi/python-3.14t-cicd

Conversation

@shi-eric

@shi-eric shi-eric commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

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 on
Warp's core build and test path before broadening optional dependency
coverage.

Changes

  • Add a GitHub Actions build job that installs Python 3.14t, builds Warp
    with CUDA 13, and uploads a separate build artifact.
  • Add a GitHub Actions GPU test job on linux-amd64-gpu-rtxpro6000-latest-1
    that consumes the 3.14t build artifact and runs the Warp test suite
    with --extra dev.
  • Add matching GitLab build and GPU test jobs for Python 3.14t.
  • Keep optional JAX, Torch, USD, and RMM dependencies out of this first
    coverage.

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.
  • CHANGELOG.md is updated for any user-facing changes under the Unreleased section.

Validation summary

Parsed .github/workflows/ci.yml and .gitlab-ci.yml and structurally
checked the new jobs for 3.14t commands, 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; diagnostics
reported Python 3.14.6 free-threading build.

Ran a local Python 3.14t smoke selection of Warp tests (374 tests) and
the deterministic scatter tests (57 tests) successfully.

Summary by CodeRabbit

  • New Features
    • Added CI build and test coverage for free-threaded Python 3.14 on Linux, including the corresponding Linux x86_64 artifacts.
    • Introduced a GPU test run for the new Python 3.14 free-threaded environment to extend automated GPU validation.
    • Updated CI workflows to generate test reports in the existing JUnit format for the new Python 3.14 pipeline.
@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Enterprise

Run ID: 5b2ee0cb-7eb7-4e70-9e38-a99c524cff68

📥 Commits

Reviewing files that changed from the base of the PR and between 90b204f and 3fbb332.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .gitlab-ci.yml
🚧 Files skipped from review as they are similar to previous changes (1)
  • .gitlab-ci.yml

📝 Walkthrough

Walkthrough

Adds free-threaded Python 3.14t build and GPU test jobs to both GitHub Actions (.github/workflows/ci.yml) and GitLab CI (.gitlab-ci.yml). The build jobs compile Warp with uv run --python 3.14t build_lib.py and the test jobs run warp.tests with the same interpreter.

Changes

Free-threaded Python 3.14t CI

Layer / File(s) Summary
Build jobs for Python 3.14t
.github/workflows/ci.yml, .gitlab-ci.yml
Adds build-warp-python-free-threaded and linux-x86_64 python free-threaded build jobs that install Python 3.14t, build with build_lib.py, and publish the resulting warp/bin/ artifacts.
GPU test jobs for Python 3.14t
.github/workflows/ci.yml, .gitlab-ci.yml
Adds test-warp-gpu-linux-python-free-threaded and linux-x86_64 python free-threaded test jobs that consume the new build artifacts and run warp.tests with uv run --python 3.14t, producing rspec.xml.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly matches the main change: adding free-threaded Python coverage to CI.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Jun 29, 2026

Copy link
Copy Markdown

Greptile Summary

This 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).

  • GitHub Actions: Adds build-warp-python-free-threaded (builds on ubuntu-24.04) and test-warp-gpu-linux-python-free-threaded (runs on linux-amd64-gpu-rtxpro6000-latest-1), using pinned uv 0.11.16 and actions/upload-artifact v7.
  • GitLab CI: Adds linux-x86_64 python free-threaded build (using $WARP_BUILDER_IMAGE_CU13) and linux-x86_64 python free-threaded test (using $UV_TRIXIE_SLIM_IMAGE); the test image ships uv 0.10.0, which may predate stable Python 3.14t builds in uv's manifest.

Confidence Score: 5/5

Safe 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 uv python install 3.14t.

Important Files Changed

Filename Overview
.github/workflows/ci.yml Adds build and GPU test jobs for free-threaded Python 3.14t; job structure, artifact names, dependency pinning, and conditional logic all match existing patterns.
.gitlab-ci.yml Adds build and test jobs for free-threaded Python 3.14t; the test job runs inside $UV_TRIXIE_SLIM_IMAGE (uv 0.10.0-trixie-slim) which may not include Python 3.14 stable in its bundled manifest.

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
Loading
%%{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
Loading

Reviews (2): Last reviewed commit: "Add free-threaded Python CI" | Re-trigger Greptile

Comment thread .gitlab-ci.yml
Comment on lines +511 to +530
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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 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!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@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.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Comment thread .github/workflows/ci.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between b8596fd and 90b204f.

📒 Files selected for processing (2)
  • .github/workflows/ci.yml
  • .gitlab-ci.yml
Comment thread .github/workflows/ci.yml
Comment thread .github/workflows/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>
@shi-eric shi-eric force-pushed the ershi/python-3.14t-cicd branch from 90b204f to 3fbb332 Compare June 29, 2026 13:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant