ci(release): publish macOS desktop assets#150
Conversation
|
Thanks — the asset verification scripts and the TDD here are genuinely good. Two blockers before this can merge:
Also needs a rebase after #149 lands (main deleted CONTRIBUTING.md and renamed the product to "Local Studio" — labels/fixtures still say vLLM Studio). I'll get the signing secrets configured on my side; the graceful-degradation rework is the part I'd like from you. |
df048d6 to
7757292
Compare
|
@0xSero the graceful-degradation and stable-name rework is pushed in
I kept this in the existing workflow because a release created with Validation is green: 7 release-asset tests, 2 version tests, contracts/structure, frontend quality and production build, controller checks, and 139 controller unit tests. The pre-push gate also passed while updating both branches. Owner-pending after merging #149 and this PR: configure the five signing/notarization secrets, confirm the certificate identity, then validate the first attached DMG/ZIP with |
7757292 to
10c2aab
Compare
|
@0xSero conflicts are resolved and the asset workflow is rebased onto #149 at |
|
@0xSero v2.0.0 follow-up is pushed in |
e4364a3 to
b62e3ac
Compare
|
@0xSero PR #150 is restacked on the resolved #149 head and is now mergeable at The rebase preserves the v2 updater-compatible asset names and stable aliases. It also pins the desktop job checkout to Clean-worktree verification passed: all 8 release tests, |
Summary
Addresses #147 by publishing signed and notarized Apple Silicon desktop assets without putting semantic-release or ordinary releases behind owner-managed signing secrets.
This PR remains stacked on #149. Merge #149 first; its version-alignment commit is the base for this asset workflow.
Changes
ubuntu-latestwith Node 22.19.0.@semantic-release/exec's success lifecycle, so the desktop path runs only after an actual release publication.macos-latestjob only when a release exists and signing is configured.GITHUB_TOKENto the upload step.codesign, stapler, and Gatekeeper validation.scripts/stage-desktop-release.mjsinstead of maintaining duplicate verification/staging scripts.latest-mac.ymlcontract.Local-Studio-arm64.dmgandLocal-Studio-arm64-mac.zipaliases.README.mdandAGENTS.mdfor the automated release path.A separate
release: publishedworkflow is not used because releases created with the repositoryGITHUB_TOKENdo not trigger another workflow run. The conditional job in the existing workflow avoids that recursion guard.v2.0.0 Audit
The published release confirms that version alignment is correct: the app bundle, tag, and updater metadata all report
2.0.0; the app is arm64 with bundle idorg.local.studio.desktop; and the published updater metadata resolves to the attached hyphenated versioned assets.The downloaded versioned DMG exactly matches GitHub's published SHA-256
64ca37a5e9085e0a8a5d8452f7a544a684c37d9bab874f417d0b87e8cab085a8, but the app inside does not pass release validation:codesign --verify --deep --strictreports an invalid or modified signature.spctl --assess --type executerejects it as an unnotarized Developer ID app.xcrun stapler validatereports no stapled ticket.The ZIP signature has not been independently inspected.
Owner-Pending Steps
@0xSero needs to:
CSC_LINK,CSC_KEY_PASSWORD,APPLE_ID,APPLE_APP_SPECIFIC_PASSWORD, andAPPLE_TEAM_ID.sherif cherfa (TZ447KHNZL), or update that configuration.Local-Studio-arm64-mac.zipto v2.0.0 if the stable ZIP alias remains part of the release contract.codesign,spctl, stapler validation, and a clean first launch on the replacement artifact. That real-artifact check is the remaining Homebrew blocker.Validation
npm run test:release-assets(6 tests)npm run test:release-version(2 tests)npm run checknpm --prefix frontend run test(202 tests)npm run test:integrationgit diff --check origin/main...HEADAI Disclosure
AI assistance was used to inspect and reconcile the current release workflow, verify the published v2.0.0 metadata and DMG, implement and test the conditional asset pipeline, run validation, and review the final diff. I reviewed the resulting code, artifact metadata, and command output before updating this PR.