Skip to content

feat: build and release for windows and linux - #40

Merged
jamubc merged 10 commits into
mainfrom
feat/multi-platform-builds
Jul 6, 2026
Merged

feat: build and release for windows and linux#40
jamubc merged 10 commits into
mainfrom
feat/multi-platform-builds

Conversation

@jamubc

@jamubc jamubc commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

Why

InstantNotes builds and ships for macOS only: the bundle targets stop at app/dmg, the release workflow runs on a single macOS runner, and the updater manifest carries just darwin-aarch64. The code underneath is already portable (cfg-gated macOS specifics, cross-platform plugins, complete icon set), so Windows and Linux support is a packaging, CI, and polish exercise, not a rewrite.

What Changes

  • Add nsis (Windows) and appimage (Linux) bundle targets. Library-window transparency moves to a new tauri.macos.conf.json so vibrancy keeps working on macOS while Windows and Linux get an opaque window (the theme tokens already fall back to a near-solid panel).
  • Convert release.yml to a three-OS matrix that assembles a draft release with a merged latest.json, and add build.yml running check, tests, and tauri build --no-bundle on all three platforms for every PR.
  • Gate the macOS application submenu behind cfg(target_os = "macos"); elsewhere the File menu carries Settings and Quit. The capture hotkey stays Option+Space on macOS and becomes Ctrl+Shift+Space on Windows and Linux, since plain Alt+Space is the Windows system window-menu key.
  • Add src/lib/platform.ts so shortcut labels render Cmd glyphs on macOS and Ctrl+ prefixes elsewhere; extend the shared font stacks with Segoe UI, Noto Sans, and Consolas fallbacks (Apple faces still lead, so macOS is unchanged).
  • Pin the Rust toolchain (rust-toolchain.toml) and Node engine, make the dev launcher platform-aware, and document per-platform install steps in the README and release body.

ADDED Requirements

Requirement: Cross-Platform Release Artifacts

A v* tag SHALL produce a draft GitHub release containing macOS (.dmg, .app.tar.gz), Windows (NSIS -setup.exe), and Linux (.AppImage) artifacts plus one latest.json listing all three platforms. Updater artifacts MUST be signed with the existing minisign key. CI MUST NOT publish the draft; publishing after a smoke test is the ship gate.

Requirement: Platform-Appropriate Shell

The app MUST compile and run on Windows and Linux with an opaque main window, a File menu carrying Settings and Quit, and a Ctrl+Shift+Space capture hotkey. macOS behavior MUST remain unchanged: vibrancy, the application menu, and Option+Space.

Scenario: Release matrix ships all platforms

  • GIVEN a pushed v* tag
  • WHEN the release workflow finishes
  • THEN the draft release holds the dmg, NSIS setup, AppImage, signed updater archives, and a latest.json with darwin-aarch64, windows-x86_64, and linux-x86_64 entries

Scenario: Windows or Linux user gets native behavior

  • GIVEN the app running on Windows or Linux
  • WHEN the user opens the menu bar or reads a shortcut hint
  • THEN Settings and Quit live in the File menu, labels show Ctrl+ prefixes, and the capture panel toggles with Ctrl+Shift+Space

Verification

  1. Build
    1.1 cargo test --workspace --manifest-path src-tauri/Cargo.toml passes (44 tests).
    1.2 npm run check reports 0 errors and 0 warnings; npm test passes (130 tests).
    1.3 npm run tauri build on macOS produces the .app and .dmg through the merged macOS config, and the built app launches cleanly.
  2. CI
    2.1 The new build.yml goes green on macos-latest, ubuntu-22.04, and windows-latest for this PR.
  3. Behavior
    3.1 macOS local build keeps vibrancy, the app menu, and Option+Space.
    3.2 The Windows and Linux legs are exercised end to end by the next draft release and its smoke test before publishing.

jamubc added 9 commits June 18, 2026 18:06
Note-scoped commands show the note title as a breadcrumb prefix before the
action. A long title used to consume the row and hide the action. The title
region is now a flex row, the prefix takes its own max-width and ellipsis, and
the separator, icon, and action label no longer shrink.
The native macOS titlebar stayed on the launch-time system appearance even
after switching to a dark or light theme in the app. A thin set_window_theme
command sets the library window's native theme, and the theme store calls it
whenever the resolved variant changes, next to the existing vibrancy sync.
Pressing Tab on a bullet or ordered list line now indents it into a sublist,
and Shift+Tab outdents it. A pure listIndentChanges helper computes the
line-anchored change set (unit-tested) and the editor binds Tab / Shift+Tab to
it before the default keymap. Non-list lines keep the default behaviour.
Replace the settings sidebar with a landing grid of category cards that open
focused sub-pages with a breadcrumb back. Add a Contexting category whose
editable template wraps a note with {title}, {tags}, {date}, and {content}, with
a live preview. A new 'Copy note as context' palette command renders the
template for the selected note and writes it to the clipboard, seeding the app's
AI features. Rendering lives in a pure, tested module.
Extend the bundle targets, release matrix, and updater manifest to all
three desktop platforms, gate the macOS-only shell behavior, and make
shortcut labels and font stacks platform-aware.
@jamubc
jamubc requested a review from a team as a code owner July 6, 2026 19:39
The script always runs through npm run bump, so the shebang was
decorative; Windows vitest fails to parse the module with it present.
@jamubc
jamubc merged commit 75b978b into main Jul 6, 2026
3 checks passed
@jamubc
jamubc deleted the feat/multi-platform-builds branch July 11, 2026 01:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant