The Release desktop workflow is the single release entry point. It packages, verifies, and creates one draft GitHub Release carrying the Apple Silicon macOS and Windows x64 builds; it never publishes the release. The macOS build is signed, notarized, and stapled. The Windows build is unsigned.
Create a GitHub Environment named release. Add required reviewers if the repository needs a release approval gate, then configure these environment secrets:
CSC_LINK: base64-encoded Developer ID Application .p12;CSC_KEY_PASSWORD: password for that .p12;APPLE_API_KEY: raw contents of an App Store Connect API .p8 key;APPLE_API_KEY_ID: App Store Connect API key ID;APPLE_API_ISSUER: App Store Connect API issuer ID.Windows needs no secrets while the build is unsigned: electron-builder skips signing when no certificate is configured. Adding an Authenticode certificate later means configuring it in apps/desktop/electron-builder.config.mjs, and nothing else: electron-builder derives the publisher name that authenticates updates from the certificate itself.
main, CI is green, and apps/desktop/package.json contains a version that has never been released.Release desktop against main.v<version> exists.latest-mac.yml, the Windows .exe, ZIP, latest.yml, the bundled Git source-materials archive, and matching .sha256 files.SOURCE_MANIFEST.json and README.txt are present, every manifest archive is present, and the manifest pins the expected Dugite native release.licenses/git/LICENSE.txt, NOTICE.txt, and SOURCE_OFFER.txt.Download the DMG and its .sha256 file through the GitHub UI. This download path applies the real browser quarantine metadata that CI intentionally does not simulate.
shasum -a 256 -c Maka-<version>-mac-arm64.dmg.sha256.spctl --assess --type execute --verbose=4 /Applications/Maka.app and confirm it is accepted with a Developer ID origin.ripgrep with brew install ripgrep, then confirm a task using Grep works.Download the .exe installer and its .sha256 file through the GitHub UI. The build is unsigned, so this pass is about confirming the expected warnings and that the app still runs.
Get-FileHash Maka-<version>-win-x64.exe -Algorithm SHA256 in PowerShell and confirm the hash matches the .sha256 file.ripgrep with winget install BurntSushi.ripgrep.MSVC, restart Maka so the new PATH applies, then confirm a task using Grep works.node-pty.Publish the draft only after all checks pass on both platforms. If acceptance fails, keep the draft unpublished, fix the issue, increment the desktop version, and run the workflow again; do not replace an existing release identity.