Skip to content

fix(ci): extend promote-release asset-wait budget to 40m - #25

Merged
elkaix merged 1 commit into
mainfrom
fix/promote-release-timeout
May 30, 2026
Merged

fix(ci): extend promote-release asset-wait budget to 40m#25
elkaix merged 1 commit into
mainfrom
fix/promote-release-timeout

Conversation

@elkaix

@elkaix elkaix commented May 30, 2026

Copy link
Copy Markdown
Member

Problem

The promote-release workflow runs on the tag push, in parallel with the platform build workflows, and polls for all release assets before clearing the prerelease flag and marking the release latest. The asset-wait budget was 40 × 30s = 20 minutes.

On the 0.26.0 release (the first real exercise of this flow, shipped in #24) the linux-installer workflow — whose long pole is the emulated arm64 .deb/.rpm build — did not finish attaching its assets until ~21 minutes after the tag push, 45 seconds after the poll budget had already expired:

workflow finished promote budget
windows-installer 08:40 polled 08:36→08:56
release-cli 08:50 (timed out)
linux-installer 08:57 ❌ exceeded

The promote job failed, leaving v0.26.0 stuck as a prerelease, so /releases/latest kept resolving to v0.25.0 until a manual workflow_dispatch re-promote. (0.26.0 has since been promoted manually; this prevents recurrence.)

This was not a pattern-matching bug — all 9 required asset substrings were present once builds finished; the budget was simply shorter than the slowest build.

Fix

Extend the budget to 80 × 30s = 40 minutes (~2× margin over the observed long-pole build) and surface the attempt count / budget from named variables (max_attempts, poll_interval) instead of hardcoded literals.

A genuinely stuck or failed build still surfaces as its own failed build workflow, and the workflow_dispatch re-promote path is unchanged.

Summary by CodeRabbit

  • Chores
    • Enhanced release workflow reliability with improved polling configuration and logging for asset deployment monitoring.

Review Change Stack

The promote-release job runs on the tag push, in parallel with the
platform build workflows, and polls for all release assets before
clearing the prerelease flag and marking the release latest. The budget
was 40x30s = 20 minutes.

On the 0.26.0 release the linux-installer workflow (emulated arm64
.deb/.rpm) did not finish attaching its assets until ~21 minutes after
the tag push — 45 seconds after the poll budget had already expired. The
promote job failed, leaving v0.26.0 stuck as a prerelease so
/releases/latest kept resolving to the previous version until a manual
re-promote.

Extend the budget to 80x30s = 40 minutes (~2x margin over the observed
long-pole build) and surface the attempt count / budget from named
variables. A genuinely stuck build still surfaces as its own failed
build workflow, and the workflow_dispatch re-promote path is unchanged.
@coderabbitai

coderabbitai Bot commented May 30, 2026

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3f402b08-c9a7-40c8-bf32-8e19a1398ebc

📥 Commits

Reviewing files that changed from the base of the PR and between 7a66ea1 and 8bf27c2.

📒 Files selected for processing (1)
  • .github/workflows/promote-release.yml

📝 Walkthrough

Walkthrough

The "Wait for all release assets" step in the promote-release workflow now uses configurable polling parameters (80 attempts, 30-second intervals) with a computed time budget, replacing a fixed 40-attempt loop and hardcoded 20-minute timeout messaging. Attempt logging and failure messages report the calculated budget.

Changes

Configurable release asset polling timeout

Layer / File(s) Summary
Retry budget configuration and polling loop
.github/workflows/promote-release.yml
Adds max_attempts: 80 and poll_interval: 30s variables. Computes derived minimum polling budget from configuration. Updates polling loop to iterate over max_attempts and changes logging to report attempt counters and retries in configured interval. Failure message now reports computed minutes instead of fixed 20-minute timeout.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~5 minutes

Suggested labels

bug

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The pull request title follows conventional commits format with type 'fix', scope 'ci', and a clear description of the change: extending the promote-release asset-wait budget to 40 minutes, which directly matches the main objective of this PR.
Description check ✅ Passed The pull request description comprehensively covers the problem statement, detailed context of the v0.26.0 release failure with timeline data, and the specific fix applied. However, it lacks the standard template sections (Related Issue link, Checklist) expected by the repository.
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.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/promote-release-timeout

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

@elkaix
elkaix merged commit a32263f into main May 30, 2026
21 checks passed
@elkaix
elkaix deleted the fix/promote-release-timeout branch May 30, 2026 10:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant