fix(ci): stop shared release tag from poisoning the other platform's build check #101

Closed
Claude wants to merge 1 commit from 0.1.34-adhoc.windows-release-skip-fix into main
Member

Summary

  • PR #100 merged correctly but the Windows release was silently skipped: release-linux and release-windows both publish to the same per-version release tag (e.g. v0.1.34), and release_build_needed.py treated "release tag already targets this commit" as "this platform already built it." Since Linux's job published v0.1.34 first, the Windows job's check then saw the tag pointing at the same head SHA and skipped its own build entirely — even though only the Linux .AppImage asset was ever attached. Confirmed via the Forgejo release API: v0.1.34 currently has only BulkImageOrganizer_0.1.34.AppImage, no .exe.
  • Fixes resolve_diff_base() to only take the "already built" shortcut when the release actually has an asset for the platform being checked (.exe for windows, .AppImage for linux), not just when the tag's target_commitish matches head. fetch_release_target_sha is replaced with fetch_release_info, which also returns the release's asset names.
  • No VERSION bump — this only touches scripts/release_build_needed.py and its test, not compiled inputs.

Test plan

  • ruff check . / ruff format --check .
  • pytest — full suite passes (349 passed, 1 skipped)
  • Added regression tests: a release tag already targeting head with only the other platform's asset no longer short-circuits to "already built"; a release with the matching platform asset still does.

🤖 Generated with Claude Code

## Summary - PR #100 merged correctly but the Windows release was silently skipped: `release-linux` and `release-windows` both publish to the same per-version release tag (e.g. `v0.1.34`), and `release_build_needed.py` treated "release tag already targets this commit" as "this platform already built it." Since Linux's job published `v0.1.34` first, the Windows job's check then saw the tag pointing at the same head SHA and skipped its own build entirely — even though only the Linux `.AppImage` asset was ever attached. Confirmed via the Forgejo release API: `v0.1.34` currently has only `BulkImageOrganizer_0.1.34.AppImage`, no `.exe`. - Fixes `resolve_diff_base()` to only take the "already built" shortcut when the release actually has an asset for the platform being checked (`.exe` for windows, `.AppImage` for linux), not just when the tag's `target_commitish` matches head. `fetch_release_target_sha` is replaced with `fetch_release_info`, which also returns the release's asset names. - No `VERSION` bump — this only touches `scripts/release_build_needed.py` and its test, not compiled inputs. ## Test plan - [x] `ruff check .` / `ruff format --check .` - [x] `pytest` — full suite passes (349 passed, 1 skipped) - [x] Added regression tests: a release tag already targeting head with only the *other* platform's asset no longer short-circuits to "already built"; a release with the matching platform asset still does. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(ci): stop shared release tag from poisoning the other platform's build-needed check
All checks were successful
CI / lint (push) Successful in 7s
CI / test (push) Successful in 2m4s
CI / test (pull_request) Successful in 2m2s
CI / lint (pull_request) Successful in 13s
Windows Release / build-release (push) Successful in 10m9s
Linux AppImage / build-release (push) Successful in 10m15s
CI / build-release-1 (push) Successful in 14s
CI / release-windows (push) Successful in 0s
CI / build-release (push) Successful in 12m32s
CI / release-linux (push) Successful in 0s
CI / build-release (pull_request) Successful in 12m48s
CI / release-linux (pull_request) Successful in 0s
CI / build-release-1 (pull_request) Successful in 8m59s
CI / release-windows (pull_request) Successful in 0s
48e2c4ca72
Linux and Windows release jobs publish to the same per-version release
tag (e.g. v0.1.34). release_build_needed.py treated "release tag already
targets this commit" as "this platform already built it," so whichever
platform's job ran second after the other had already published saw the
tag pointing at head_sha and skipped its own build entirely — even though
only the other platform's asset was attached. This is what happened to
the Windows build on PR #100: Linux published v0.1.34 first, and the
Windows job then skipped with a false "already built" reason.

Gate the already-built shortcut on the release actually carrying an
asset for the platform being checked (.exe for windows, .AppImage for
linux), not just on the tag's target_commitish matching head.
Author
Member

Merged manually to main as b30228b (squash, matching this PR's diff exactly) so the fixed release_build_needed.py is in place before dispatching the Windows backfill build for v0.1.34.

Merged manually to `main` as b30228b (squash, matching this PR's diff exactly) so the fixed `release_build_needed.py` is in place before dispatching the Windows backfill build for v0.1.34.
Claude closed this pull request 2026-06-19 05:59:11 +00:00
All checks were successful
CI / lint (push) Successful in 7s
CI / test (push) Successful in 2m4s
CI / test (pull_request) Successful in 2m2s
CI / lint (pull_request) Successful in 13s
Windows Release / build-release (push) Successful in 10m9s
Linux AppImage / build-release (push) Successful in 10m15s
CI / build-release-1 (push) Successful in 14s
CI / release-windows (push) Successful in 0s
CI / build-release (push) Successful in 12m32s
CI / release-linux (push) Successful in 0s
CI / build-release (pull_request) Successful in 12m48s
CI / release-linux (pull_request) Successful in 0s
CI / build-release-1 (pull_request) Successful in 8m59s
CI / release-windows (pull_request) Successful in 0s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ai-collab/bulk-image-organizer!101
No description provided.