ci: raise publish retry timeout to give slow Nexus uploads headroom#15826
Conversation
The `publish` and `publishMicronaut` jobs wrap the Gradle publish command (`--no-build-cache --rerun-tasks`) in the `nick-fields/retry` action with a per-attempt `timeout_seconds: 1200` (20 min). That command does a full from-scratch recompile plus groovydoc/javadoc for 60+ modules and uploads to Apache Nexus, which legitimately runs ~14-20 min. When Nexus uploads are slow, a single attempt exceeds 20 min and is killed mid-publish; because every retry repeats the identical full uncached build, all 3 attempts hit the same wall and the job fails on a pure timeout (no build error, no Nexus exception). Raise `timeout_seconds` to 1800 (30 min) on both publish retry steps to give headroom for slow uploads so a single attempt is not killed mid-publish, while keeping `max_attempts: 3` / `retry_wait_seconds: 180` for genuine transient read-timeouts. Worst case (3 x 30 min + 2 x 180 s waits) is ~96 min, well under the GitHub Actions job limit. Assisted-by: opencode:claude-opus-4-8
There was a problem hiding this comment.
Pull request overview
Adjusts the CI publish retry configuration to better tolerate slow Apache Nexus uploads, preventing otherwise-successful snapshot publishes from being killed by an overly tight per-attempt timeout.
Changes:
- Increased
nick-fields/retrytimeout_secondsfrom 1200s to 1800s for the mainpublishjob’s snapshot publish step. - Increased
timeout_secondsfrom 1200s to 1800s for thepublishMicronautjob’s snapshot publish step. - Expanded inline comments to clarify the rationale (uncached build duration and Nexus upload headroom).
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 8.0.x #15826 +/- ##
=============================================
Coverage 49.5810% 49.5810%
Complexity 16695 16695
=============================================
Files 1947 1947
Lines 92598 92598
Branches 16179 16179
=============================================
Hits 45911 45911
Misses 39589 39589
Partials 7098 7098 🚀 New features to boost your workflow:
|
| MAVEN_PUBLISH_PASSWORD: ${{ secrets.NEXUS_PW }} | ||
| with: | ||
| timeout_seconds: 1200 | ||
| timeout_seconds: 1800 # headroom for slow Nexus uploads so a single attempt is not killed mid-publish (see `publish` job) |
There was a problem hiding this comment.
@jamesfredley why are we even defining timeout_seconds? I get that we used to do this b/c of RAO misperforming, but shouldn't we just remove teh timeout_seconds?
Also, we should merge changes without reviews ...
What
Raise the per-attempt
timeout_secondsfrom1200(20 min) to1800(30 min) on both publish retry steps in.github/workflows/gradle.yml— thepublishjob and thepublishMicronautjob.Why
CI run 28709355300 failed with only the
publishjob red. Tracing the full log of that job (85155475687):./gradlew publish aggregateChecksums aggregatePublishedArtifacts --no-build-cache --rerun-tasksinnick-fields/retrywithtimeout_seconds: 1200/max_attempts: 3.Timeout of 1200000ms hit). There was noBUILD FAILED, no exception, and no NexusRead timed out— a pure per-attempt timeout.--no-build-cache --rerun-tasks, every attempt spins a fresh Gradle daemon and does a full from-scratch recompile + groovydoc/javadoc for 60+ modules + upload to Apache Nexus, which legitimately runs ~14-20 min (the existing comment says "normal range 14min"). The last successful publish (28537677757) ran the whole job in 19m48s — essentially zero headroom.Raising the per-attempt timeout to 30 min gives headroom for slow Nexus uploads so a single attempt is not killed mid-publish, while keeping
max_attempts: 3/retry_wait_seconds: 180for genuine transient read-timeouts. Worst case (3 × 30 min + 2 × 180 s waits) is ~96 min, well under the GitHub Actions job limit.Notes