mirror of
https://github.com/kvcache-ai/Mooncake.git
synced 2026-11-05 01:17:55 +00:00
[GH-ISSUE #4751] [RFC]: Restore reliable nightly CI and TestPyPI publishing #1210
Labels
No labels
ascend
auto-closed
bug
bug
CI/Build
Common
documentation
enhancement
feature request
good first issue
help wanted
high priority
MetaX
nightly-failure
pull-request
PyTorch Backend
question
RFC
Roadmap
stale
Store
Tests
Transfer Engine
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
kvcache-ai/Mooncake#1210
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @stmatengss on GitHub (Oct 18, 2026).
Original GitHub issue: https://github.com/kvcache-ai/Mooncake/issues/4751
Changes proposed
Motivation and scope
Nightly should provide a timely, interpretable health signal for
main, and validated nightly wheels should be publishable without repeatedly exhausting TestPyPI storage. Recent runs have instead mixed source regressions, unavailable hardware, hosted-runner failures, and publishing failures into an incomplete aggregate result.This RFC proposes a staged recovery of the existing nightly workflow. It is a focused follow-up to the broader build/CI/release roadmap in #3556. The first implementation is #4750; storage administration and longer-term publication policy require separate decisions.
Problems observed
self-hosted,Linux,X64,amd,rocm,gfx950, andmooncake-pd. During investigation, the repository runner inventory contained only an ARM64 Ascend runner. The hardware job in this nightly run remained unassigned; the run was later cancelled by a newer request in thenightly-mainconcurrency group.scenario.cppstill calledBatchProbeKeywith two arguments after the API required aGrantLeasePolicyargument.mainby #4729. The recovery PR does not duplicate that fix. Subsequent publication skips caused by failed prerequisites are not upload failures.twine check. The server response body was absent from the log.TestPyPI storage evidence
Public JSON metadata was inspected during this investigation on October 19, 2026 (Asia/Shanghai). The sums below count the sizes of all listed files; private project settings were not accessible.
mooncake-transfer-enginemooncake-transfer-engine-cuda13mooncake-transfer-engine-non-cudaWarehouse defaults are 100 MiB per file and 10 GiB per project; project-specific limits may differ. Under the default project limit, the main package has only about 66 MiB available, less than the approximately 95 MB upload that failed. The collected wheel set also contains files around 119–121 MB, above the default per-file limit. These are two distinct limits and both need checking. See storage-limit documentation and Warehouse defaults.
The latest visible main-package development release had only three files, so a successful upload of one file is not sufficient evidence that a nightly release is complete.
Proposed changes
1. Restore bounded, explicit nightly behavior
Implemented in #4750:
NIGHTLY_ROCM_INTEGRATION=truerepository variable or therun_rocm_integrationmanual input. Otherwise emit a warning and job summary explaining the missing coverage. ROCm wheel builds and smoke tests remain required.skippedresult when it was disabled. When enabled, failure, cancellation, or skipping must fail the nightly gate. Preserve strict checks for all other required jobs and the existing explicitskip_publishmode.BUILD_JOBS/MAX_JOBSto two. Build the complete Dockerfile with a cache-only output, avoiding a second image-store export. Add memory/disk diagnostics and a 180-minute job timeout.The tradeoff is explicit: a run may complete without MI350X hardware coverage while the runner is unavailable. It must not advertise that coverage as passing. Lower Docker concurrency may increase build time; the timeout and hosted measurements will show whether the default is practical.
2. Recover TestPyPI publishing with project-owner actions
TESTPYPI_API_TOKENin the GitHubnightlyenvironment. It must be a TestPyPI token with upload access to every project in the wheel set. The first publication of the ROCm project also requires permission to create it if it does not yet exist. The observed HTTP 400 alone is not a reason to rotate a valid token.No package deletion, quota change, or secret update is included in #4750 or has been performed by this investigation.
3. Prevent recurrence
These are follow-up proposals, not behavior already implemented by #4750:
Validation and acceptance criteria
Current evidence for #4750 at
b1da7c6cfd669fd17055d764f7824562e032224d:skip_publish=true; this is not evidence of successful TestPyPI publication or MI350X hardware testing.Recovery is complete when:
Related work and decisions requested
twine --verbose. #4750 includes that overlapping diagnostic change within the broader recovery.Maintainer decisions: accept the temporary opt-in MI350X policy, choose a TestPyPI retention window and owner, and decide whether longer-lived nightly packages should move to a lifecycle-managed host.
Before submitting a new issue...
@github-actions[bot] commented on GitHub (Oct 18, 2026):
Thanks for opening this issue, @stmatengss!
11641725A maintainer will triage this when possible. To help us respond faster, please include:
Useful links: Documentation · Contributing guide
@he-yufeng commented on GitHub (Oct 18, 2026):
One data point for the problem table, from triaging the linked nightly run on #4749: the
nightly-coverage/nightly-testlegs failed on a real compile break, but the mechanism was a landing-order race, not a signal-quality problem. #4523 (BatchProbe DSL verb, landed 10-15) added a call in the then-current two-argument form and #4314 (BatchProbeKey gains a leadingGrantLeasePolicy, landed 10-16 about 25 hours later) changed the signature; each was green against the main it was tested on, and main was broken for roughly 34 hours until #4729 fixed the call site. So for the "source regressions" row, at least this instance, the gap was that neither PR's CI compiled the other's final tree. A merge queue (or a required rebase-on-merge for files touching the same API surface) is the class of fix that closes it; leg separation alone would still have shipped the break, just with a cleaner report.Separately, the
Build Docker Imageleg in that run failed with zero failed steps, which matches the hosted-runner/provisioning category rather than anything in the Dockerfile.@whn09 commented on GitHub (Oct 21, 2026):
Data point on the TestPyPI 400: with #4750's verbose upload, the 2026-10-20 nightly (run) now shows the reason. The first upload is rejected with:
mooncake-transfer-engine: 24 releases, 10.67 GB, mostly0.3.14.dev202609xxat ~0.7 GB each.