Building & Releasing
Relevant source files
The following files were used as context for generating this wiki page:
Building and releasing the OpenLive project involves a multi-stage pipeline that handles local development, environment-specific builds for macOS and Windows, and automated CI/CD deployment via GitHub Releases. The project is structured as a monorepo using pnpm workspaces, requiring Node 22.13 or newer.
Sources: CONTRIBUTING.md:10-12, package.json:1-10
Development Environment
Local development is facilitated through pnpm scripts that run the web and agent servers concurrently. Developers can choose between running the full desktop shell or just the web UI for faster iterations.
Core Development Scripts
| Command | Description |
|---|---|
pnpm install | Installs all dependencies across the monorepo workspace. |
pnpm dev | Starts the web and agent servers only (accessible at http://localhost:3000). |
pnpm desktop:dev | Runs web + agent servers and opens the Electron desktop window. |
pnpm typecheck | Executes tsc across every package to ensure type safety. |
Sources: CONTRIBUTING.md:14-25, package.json:13-20
Build Architecture
The OpenLive application consists of an Electron shell that bundles a standalone Next.js web application and an agent service. The build process uses electron-builder to package these components into platform-specific installers.
Component Distribution
- Electron Shell: Contains the main process, preload scripts, and native window controls.
- Web Resources: Next.js application built in
standalonemode, located indist/web. - Agent Resources: The agent service bundled via
esbuild, located indist/agent.
Sources: apps/desktop/README.md:12-16, apps/desktop/README.md:65-71, apps/web/next.config.ts:40-42
Desktop Build Flow
The following diagram illustrates the transformation of source code into a packaged Electron application.
The build process collects artifacts from web and agent sub-projects into the desktop app for packaging.
Sources: apps/desktop/README.md:12-23, apps/desktop/electron-builder.yml:18-28
Release Pipeline
Releases are driven by Git tags. A single tag trigger initiates the CI pipeline to build, sign, and publish the application.
Release Execution
To initiate a release, maintainers push a versioned tag (e.g., v0.1.8). CI then performs the following:
- Executes type checking.
- Builds universal macOS installers (ARM64 + Intel).
- Builds Windows x64 installers.
- Uploads artifacts to a GitHub Release draft.
Sources: RELEASING.md:5-12, apps/desktop/electron-builder.yml:33-36
Signing and Notarization
macOS distribution requires code signing and notarization to pass Gatekeeper. This process is fully environment-driven in CI using specific GitHub Secrets.
| Secret Key | Description |
|---|---|
MAC_CSC_LINK | Base64 encoded .p12 Developer ID Application certificate. |
MAC_CSC_KEY_PASSWORD | Password for the certificate. |
APPLE_ID | Apple Developer account email. |
APPLE_APP_SPECIFIC_PASSWORD | Password generated for notarization. |
APPLE_TEAM_ID | The Apple Developer Team ID. |
Sources: RELEASING.md:14-17, apps/desktop/electron-builder.yml:50-54, apps/desktop/README.md:37-45
Platform Configurations
The electron-builder.yml file defines specific behaviors for different operating systems.
macOS Configuration
- Universal Binary: Produces a single DMG containing both Apple Silicon and Intel architectures.
- Auto-Update: Uses
.zipartifacts forelectron-updaterfunctionality. - Entitlements: Defines permissions for Microphone and Camera access via
build/entitlements.mac.plist.
Sources: apps/desktop/electron-builder.yml:32-48
Windows Configuration
- Target: Standard NSIS installer for x64 architecture.
- Installation: Configured for per-user installation with desktop shortcut support.
Sources: apps/desktop/electron-builder.yml:71-80
Build and Release Sequence
The sequence of events from tagging a release to generating public downloads.
Sources: RELEASING.md:5-12, apps/desktop/electron-builder.yml:10-15
Conclusion
Building and Releasing OpenLive relies on a standardized pnpm workspace and electron-builder configuration. By using environment-driven signing and tag-based release triggers, the project ensures a consistent path from local development to signed production binaries for multiple platforms.