Repository navigation
fix(release): compare draft asset names with deterministic collation - #243
Draft
raiseCatError wants to merge 2 commits into
Draft
raiseCatError wants to merge 2 commits into
raiseCatError wants to merge 2 commits into
Conversation
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Observed failure
Release publish run 43085872196 failed in
Verify the draft's assets byte for byteafter successfully creating the five-file v2.1.0 draft. The GitHub CLI's jqsortlists uppercaseMeowDisplay*before lowercaseappcast*, while the runner's locale-sensitive POSIXsortputs lowercase files first. The lists have identical members; the differing collation caused a false-negative and skipped the actual downloaded-asset verification.Bounded correction
Use
LC_ALL=C sortfor the expected names, matching jq's bytewise ordering. This changes only the comparison order, not the membership requirement, artifact SHA-256 check, signing/notarization verification, release gate, or publish/revert sequence.Evidence and verification
MeowDisplay.dmg MeowDisplayReceiver.dmg SHA256SUMS.txt appcast-receiver.xml appcast.xmlvsappcast-receiver.xml appcast.xml MeowDisplay.dmg MeowDisplayReceiver.dmg SHA256SUMS.txt.release-toolingcheck and remaining required CI checks. No live GitHub Release publication, physical-device test, or rerun is claimed here.Important: release recovery remains separate
Do not merge this into
release/2.1.0or advance that branch merely to apply this fix. iOS 2.1 is already published against immutable release candidate94c796fc34fd699776764d67d2f26013909a308e; moving the release head would create a different candidate. A v2.1.0 draft remains after the failed run, andrelease-staterecords publicationfailed. A normal rerun of the original immutable release workflow still carries the old comparison and refuses an existing draft. Recovery requires a separately reviewed, fail-closed procedure that verifies the draft byte-for-byte, retains its SHA and both feed signatures, and preserves the explicit publication approval. Do not delete or publish the draft as part of this PR.Scope: only
.github/workflows/release-publish.yml; no app code, release config, credentials, environment protection, store publication, or release-state mutation.