This repository now uses electron-builder + electron-updater for macOS, Windows, and Linux auto-updates.
For this Electron app, that is the right path instead of wiring Sparkle.framework directly. On macOS, electron-updater handles the release metadata and update flow that Sparkle would otherwise cover in a native app, while still sharing the same GitHub Releases pipeline used by Windows and Linux.
When you publish a GitHub release tagged like v1.2.3, .github/workflows/release.yml will:
- validate that
package.jsonis also1.2.3 - build signed macOS x64 and arm64 artifacts
- notarize the macOS builds
- merge the dual-architecture
latest-mac.ymlmetadata into one release asset - build and sign the Windows NSIS installer
- build the Linux AppImage
- publish installer artifacts and auto-update metadata files to the GitHub release
- dispatch the Homebrew tap workflow after the release assets are available
The packaged app then checks GitHub Releases for:
latest-mac.ymllatest.ymllatest-linux.yml
Set these repository secrets:
APPLE_SIGNING_CERTIFICATE_P12_BASE64APPLE_SIGNING_CERTIFICATE_PASSWORDAPPLE_IDAPPLE_APP_SPECIFIC_PASSWORDAPPLE_TEAM_ID
APPLE_SIGNING_CERTIFICATE_P12_BASE64 must be a base64-encoded .p12 export of a Developer ID Application certificate.
If the certificate you currently have is only Apple Development, that is not enough for public notarized releases and auto-update distribution. You need Developer ID Application.
To export and encode the certificate:
security export -k ~/Library/Keychains/login.keychain-db -t identities -f pkcs12 -P "YOUR_P12_PASSWORD" -o recordly-mac-signing.p12
base64 < recordly-mac-signing.p12 | pbcopyPaste the copied base64 into APPLE_SIGNING_CERTIFICATE_P12_BASE64 and the export password into APPLE_SIGNING_CERTIFICATE_PASSWORD.
Set these repository secrets:
WINDOWS_SIGNING_CERTIFICATE_P12_BASE64WINDOWS_SIGNING_CERTIFICATE_PASSWORD
These should point to an Authenticode code-signing certificate exported as .p12 and then base64-encoded.
Set this repository secret if you want the cask PR to open automatically:
HOMEBREW_TAP_TOKEN
Optional repository variables:
HOMEBREW_TAP_REPOHOMEBREW_TAP_AUTO_MERGE
- Bump
package.jsonto the version you want to ship. - Commit and push that version.
- Create a Git tag in the form
vX.Y.Z. - In GitHub, create and publish a release for that tag.
- The
Publish Releaseworkflow builds, signs, notarizes, uploads, and publishes update metadata.
That is the normal path if you want “click new release and let CI do the rest.”
If you need to rerun publishing for an existing tag, use the manual dispatch for .github/workflows/release.yml and provide the existing tag.
- macOS auto-updates require the
ziptarget in addition todmg, becauselatest-mac.ymlis generated from the zipped build. - macOS arm64 and x64 builds both publish updater zips, and the release workflow merges them into one
latest-mac.ymlsoelectron-updatercan choose the correct architecture automatically. - The release workflow publishes versioned artifact names so the generated update metadata matches the uploaded files.
build.ymlis intentionally forced to--publish neverso ad hoc CI builds do not accidentally upload to a draft release.