fix(ci): verify every bundled plugin, require both update archives, and test the registry merge - #2346
Merged
Merged
Conversation
…nd test the registry merge Claude-Session: https://claude.ai/code/session_013MEaba8K1HQcyDNeq5wEFk
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
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.
Three release-path checks that passed while covering less than they claimed.
verify-build.shverified 3 of the 14 bundled pluginsproject.ymlcopies 14 plugins into the app bundle. A release missing any of the other eleven passed verification and then printed✅ All bundled plugin bundles present, which was not true.The list is now derived from
project.yml's copy phase, which is what decides what ends up in the bundle. Cross-checked against a PyYAML parse of the same file: 14 and 14, same names, same order.Parsed with a regex rather than PyYAML deliberately. This runs on the release path and PyYAML is not part of a stock runner image, so importing it would trade a silent gap for a hard failure at the worst moment. The shape being matched is fixed and small:
The ZIP rename could not fail
No
else, twice, followed by an unconditional✅ Artifacts organized successfully. A missing or differently named ZIP meant no rename, no error, and a release publishing whatever the upload glob happened to match. Sparkle serves those ZIPs, so an absent one is an update nobody receives.Both architectures are now required, and the matching DMG with them, and the step fails naming the file.
The registry retention policy had no test for the behaviour it exists for
--keep-kit-versions 2exists so a user on the previous app version can still install a plugin. Nothing tested that. The one existing merge test starts from a legacy null-version binary, which is dropped rather than retained, so the surviving-binary path was never exercised at all.Four tests added:
Each was mutation-tested rather than just run. Breaking
merged_binaries = surviving + new_binariesintomerged_binaries = new_binaries, which is the exact regression that would give every user on the previous app versionnoCompatibleBinary, is caught only by the first of these:Removing the new-binary assertion is caught only by the fourth. Both pass again once restored.
Verification
test_update_registry.pypasses and fails correctly under three separate mutations.actionlintis clean across all six workflows andshellcheck --severity=warningclean across all 43 scripts.verify-build.shis not run end to end here, because it needs a signed and notarized.app; its plugin derivation was checked against the authoritative parse instead.https://claude.ai/code/session_013MEaba8K1HQcyDNeq5wEFk