ryOS desktop builds are Electron artifacts published by GitHub Actions. The desktop app version lives in package.json (version field). Do not confuse it with the web app version in scripts/generate-build-version.ts / public/version.json — those are separate.
Workflow
| Item | Location |
|---|---|
| CI workflow | .github/workflows/build-electron.yml |
| Builder config | electron-builder.yml |
| Build scripts | bun run electron:build:mac, bun run electron:build:windows |
| Output artifacts | release/ (DMG, ZIP, NSIS, latest-mac.yml, latest.yml) |
Triggers
- Versioned release (preferred) — push a tag matching
v*(e.g.v1.0.9)- Builds macOS + Windows
- Publishes GitHub release ryOS v1.0.9 (tag = version)
- Sets release as latest
- Manual / dev build —
workflow_dispatchonmain- Republishes to the
desktoptag (overwrites assets) - Use for unsigned test builds, not semver releases
- Republishes to the
Release checklist
- [ ] 1. Confirm main is clean and up to date
- [ ] 2. Bump package.json version (semver, e.g. 1.0.8 → 1.0.9)
- [ ] 3. Commit and push to main
- [ ] 4. Create and push tag v{version} (must match package.json)
- [ ] 5. Verify Build Electron workflow started
- [ ] 6. Confirm GitHub release assets when CI completes
Standard release commands
Replace 1.0.9 with the target version.
# 1. Bump version in package.json, then:
git add package.json
git commit -m "$(cat <<'EOF'
Bump desktop app version to 1.0.9.
EOF
)"
git push origin main
git tag v1.0.9
git push origin v1.0.9
Verify CI
gh run list --workflow=build-electron.yml --limit 3
gh run watch # optional: pass run ID from list output
When the run succeeds, check:
Expected assets:
- macOS:
ryOS_{version}_aarch64.dmg,.zip,.zip.blockmap,latest-mac.yml - Windows:
ryOS_{version}_x64.exe,.exe.blockmap,latest.yml
Manual workflow dispatch (no new tag)
Only when the user explicitly wants a desktop channel rebuild, not a semver release:
gh workflow run build-electron.yml --ref main
This does not bump version. Artifacts land on the desktop release with overwrite.
Version rules
- Bump only
package.jsonversionfor desktop releases. - Tag name must be
v+ that version (1.0.9→v1.0.9). - Check existing tags before choosing a version:
git tag -l 'v1.0.*'andgh release list --limit 5. - Do not re-tag an existing release unless the user explicitly requests a rebuild of that version (requires deleting/moving the old tag — ask first).
Git safety
- Never force-push
mainor tags unless the user explicitly asks. - Do not commit unrelated files with the version bump.
- Do not amend pushed commits.
Local builds (optional)
For local verification before tagging (requires signing secrets in .env.local for mac):
bun run electron:build:mac # signed + notarized when Apple env is set
bun run electron:build:windows
Local builds do not publish to GitHub. Production releases should go through the CI workflow.
CI secrets (reference)
macOS signed builds need GitHub Actions secrets documented in .github/workflows/build-electron.yml (APPLE_*, EVS_*). If CI fails on signing, inspect the workflow log — do not paste secret values.
When the user asks to "trigger a desktop build"
- Ask for the target version if not stated (suggest next patch bump from latest tag).
- Bump
package.json, commit, push, tag, push tag. - Report the Actions run URL and expected release tag.