Skip to content

fix(release): allow retrying partially uploaded installers - #1871

Open
debpalash wants to merge 4 commits into
mainfrom
fix/release-rerun-asset-collisions
Open

fix(release): allow retrying partially uploaded installers#1871
debpalash wants to merge 4 commits into
mainfrom
fix/release-rerun-asset-collisions

Conversation

@debpalash

@debpalash debpalash commented Sep 7, 2026

Copy link
Copy Markdown
Owner

A release job can upload an installer and then fail later. Retrying that job previously failed with ReleaseAsset already_exists because the version stayed the same. Main's Windows preview run 34018049439 reproduced this after its per-user MSI step failed.

Retry runs now clear only the current version and target's installer assets before uploading. macOS retries also replace their own versionless updater archive. Other targets, versions, and manifests remain intact; permission and network failures stop the job.

Validation: 28 regression tests pass, including real mocked gh deletion calls, missing assets, failed API operations, sibling preservation, and stamped preview versions. Release recovery documentation updated.

Release retries now delete only the current version’s target installer assets before re-uploading, including the macOS versionless updater archive. This prevents ReleaseAsset already_exists failures while preserving other targets, versions, and manifests. Permission, network, or asset inventory failures stop the job and require review.

@coderabbitai

coderabbitai Bot commented Sep 7, 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: Team

Run ID: 5d1906df-85fb-489f-a199-a8b5609ea521

📥 Commits

Reviewing files that changed from the base of the PR and between 53ff367 and 0e7ee3d.

📒 Files selected for processing (5)
  • .github/workflows/release.yml
  • CHANGELOG.md
  • docs/RELEASING.md
  • scripts/clear-release-rerun-assets.py
  • tests/test_release_rerun_assets.py

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


📝 Walkthrough

Walkthrough

Changes

Release retry cleanup

Layer / File(s) Summary
Target-aware asset cleanup
scripts/clear-release-rerun-assets.py
The utility matches installer assets by target and version, handles macOS updater archives, and deletes matching release assets through the GitHub CLI.
Retry workflow integration
.github/workflows/release.yml
Later build attempts clear the current target’s assets before Tauri uploads, using the preview or release tag and stamped package version.
Validation and release behavior documentation
tests/test_release_rerun_assets.py, docs/RELEASING.md, CHANGELOG.md
Tests cover matching, failures, ordering, and preview version wiring. Documentation describes retry cleanup behavior.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 0e7ee

Release retries now remove only the matching partially uploaded installer assets before rebuilding, preserving unrelated versions, targets, and manifests. No concrete current-head merge-blocking risk remains.

🚥 Pre-merge checks | ✅ 6 | ❌ 3

❌ Failed checks (3 warnings)

Check name Status Explanation Resolution
Title check ⚠️ Warning The title uses the required Conventional Commit format with scope and accurately describes the release retry change, but it does not include an issue reference. The description also does not include o… Add the issue reference to the title or pull request body, for example: "fix(release): allow retrying partially uploaded installers (#1871)".
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 2 files. (3 skipped: 3… Write docstrings for the functions missing them to satisfy the coverage threshold.
Local-First Guarantee ⚠️ Warning The retry path adds a required GitHub Releases cloud call. .github/workflows/release.yml:610-620 runs on every retry and invokes scripts/clear-release-rerun-assets.py; that script calls `gh releas… Remove the required remote inventory/deletion step and redesign retry asset handling so it uses local-only naming or versioning and needs no GitHub Releases API call or token. Verify that retries remain functional with network access disabl…
✅ Passed checks (6 passed)
Check name Status Explanation
Description check ✅ Passed The description clearly explains the problem, implemented behavior, scope, and validation results. It does not use the template headings or include the Type and Checklist sections, but the core requir…
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.
Cross-Platform Default Parity ✅ Passed The PR changes only the release workflow, release cleanup utility, tests, and documentation. It does not change default application behavior on macOS, Windows, or Linux. The cleanup runs only when `gi…
I18n Completeness (21 Locales) ✅ Passed PASS: The pull-request diff from origin/main..HEAD changes only release workflow, release-cleanup script, tests, changelog, and release documentation. It contains no changes under frontend/ and introd…
Backward Compatibility ✅ Passed PASS: The PR changes only release workflow asset cleanup, documentation, and tests. The diff does not change omnivoice_data/, database schema, Alembic migrations, engine installation, or model-weigh…
Full details: Title check

Explanation

The title uses the required Conventional Commit format with scope and accurately describes the release retry change, but it does not include an issue reference. The description also does not include one.

Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 18 functions across 2 files. (3 skipped: 3 unsupported.)

Full details: Local-First Guarantee

Explanation

The retry path adds a required GitHub Releases cloud call. .github/workflows/release.yml:610-620 runs on every retry and invokes scripts/clear-release-rerun-assets.py; that script calls gh release view and gh release delete-asset at lines 31 and 39 using secrets.GITHUB_TOKEN. GitHub Releases access is outside the only allowed outbound destinations.

Resolution

Remove the required remote inventory/deletion step and redesign retry asset handling so it uses local-only naming or versioning and needs no GitHub Releases API call or token. Verify that retries remain functional with network access disabled and reporting disabled.

  • Fix all pre-merge checks with AI

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@greptile-apps

greptile-apps Bot commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Release retries selectively remove colliding installer assets before rebuilding.

  • Preserves assets belonging to other versions and targets.
  • Adds regression coverage for selection, deletion failures, missing assets, and preview version stamping.
  • Documents retry recovery behavior.

Important Files Changed

Filename Overview
.github/workflows/release.yml Runs target-scoped release-asset cleanup before a retried Tauri upload.
scripts/clear-release-rerun-assets.py Selects and deletes only installer assets matching the current version and target.
tests/test_release_rerun_assets.py Covers asset matching, API failures, concurrent deletion, and stamped preview versions.
CHANGELOG.md Adds the release-retry entry outside the repository-required Highlights list.
docs/RELEASING.md Documents the supported workflow for retrying partially published builds.

Fix all with Greploop Fix All in Claude Code Fix All in Codex

Reviews (2): Last reviewed commit: "test(release): isolate cleanup module in..." | Re-trigger Greptile

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