Releasing & DMG Creation
Relevant source files
The following files were used as context for generating this wiki page:
Keynobi employs an automated release pipeline triggered by version bumps on the main branch. This system handles the compilation of the Rust backend, bundling of the SolidJS frontend, and creation of Apple Disk Image (.dmg) installers for various macOS architectures. The process integrates versioning rules, changelog generation, and optional telemetry embedding for crash reporting.
Sources: RELEASING.md:1-5, README.md:111-125
Release Workflow & Automation
Releases are managed through GitHub Actions, which monitor the repository for specific version changes. A standard release takes approximately 15 minutes to complete across parallel builds for different architectures.
Release Execution Steps
The automated process follows a structured sequence initiated by the developer:
- Version Bumping: Developers use
npm run version:bumpto increment the version according to Semantic Versioning (SemVer) rules. - Validation: Running
npm run rust:checkensures the backend code is valid before committing. - Commit and Push: Changes to
package.json,Cargo.toml, andtauri.conf.jsonare committed and pushed to themainbranch. - CI Trigger: GitHub Actions detects the bump, builds the artifacts, creates a git tag (e.g.,
v0.1.1), and publishes a GitHub Release. - Manifest Update: The
release/latest.jsonmetadata is automatically updated with the new version and download URLs.
Sources: RELEASING.md:11-30, CHANGELOG.md:118-125
The diagram shows the transition from manual developer actions to the automated CI pipeline for generating releases.
Sources: RELEASING.md:11-35, release/README.md:7-12
DMG Creation Script (build-dmg.sh)
For local distribution and CI automation, the scripts/build-dmg.sh script serves as the primary utility for generating .dmg bundles. It wraps the Tauri CLI and ensures all environment prerequisites are met.
Script Capabilities
- Architecture Support: Can target Apple Silicon (
aarch64), Intel (x86_64), or create a Universal binary. - Prerequisite Validation: Checks for the presence of
rustc,cargo, andnode. - Target Installation: Automatically installs missing Rust targets via
rustupif needed. - Ad-hoc Signing: For unsigned builds, it sets
APPLE_SIGNING_IDENTITY="-"to bypass mandatory Developer ID requirements during the build process, allowing for ad-hoc signing.
Sources: scripts/build-dmg.sh:1-60, scripts/build-dmg.sh:88-100
Build Targets and Commands
| Command | Architecture Target | Rust Triple |
|---|---|---|
./scripts/build-dmg.sh | Apple Silicon (M1/M2/M3) | aarch64-apple-darwin |
./scripts/build-dmg.sh --intel | Intel Mac | x86_64-apple-darwin |
./scripts/build-dmg.sh --universal | Universal Binary | universal-apple-darwin |
Sources: scripts/build-dmg.sh:30-48, package.json:28-30
Release Metadata and Artifacts
The project maintains a machine-readable manifest to track the most recent release and provide direct download links.
latest.json Structure
The manifest file located at release/latest.json contains the following fields:
version: The current semantic version string.tag: The corresponding Git tag name.releaseDate: ISO date of the release.releaseUrl: Link to the GitHub Release page.downloads: A nested object containing direct URLs forapplesiliconandintelDMG files.
Sources: release/latest.json:1-10, release/README.md:7-22
Deployment Locations
- Binary Artifacts: Hosted on the GitHub Releases page.
- Build Output: Locally, files are placed in
src-tauri/target/<arch>/release/bundle/dmg/. - Naming Convention: Artifacts follow the pattern
Keynobi_<version>_<arch>.dmg.
Sources: README.md:119-125, scripts/build-dmg.sh:110-112
Advanced Release Configurations
Sentry Integration (Telemetry)
Releases can be built with embedded Sentry DSNs for crash reporting. This requires the Rust telemetry feature to be enabled.
- Rust Layer: Uses
SENTRY_DSNand thetelemetrycargo feature. - Frontend Layer: Uses
VITE_SENTRY_DSNfor the SolidJS/WebView layer. - Source Maps:
SENTRY_AUTH_TOKENis used by the CI workflow to upload frontend source maps to Sentry.
Sources: RELEASING.md:46-65, src-tauri/Cargo.toml:41-43
Versioning Rules (SemVer)
| Bump Type | Usage Scenario | Example |
|---|---|---|
patch | Bug fixes and small improvements | 0.1.0 -> 0.1.1 |
minor | New user-visible features | 0.1.0 -> 0.2.0 |
major | Breaking changes or major milestones | 0.1.0 -> 1.0.0 |
Sources: RELEASING.md:38-44
Security and Distribution Note
As of version 0.x, builds are unsigned. This requires users to bypass macOS Gatekeeper on first launch by right-clicking the application in the /Applications folder and selecting Open. This behavior is explicitly noted in the release documentation and scripts.
Sources: README.md:127-129, release/README.md:28-30, scripts/build-dmg.sh:127-130
Conclusion
The releasing and DMG creation system for Keynobi is a robust, automation-first architecture that leverages Tauri's bundling capabilities. By providing both a script-based local build path and a GitHub Actions-driven CI path, the project ensures consistent delivery of artifacts across both Apple Silicon and Intel platforms while maintaining strict versioning and changelog standards.