Skip to content

fix(ci): keep source-only indexes in GPU test env resolution - #705

Merged
zywind merged 1 commit into
mainfrom
yunfeng/fix-gpu-ci-flashinfer-index
Aug 7, 2026
Merged

fix(ci): keep source-only indexes in GPU test env resolution#705
zywind merged 1 commit into
mainfrom
yunfeng/fix-gpu-ci-flashinfer-index

Conversation

@zywind

@zywind zywind commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Summary

Fixes GPU smoke + e2e failing on main with:

× No solution found when resolving dependencies:
╰─▶ Because there is no version of flashinfer-cubin{sys_platform == 'linux'}==0.6.14 ...
    conclude that your requirements are unsatisfiable.

Root cause

setup-gpu-test-env infers which indexes to pass to uv by matching the CUDA extra
against each index's name or URL:

if index["name"].endswith(f"-{cuda_extra}") or f"/{cuda_extra}" in index["url"]

When that inference landed (#691, Aug 4 16:50 UTC) every index encoded its variant one
of those two ways, so the rule held. #664 landed 27 minutes later (17:17 UTC) and added
the first index that doesn't: flashinfer-cubin, which serves a single
variant-agnostic https://flashinfer.ai/whl/ and is bound to packages only through
[tool.uv.sources].

It matches neither branch of the rule, so it was silently dropped — and since the
install also passes --no-sources, the sources table couldn't reach it either. Both
PRs were green on their own base; the breakage exists only in the merge.

That index is the only place flashinfer-cubin==0.6.14 exists:

Index max flashinfer-cubin
https://flashinfer.ai/whl/ 0.6.16.post1 (has 0.6.14)
PyPI 0.6.13
https://flashinfer.ai/whl/cu129 does not serve the package
https://wheels.vllm.ai/0.26.0/cu129 0.6.13

Fix

Also collect indexes referenced by [tool.uv.sources] for the target extra.

Before / after, run against pyproject.toml at cu129:

  https://download.pytorch.org/whl/cu129
  https://flashinfer.ai/whl/cu129
+ https://flashinfer.ai/whl/
  https://wheels.vllm.ai/0.26.0/cu129

This matches the index set in the documented manual install command, which is why
installing by hand works today while CI does not.

Verification

Resolution flips with exactly that one index, reproducing CI's error before and
succeeding after:

$ uv pip install --dry-run --no-deps --default-index https://pypi.org/simple \
    --index .../cu129 (x3) --index-strategy unsafe-best-match flashinfer-cubin==0.6.14
  × No solution found ... there is no version of flashinfer-cubin==0.6.14

$ # same, plus --index https://flashinfer.ai/whl/
  Resolved 1 package
   + flashinfer-cubin==0.6.14

mise run format-check passes. No dependency versions change.

Pre-Review Checklist

  • mise run format && mise run check
  • GPU CI status check passes -- this PR is the fix for it

Other Notes

CI-only change; no source or dependency changes. Worth noting the
index_count < 3 guard did not catch this — the count stayed at exactly 3
while the wrong index was dropped.

Summary by CodeRabbit

  • Bug Fixes
    • Improved GPU test environment setup to reliably discover all CUDA package indexes configured for the selected extra.
    • Added support for indexes declared through source configuration, alongside existing name- and URL-based matching.

The GPU setup action infers which indexes to pass to uv by matching the
CUDA extra against each index name or URL. Every index predated the
inference and encoded its variant one of those two ways, so the rule held.

PR #664 then added the flashinfer-cubin index, which serves a single
variant-agnostic https://flashinfer.ai/whl/ and is routed to packages only
through [tool.uv.sources]. It matches neither branch of the rule, so it was
dropped from the index list, and because the install also passes
--no-sources there was nothing left to reach it. flashinfer-cubin 0.6.14
exists only on that index (PyPI stops at 0.6.13, and the /cu129 subpath does
not serve the package at all), so GPU smoke and e2e both failed to resolve.

Collect indexes referenced by [tool.uv.sources] for the target extra as
well. This restores https://flashinfer.ai/whl/ to the index list, matching
the documented manual install command.

Signed-off-by: Yunfeng Zhang <yunzhang@nvidia.com>
@zywind
zywind requested a review from a team as a code owner August 6, 2026 16:55
@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 423f903d-573e-4321-8de4-857ce91bdf6a

📥 Commits

Reviewing files that changed from the base of the PR and between d806aaf and 44d31ce.

📒 Files selected for processing (1)
  • .github/actions/setup-gpu-test-env/action.yml
📜 Recent review details
⏰ Context from checks skipped due to timeout. (1)
  • GitHub Check: Greptile Review
🧰 Additional context used
📓 Path-based instructions (1)
.github/**

⚙️ CodeRabbit configuration file

Review GitHub configuration for branch protection expectations, CODEOWNERS alignment, least privilege permissions, pinned actions where practical, and consistency with CONTRIBUTING.md.

Files:

  • .github/actions/setup-gpu-test-env/action.yml
🔇 Additional comments (1)
.github/actions/setup-gpu-test-env/action.yml (1)

84-108: LGTM!


Walkthrough

The GPU test environment action now reads the complete [tool.uv] configuration and includes indexes declared in [tool.uv.sources] for the selected CUDA extra.

Changes

CUDA index discovery

Layer / File(s) Summary
Include source-declared CUDA indexes
.github/actions/setup-gpu-test-env/action.yml
The action includes source-declared indexes matching CUDA_EXTRA when it emits installation index URLs. Existing name- and URL-matched CUDA indexes remain supported.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested labels: bug

Suggested reviewers: binaryaaron

🚥 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 and concisely describes the main change: retaining source-only indexes during GPU test environment resolution.
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
  • Commit unit tests in branch yunfeng/fix-gpu-ci-flashinfer-index

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

@coderabbitai coderabbitai Bot added the bug Defects in shipped behavior label Aug 6, 2026
@greptile-apps

greptile-apps Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR fixes GPU test-environment resolution by retaining variant-agnostic package indexes referenced through [tool.uv.sources].

  • Parses the complete tool.uv configuration instead of only its index list.
  • Collects source-bound indexes matching the selected CUDA extra.
  • Includes their URLs alongside indexes selected by existing CUDA name and URL heuristics.

Confidence Score: 5/5

The PR appears safe to merge, with the source-only FlashInfer index now included in the GPU dependency-resolution path.

Current GPU workflow callers use the default cu129 extra, whose source declarations map uniquely to validated index definitions and now produce the complete required index set.

Important Files Changed

Filename Overview
.github/actions/setup-gpu-test-env/action.yml Correctly adds source-bound indexes for the selected CUDA extra without disrupting the existing GPU index-selection path.

Reviews (1): Last reviewed commit: "fix(ci): keep source-only indexes in GPU..." | Re-trigger Greptile

@zywind
zywind enabled auto-merge August 6, 2026 17:07
@zywind
zywind added this pull request to the merge queue Aug 6, 2026
@codecov

codecov Bot commented Aug 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to no response for status checks Aug 6, 2026
@zywind
zywind added this pull request to the merge queue Aug 7, 2026
Merged via the queue into main with commit 4921cdf Aug 7, 2026
23 of 27 checks passed
@zywind
zywind deleted the yunfeng/fix-gpu-ci-flashinfer-index branch August 7, 2026 13:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:ci bug Defects in shipped behavior

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants