- Confirm the repository visibility and access list match the intended release audience.
- Confirm
LICENSEis present and package metadata points to the GitHub repo andhttps://app.miru.so. - Confirm
package.jsonhas the release version that will be tagged.
rtk mise exec -- bun run check
rtk mise exec -- bun run test
rtk mise exec -- bun run package
rtk mise exec -- bun run test:e2e
rtk mise exec -- bun run release:build
rtk mise exec -- bun auditPublic macOS release ZIPs must be built with MIRU_MAC_RELEASE=true so Electron Forge signs and notarizes the app before the ZIP is made. Do not use xattr -cr for release validation; it only removes local quarantine metadata.
Install a Developer ID Application certificate in the keychain that runs the build. Then configure one notarization method:
# Preferred for local release machines after running xcrun notarytool store-credentials.
export APPLE_NOTARIZE_KEYCHAIN_PROFILE=miru-time-desktop
# Or App Store Connect API key credentials.
export APPLE_API_KEY=/path/to/AuthKey_XXXXXXXXXX.p8
export APPLE_API_KEY_ID=XXXXXXXXXX
export APPLE_API_ISSUER=00000000-0000-0000-0000-000000000000
# Or Apple ID credentials with an app-specific password.
export APPLE_ID=release@example.com
export APPLE_APP_SPECIFIC_PASSWORD=xxxx-xxxx-xxxx-xxxx
export APPLE_TEAM_ID=XXXXXXXXXXIf multiple Developer ID Application certificates are available, pin the one to use:
export APPLE_SIGNING_IDENTITY="Developer ID Application: Saeloun Inc (XXXXXXXXXX)"Build signed and notarized macOS release ZIPs:
rtk mise exec -- bun run make:mac:releaseVerify each packaged app before publishing:
rtk mise exec -- bun run release:verify:mac
codesign --verify --deep --strict --verbose=2 "out/Miru Time Tracking-darwin-arm64/Miru Time Tracking.app"
spctl --assess --type execute --verbose=4 "out/Miru Time Tracking-darwin-arm64/Miru Time Tracking.app"
xcrun stapler validate "out/Miru Time Tracking-darwin-arm64/Miru Time Tracking.app"
codesign --verify --deep --strict --verbose=2 "out/Miru Time Tracking-darwin-x64/Miru Time Tracking.app"
spctl --assess --type execute --verbose=4 "out/Miru Time Tracking-darwin-x64/Miru Time Tracking.app"
xcrun stapler validate "out/Miru Time Tracking-darwin-x64/Miru Time Tracking.app"- Open
out/Miru Time Tracking-darwin-arm64/Miru Time Tracking.app. - Confirm the Miru icon appears in Finder and the Dock.
- Confirm the menu bar timer appears and shows elapsed time.
- Start, pause, reset, and resume a timer from the app.
- Add, edit, resume, and delete a time entry.
- Trigger idle recovery from the menu bar or the E2E-only IPC path.
- Confirm signed-out production builds do not show a Miru URL field.
- Confirm Miru sync points to
https://app.miru.so.
Use a temporary Electron userData directory when testing with a real Miru token. Do not commit or print tokens.
- Create a temporary
miru-account.jsonwith a validauthEmail,authToken, andbaseUrlset tohttps://app.miru.so. - Launch the packaged app with
MIRU_USER_DATA_DIRpointing to that directory. - Confirm the account avatar/menu renders, workspace state loads, and timer sync actions do not crash.
The Forge GitHub publisher is configured for saeloun/miru-time-desktop as a draft release.
Keep release copy in CHANGELOG.md and docs/releases/<version>.md. Use the versioned release notes file for GitHub Releases so the website, release page, and docs stay in sync.
rtk mise exec -- bun run publishThe publish script also enables MIRU_MAC_RELEASE=true, so it requires the same signing and notarization setup as make:mac:release and runs release:verify:mac after publishing the draft artifacts.
Use bun run release:build first when you only want local release artifacts. It runs make:mac:release, verifies both macOS app bundles with release:verify:mac, then builds Linux and Windows ZIPs. The portable ZIPs are generated under out/make/zip/.
Manual release fallback:
gh release create v0.1.8 \
out/make/zip/darwin/arm64/*0.1.8.zip \
out/make/zip/darwin/x64/*0.1.8.zip \
out/make/zip/linux/x64/*0.1.8.zip \
out/make/zip/win32/x64/*0.1.8.zip \
--repo saeloun/miru-time-desktop \
--title "Miru Time Tracking 0.1.8" \
--notes-file docs/releases/0.1.8.md