fix(release): harden packaging and add CI [release:v0.1.0]#3
Merged
Conversation
Packages signed apps outside cloud-managed working directories, verifies the stapled app and a clean extraction of the final ZIP, and makes release output paths configurable.
Runs the Swift test suite, validates release script syntax, and exercises unsigned app packaging on pull requests and main.
Removes the completed decision document and its README reference now that the v0.1 scope and release gates are finished.
tcballard
marked this pull request as ready for review
July 13, 2026 16:58
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.
Summary
Implements
v0.1.0 release hardening and CI follow-up.Adds:
Scope
Included
RELEASE_OUTPUT_DIRExcluded
Product / Architecture Decisions
TMPDIR; only final ZIP and cask artifacts are written toRELEASE_OUTPUT_DIR.package-app.shremains reusable throughAPP_OUTPUT_DIR, with its existingdistdefault preserved for development workflows.User-Facing Contract
CLI
The existing signed release command is unchanged. A release owner may optionally set:
Human Output
Successful release output still prints the ZIP and generated cask paths. A signature, Gatekeeper, stapler, or final-archive failure now stops the release before those paths are reported.
JSON Output
No JSON contract changes.
Exit Codes
0: Packaging and all applicable verification completed.Verification
Ran
Covered
Review Path
Review
Scripts/release.shandScripts/release-unsigned.shfirst, thenScripts/package-app.shandScripts/make-cask.sh, followed by.github/workflows/ci.ymland the README.Notes For Reviewer
The original failure came from assembling the signed app inside a cloud-managed
distdirectory, which attached Finder/File Provider metadata rejected bycodesign. The prior workflow also verified the bundle before stapling but did not re-verify the shipped archive afterward.