From 091d9df6f036f04c45f34f499914347c5a31bb55 Mon Sep 17 00:00:00 2001 From: "Adrian Alfred C. Bonpin" Date: Sat, 8 Aug 2026 13:29:31 +0800 Subject: [PATCH] fix/macos launch (#18) * fix: macOS Finder launch (store path, ad-hoc signing, vendored openssl) - Store::open was resolving 'gridline.db' relative to the working directory; Finder/LaunchServices launches run with cwd=/ so the .expect() panicked (exit 101, silent 'app does nothing') before Tauri ever started. Open the store under app.path().app_data_dir() in setup instead (same dir as the demo DB), creating the dir when needed. - Add bundle.macOS.signingIdentity "-" + hardenedRuntime false so the bundler ad-hoc signs the whole bundle. Previously only the inner binary got Xcode 16's linker-signed signature, which macOS treats as unsigned: quarantined downloads showed 'damaged and can't be opened', and after quarantine removal LaunchServices silently refused to spawn it. - ssh2 now builds OpenSSL vendored (feature vendored-openssl): the release binary previously carried an absolute LC_LOAD_DYLIB to the build machine's /opt/homebrew/opt/openssl@3/lib, which dyld aborted on (and hardened runtime library-validation rejected even when present). - README: document the macOS first-launch paths (right-click Open / xattr for the damaged-error case, re-run after every upgrade). - release.yml: update SIGNING STATUS comment to reflect ad-hoc signing. * chore: bump 0.7.8 -> 0.7.9 (release prep) - Version sync across package.json, src-tauri/Cargo.toml, src-tauri/tauri.conf.json - version.test.ts / bundle-config.test.ts / docs-coverage.test.ts expect 0.7.9 - README: both download tables -> v0.7.9 asset names; new v0.7.9 changelog entry; tag instructions -> v0.7.9; MAINTENANCE comment updated - AGENTS.md maintenance note example -> v0.7.9 - ROADMAP: Shipped (0.7.9) section; Next up retitled (0.8.0) TBD --- .github/workflows/release.yml | 16 +++++++----- AGENTS.md | 2 +- README.md | 47 +++++++++++++++++++++-------------- ROADMAP.md | 9 ++++++- package.json | 2 +- src-tauri/Cargo.lock | 12 ++++++++- src-tauri/Cargo.toml | 7 ++++-- src-tauri/src/lib.rs | 30 +++++++++++++++------- src-tauri/tauri.conf.json | 6 ++++- src/lib/bundle-config.test.ts | 6 ++--- src/lib/docs-coverage.test.ts | 14 +++++------ src/lib/version.test.ts | 4 +-- 12 files changed, 102 insertions(+), 53 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10affa3..fabbf9f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,12 +7,16 @@ name: Release # git checkout prod && git pull # git tag v0.5.0 && git push origin v0.5.0 # -# SIGNING STATUS: builds are UNSIGNED for now (no code-signing certs yet — -# see README "Download a release"). tauri-action automatically signs + -# notarizes when the signing secrets are present, so the moment we add -# APPLE_CERTIFICATE / APPLE_API_KEY / WINDOWS_CERTIFICATE (or Azure Trusted -# Signing) to repo secrets, future builds are signed — no changes to this -# file required. +# SIGNING STATUS: macOS bundles are AD-HOC signed via tauri.conf.json +# (bundle.macOS.signingIdentity: "-", hardenedRuntime: false). That replaces +# the linker-only signature that made macOS report the app as "damaged" and +# refuse Finder launches — users now get the standard "Open Anyway" prompt +# (or run `xattr -dr com.apple.quarantine` for the damaged-error case, see +# README). Still NOT Developer-ID signed / notarized (no certs yet). +# tauri-action automatically signs + notarizes when the signing secrets are +# present, so the moment we add APPLE_CERTIFICATE / APPLE_API_KEY / +# WINDOWS_CERTIFICATE (or Azure Trusted Signing) to repo secrets, future +# builds are properly signed — no changes to this file required. on: push: diff --git a/AGENTS.md b/AGENTS.md index 0ac162b..8e7c9fd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -166,7 +166,7 @@ Cut a release by tagging the **`prod`** branch once the PR is merged — `git ta **Before tagging**, keep everything in sync: - Version number across `package.json`, `src-tauri/Cargo.toml`, and `src-tauri/tauri.conf.json` - `src/lib/version.test.ts` and `src/lib/docs-coverage.test.ts` if they assert the version -- **README download links are static (versioned)** — both download tables (top **Download** section + **Which file should I download?**) link directly to the release-tag assets (`releases/download/v0.7.8/`). tauri-action uses default versioned asset names (`Gridline__aarch64.dmg`, `Gridline--1.x86_64.rpm`, etc.) — update BOTH tables to the new names on every release (see the MAINTENANCE comment in README.md). +- **README download links are static (versioned)** — both download tables (top **Download** section + **Which file should I download?**) link directly to the release-tag assets (`releases/download/v0.7.9/`). tauri-action uses default versioned asset names (`Gridline__aarch64.dmg`, `Gridline--1.x86_64.rpm`, etc.) — update BOTH tables to the new names on every release (see the MAINTENANCE comment in README.md). - **Bundled pg tools:** `tauri.conf.json` `bundle.resources` lists `resources/pg_tools/*`; the `release.yml` matrix builds/downloads + checksum-verifies the static binaries before the Tauri build step. ### Adding a Tauri Command diff --git a/README.md b/README.md index 9b279c8..f4878a3 100644 --- a/README.md +++ b/README.md @@ -30,21 +30,21 @@ ## Download -Grab the installer for your OS from the [latest release](https://github.com/AdrianBonpin/gridline/releases/latest) — the links below point at the current release (**v0.7.8**): +Grab the installer for your OS from the [latest release](https://github.com/AdrianBonpin/gridline/releases/latest) — the links below point at the current release (**v0.7.9**): | OS | Architecture | Download | | :--------------------------- | :--------------------------- | :------------------------------------------------------------------------------------------------------------------------------- | -| **macOS** | Apple Silicon (M1/M2/M3/M4…) | [Gridline_0.7.8_aarch64.dmg](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline_0.7.8_aarch64.dmg) | -| **macOS** | Intel | [Gridline_0.7.8_x64.dmg](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline_0.7.8_x64.dmg) | -| **Windows** | x64 | [Gridline_0.7.8_x64-setup.exe](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline_0.7.8_x64-setup.exe) | -| **Debian / Ubuntu** | amd64 | [Gridline_0.7.8_amd64.deb](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline_0.7.8_amd64.deb) | -| **Fedora / RHEL / openSUSE** | x86_64 | [Gridline-0.7.8-1.x86_64.rpm](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline-0.7.8-1.x86_64.rpm) | -| **Other Linux** | amd64 | [Gridline_0.7.8_amd64.AppImage](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.8/Gridline_0.7.8_amd64.AppImage) | +| **macOS** | Apple Silicon (M1/M2/M3/M4…) | [Gridline_0.7.9_aarch64.dmg](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline_0.7.9_aarch64.dmg) | +| **macOS** | Intel | [Gridline_0.7.9_x64.dmg](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline_0.7.9_x64.dmg) | +| **Windows** | x64 | [Gridline_0.7.9_x64-setup.exe](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline_0.7.9_x64-setup.exe) | +| **Debian / Ubuntu** | amd64 | [Gridline_0.7.9_amd64.deb](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline_0.7.9_amd64.deb) | +| **Fedora / RHEL / openSUSE** | x86_64 | [Gridline-0.7.9-1.x86_64.rpm](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline-0.7.9-1.x86_64.rpm) | +| **Other Linux** | amd64 | [Gridline_0.7.9_amd64.AppImage](https://github.com/AdrianBonpin/gridline/releases/download/v0.7.9/Gridline_0.7.9_amd64.AppImage) | > Not sure if your Mac is Intel or Apple Silicon? See [Which file should I download?](#which-file-should-i-download) below. All installers are **unsigned** — see the [notes](#which-file-should-i-download) on first-launch warnings.