From 10c7a6d55f242dc2067a14abbdad157ce89633eb Mon Sep 17 00:00:00 2001 From: salimlaimeche Date: Fri, 29 May 2026 05:14:00 +0200 Subject: [PATCH] feat(release): add macos alpha build path --- README.md | 1 + apps/studio/README.md | 10 +++ apps/studio/package.json | 2 +- apps/studio/src-tauri/src/lib.rs | 1 - apps/studio/src-tauri/tauri.conf.json | 13 +++- docs/MACOS_ALPHA_BUILD.md | 104 ++++++++++++++++++++++++++ 6 files changed, 126 insertions(+), 5 deletions(-) create mode 100644 docs/MACOS_ALPHA_BUILD.md diff --git a/README.md b/README.md index d0b81ac..cc4663f 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ IgnitionRL To author an environment from a blank TypeScript project, follow the first guide in [`docs/BUILD_YOUR_FIRST_ENVIRONMENT.md`](docs/BUILD_YOUR_FIRST_ENVIRONMENT.md). To turn a stored learner checkpoint into an inference run and replay, follow [`docs/EXPORT_AND_REPLAY_TRAINED_POLICY.md`](docs/EXPORT_AND_REPLAY_TRAINED_POLICY.md). To debug reward shaping with named terms and replay frames, follow [`docs/REWARD_DEBUGGING_GUIDE.md`](docs/REWARD_DEBUGGING_GUIDE.md). +To build the first unsigned macOS desktop alpha bundle, follow [`docs/MACOS_ALPHA_BUILD.md`](docs/MACOS_ALPHA_BUILD.md). After cloning and installing dependencies, generate a local project with traces, metrics and JSON exports: diff --git a/apps/studio/README.md b/apps/studio/README.md index f09903f..7095abc 100644 --- a/apps/studio/README.md +++ b/apps/studio/README.md @@ -12,6 +12,16 @@ bun run --cwd apps/studio dev:desktop bun run --cwd apps/studio build:desktop ``` +The desktop build command currently produces an unsigned macOS `.app` bundle +for the private alpha: + +```txt +apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app +``` + +DMG packaging, Developer ID signing and notarization are intentionally tracked +as release gaps until Apple credentials and a signing profile are configured. + Current panels: - workspace summary; diff --git a/apps/studio/package.json b/apps/studio/package.json index 4d523ca..3906bab 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -8,7 +8,7 @@ "dev": "vite --host 127.0.0.1", "build": "tsc -p tsconfig.json && vite build", "dev:desktop": "tauri dev", - "build:desktop": "tauri build", + "build:desktop": "tauri build --bundles app --ci --no-sign", "tauri": "tauri", "typecheck": "tsc -p tsconfig.json && tsc -p tsconfig.typecheck.json", "test": "bun test" diff --git a/apps/studio/src-tauri/src/lib.rs b/apps/studio/src-tauri/src/lib.rs index ea9739f..690bcbc 100644 --- a/apps/studio/src-tauri/src/lib.rs +++ b/apps/studio/src-tauri/src/lib.rs @@ -443,7 +443,6 @@ fn run_checkpoint_inference_path( let trace_dir = run_dir.join("traces"); let episode_id = format!("{run_id}:episode:0"); let trace_path = trace_dir.join(format!("{}.json", sanitize_id(&episode_id))); - let trace_reference_path = relative_project_path(&root, &trace_path); let observation = checkpoint_observation(&checkpoint_payload, 0.0); let next_observation = checkpoint_observation(&checkpoint_payload, 1.0); let action = checkpoint_action(&checkpoint_payload); diff --git a/apps/studio/src-tauri/tauri.conf.json b/apps/studio/src-tauri/tauri.conf.json index 9fc7b5d..770d17f 100644 --- a/apps/studio/src-tauri/tauri.conf.json +++ b/apps/studio/src-tauri/tauri.conf.json @@ -1,6 +1,6 @@ { "$schema": "../node_modules/@tauri-apps/cli/config.schema.json", - "productName": "IgnitionRL Studio", + "productName": "IgnitionRL Studio Alpha", "version": "0.1.0", "identifier": "ai.ignitionrl.studio", "build": { @@ -12,7 +12,7 @@ "app": { "windows": [ { - "title": "IgnitionRL Studio", + "title": "IgnitionRL Studio Alpha", "width": 1440, "height": 960, "minWidth": 1100, @@ -27,7 +27,14 @@ }, "bundle": { "active": true, - "targets": "all", + "targets": [ + "app" + ], + "publisher": "IgnitionAI", + "category": "DeveloperTool", + "shortDescription": "Desktop-first RL studio for TypeScript agent environments.", + "longDescription": "IgnitionRL Studio Alpha is a local-first desktop shell for opening IgnitionRL projects, inspecting runs, debugging reward terms, replaying episodes and testing checkpoint inference workflows.", + "copyright": "Copyright 2026 IgnitionAI", "icon": [ "icons/32x32.png", "icons/128x128.png", diff --git a/docs/MACOS_ALPHA_BUILD.md b/docs/MACOS_ALPHA_BUILD.md new file mode 100644 index 0000000..c4ff3fa --- /dev/null +++ b/docs/MACOS_ALPHA_BUILD.md @@ -0,0 +1,104 @@ +# macOS Alpha Build + +This document defines the first reproducible macOS desktop alpha build path for +IgnitionRL Studio. + +The alpha target is an unsigned Tauri `.app` bundle. DMG packaging, Developer ID +signing and notarization are listed as explicit gaps below. + +## Local Build Command + +From the repository root: + +```sh +bun install --frozen-lockfile +bun run build:studio:desktop +``` + +The root script delegates to: + +```sh +bun run --cwd apps/studio build:desktop +``` + +The app-level script runs: + +```sh +tauri build --bundles app --ci --no-sign +``` + +That command builds the React/Vite frontend, compiles the Tauri shell in release +mode and bundles a macOS `.app` without invoking DMG creation or code signing. + +## Artifact Path + +The local alpha artifact is: + +```txt +apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app +``` + +The release binary is also built at: + +```txt +apps/studio/src-tauri/target/release/ignitionrl-studio +``` + +## Alpha Bundle Metadata + +Current Tauri alpha metadata: + +- product name: `IgnitionRL Studio Alpha`; +- window title: `IgnitionRL Studio Alpha`; +- bundle identifier: `ai.ignitionrl.studio`; +- version: `0.1.0`; +- publisher: `IgnitionAI`; +- category: `DeveloperTool`; +- icons: `32x32.png`, `128x128.png`, `128x128@2x.png`, `icon.icns`, `icon.ico`. + +The version stays numeric because macOS bundle metadata expects a standard +release version string. The alpha status is expressed in the product name and +release documentation. + +## Verified Locally + +The alpha build command was verified on macOS with: + +```sh +bun run --cwd apps/studio tauri build --bundles app --ci --no-sign +``` + +Observed output included: + +```txt +Finished 1 bundle at: +apps/studio/src-tauri/target/release/bundle/macos/IgnitionRL Studio Alpha.app +``` + +## Known Gaps + +| Gap | Current status | Required before public distribution | +| --- | --- | --- | +| Developer ID signing | Disabled with `--no-sign`. | Configure Apple Developer Team ID, signing identity and CI secrets. | +| Notarization | Not configured. | Add Apple notarization credentials and staple notarization tickets. | +| DMG packaging | `tauri build` with DMG currently fails in the local headless environment during `bundle_dmg.sh`. | Re-enable and verify `tauri build --bundles dmg` on a signed macOS release runner. | +| Universal binary | Current local artifact is architecture-specific. | Install both Apple targets and build with `--target universal-apple-darwin`. | +| CI artifact upload | Not enabled. | Add a macOS GitHub Actions release job that uploads `.app` or signed `.dmg` artifacts. | +| Icon finalization | Bundle icons are configured and present. | Replace placeholder/early alpha artwork before external release if branding changes. | + +## CI Recommendation + +Do not add this build to every PR yet. The current PR CI runs on Ubuntu and +already validates the TypeScript, Rust workspace, frontend build and smoke +projects. A macOS bundle job should be added as a manual or release-only +workflow when signing/notarization secrets exist. + +Recommended future command for that job: + +```sh +bun install --frozen-lockfile +bun run --cwd apps/studio tauri build --bundles app --ci +``` + +Once signing is configured, remove `--no-sign` from the release job. Once DMG is +stable, switch the release job to `--bundles dmg` or build both `app` and `dmg`.