Skip to content

fix: build-images CI failures (deadsnakes PPA flakiness + nightly version mismatch) - #1780

Merged
rapids-bot[bot] merged 3 commits into
mainfrom
fix-build-images-workflow
Aug 24, 2026
Merged

fix: build-images CI failures (deadsnakes PPA flakiness + nightly version mismatch)#1780
rapids-bot[bot] merged 3 commits into
mainfrom
fix-build-images-workflow

Conversation

@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator

Summary

Fixes two independent issues causing the build-images workflow to fail (e.g. https://github.com/NVIDIA/cuopt/actions/runs/32692816239):

  • ci/docker/Dockerfile: add-apt-repository ppa:deadsnakes/ppa calls Launchpad's API to fetch the PPA's signing key, which is subject to transient failures (observed HTTP 500 GPGKeyTemporarilyNotFoundError). Wrapped it in a 5-attempt retry loop with backoff so a transient Launchpad hiccup doesn't fail the whole image build.
  • .github/workflows/build_test_publish_images.yaml: compute-cuopt-ver computed CUOPT_VER with plain rapids-generate-version, but ci/build_wheel.sh has published nightly wheels with a .post<datetime> suffix since ensure nightly builds always produce new packages #1661 (dbaf523f). The two were out of sync, so nightly image builds pinned a version (e.g. 26.10.0a43) that was never actually published — only .post-suffixed builds exist on the index — causing pip install to fail with "No matching distribution found". Now sets RAPIDS_VERSION_SUFFIX=".post${RAPIDS_DATETIME_STRING}" before calling rapids-generate-version, mirroring ci/build_wheel.sh. RAPIDS_VERSION_SUFFIX is a no-op on release builds (confirmed in rapids-generate-version's source), so release tagging/versioning is unaffected.

Test plan

  • Trigger build-images workflow (nightly build) and confirm the python-env stage installs Python without hitting the deadsnakes PPA error
  • Confirm pip install cuopt-server-cu13==<CUOPT_VER> resolves to a real published nightly wheel
  • Confirm release-build version computation (IMAGE_TAG_PREFIX) is unchanged for tagged releases

🤖 Generated with Claude Code

… image build

- ci/docker/Dockerfile: retry `add-apt-repository ppa:deadsnakes/ppa` up to
  5 times with backoff. It calls Launchpad's API to fetch the PPA signing
  key, which is prone to transient failures (observed HTTP 500
  GPGKeyTemporarilyNotFoundError), failing the whole image build.

- build_test_publish_images.yaml: compute-cuopt-ver now sets
  RAPIDS_VERSION_SUFFIX=".post<datetime>" like ci/build_wheel.sh does
  (since #1661), so the version pinned in the Dockerfile's pip install
  matches what's actually published for nightly wheels. RAPIDS_VERSION_SUFFIX
  is a no-op for release builds, so release tagging is unaffected.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ramakrishnap-nv
ramakrishnap-nv requested a review from a team as a code owner August 24, 2026 19:57
@ramakrishnap-nv ramakrishnap-nv added this to the 26.10 milestone Aug 24, 2026
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

CI Test Summary

⏭️ All 5 test job(s) skipped.

@coderabbitai

coderabbitai Bot commented Aug 24, 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.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 7ffa9a04-483e-496c-bbdf-6c3af0eb7012

📥 Commits

Reviewing files that changed from the base of the PR and between 5f28d5c and 368373c.

📒 Files selected for processing (1)
  • ci/docker/Dockerfile

Included review availability: Your plan provides up to 12 included reviews per hour; 9 remain after this review.


📝 Walkthrough

Walkthrough

The Docker build now waits 5 seconds between deadsnakes PPA registration retries. The workflow comment describing nightly version handling is shorter. Workflow behavior remains unchanged.

Changes

CI build updates

Layer / File(s) Summary
Build setup and workflow documentation
ci/docker/Dockerfile, .github/workflows/build_test_publish_images.yaml
PPA registration retries up to five times with 5-second delays before failure. The nightly version comment is condensed without changing workflow behavior.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Merge Risk: ⚪ Minimal · up to 36837

This PR makes localized CI changes to retry a transient package-source failure and align nightly image versioning with published wheels. No actionable merge-blocking risk remains in the supplied evidence; it is merge-ready after normal checks and review.

Suggested reviewers: msarahan

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the two build-images CI fixes: deadsnakes PPA flakiness and nightly version mismatch.
Description check ✅ Passed The description accurately explains both fixes, their causes, and the planned validation steps.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 0 files. (1 skipped: 1 unsupported.)
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 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix-build-images-workflow

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

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@ramakrishnap-nv ramakrishnap-nv self-assigned this Aug 24, 2026
@ramakrishnap-nv ramakrishnap-nv added bug Something isn't working non-breaking Introduces a non-breaking change labels Aug 24, 2026
@ramakrishnap-nv

Copy link
Copy Markdown
Collaborator Author

/merge

@rapids-bot
rapids-bot Bot merged commit 337aa3c into main Aug 24, 2026
31 checks passed
ramakrishnap-nv added a commit to ramakrishnap-nv/cuopt_public that referenced this pull request Aug 25, 2026
build-images failed with 'Expected environment variable
RAPIDS_DATETIME_STRING to be set and non-empty'.

rapids-datetime-string does not generate that value in CI -- it only
validates that something upstream exported it, and exits 1 otherwise.
It is exported by the RAPIDS shared workflows, which is why
ci/build_wheel.sh can use it. This image job is a plain ubuntu-latest
job that never receives it, and the variable is set nowhere in this
repo, so NVIDIA#1780's use of it could not work.

Setting it locally would not help either. The suffix must match the
timestamp the wheel job used, and a freshly computed one is simply a
different unpublished version -- the same 'No matching distribution
found' failure NVIDIA#1780 set out to fix. The value is not reachable from
here: the wheel jobs are shared-workflow calls and build.yaml exposes
no outputs.

Resolve the version from the nightly index instead. build-images runs
after wheel-publish-*, so the newest .post build of this base version
is the one this run produced. All cuopt packages share a single .post
number across arches and CUDA suffixes (verified on the index), so one
resolved version pins every install in the Dockerfile.

This also fails loudly and early when no matching wheel was published,
rather than deep inside pip in a matrix job.

Release builds are unaffected: they keep the bare version and never
consult the index.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
ramakrishnap-nv added a commit to ramakrishnap-nv/cuopt_public that referenced this pull request Aug 25, 2026
build-images failed with 'Expected environment variable
RAPIDS_DATETIME_STRING to be set and non-empty'.

rapids-datetime-string does not generate that value in CI, it only
validates that something upstream exported it, so NVIDIA#1780's use of it
could not work in this job.

The value is already available. build.yaml runs
compute-build-details.yaml and passes build-datetime to every other
build job; build-images was the only one that did not take it. Wire it
through and use it directly, which is what NVIDIA#1780 intended.

Because the datetime comes from the same build-details job that stamped
the published wheels, the pin resolves to this run's build. Resolving
the newest matching version from the package index was considered and
rejected: versions are keyed on distance from the last tag, so a
feature-branch build and a main build can share an alpha, and the
lookup could pick the wrong commit's wheels.

Release builds are unaffected: RAPIDS_VERSION_SUFFIX is a no-op there.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Ramakrishna Prabhu <ramakrishnap@nvidia.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants