emit a real desktop binary and .deb for deploy method 5
tauri build produced target/release/doxa-maps-desktop (65 MB ELF) and a 58 MB .deb (Package: doxa-maps, Depends: libwebkit2gtk-4.1-0 libgtk-3-0). tauri info reports the environment fully green and correctly detects frontendDist ../public, Vue.js, Vite. The web tree is compiled INTO the binary rather than shipped as files, which is why the .deb holds only 6 entries - confirmed by 19 distinct embedded doxa-maps/... asset paths in the ELF and by size (a logic-free shell is 65 MB only because the 132 MB public/ tree is compressed inside it). bundle.targets narrowed from all to deb: rpmbuild and linuxdeploy are absent here, so all would fail two of three formats at the END of a ~6-minute release build. The CLI is a devDependency (@tauri-apps/cli, prebuilt binary) rather than cargo install tauri-cli, which compiles from source. Status stays BUILT, NOT SHOT. The GUI launch is unverified because this box is headless - the binary panics in tao with 'Failed to initialize GTK', the absence of a display rather than a defect, and no Xvfb is installed.
This commit is contained in:
parent
381d3087c7
commit
ea53a2e19a
7 changed files with 50 additions and 15 deletions
|
|
@ -28,7 +28,7 @@ This README is a **show, don't tell** index. Skim the three tables, then jump to
|
|||
| 2 | **Mobile app** (Android / Capacitor) | required | [§2](#deploy-2--mobile-app) |
|
||||
| 3 | **Direct-JS / research dashboard** (props + events + SRI) | required | [§2](#deploy-3--research-dashboard-direct-js) |
|
||||
| 4 | **WordPress** (PHP plugin: shortcode + Gutenberg block) | built, not yet shot | [§3](#3-cli-commands--installs-per-deploy-method) |
|
||||
| 5 | **Desktop** (Tauri) | built, not shot (`src-tauri/`, compiles clean) | [§3](#3-cli-commands--installs-per-deploy-method) |
|
||||
| 5 | **Desktop** (Tauri) | built, not shot (binary + `.deb` emitted; launch unverified) | [§3](#3-cli-commands--installs-per-deploy-method) |
|
||||
|
||||
### CLI commands + what to install
|
||||
|
||||
|
|
@ -258,7 +258,7 @@ This README does not over-claim. Per the verified ledger (2026-09-19):
|
|||
| Count | State | Methods |
|
||||
|-------|-------|---------|
|
||||
| 2 | **proven live** | iframe embed · direct-JS embed |
|
||||
| 3 | **built, not yet shot** | mobile (Capacitor scaffolded, APK never emitted) · WordPress (`wordpress/doxa-maps-embed/*.php` written, install never captured) · desktop (`src-tauri/` scaffolded, `cargo check` clean, no binary emitted) |
|
||||
| 3 | **built, not yet shot** | mobile (Capacitor scaffolded, APK never emitted) · WordPress (`wordpress/doxa-maps-embed/*.php` written, install never captured) · desktop (`src-tauri/`; **65 MB binary + 58 MB .deb emitted** — launch unverified, headless box) |
|
||||
| 0 | **aspirational** | — none. Method 5 moved to built-not-shot on 2026-09-21. |
|
||||
|
||||
All **5 capabilities** are proven by a built bundle. Every deploy *method* is now at least scaffolded; three are
|
||||
|
|
|
|||
BIN
bun.lock
generated
BIN
bun.lock
generated
Binary file not shown.
|
|
@ -47,7 +47,7 @@ The scripts these commands are grounded in (from this branch's `package.json`):
|
|||
| 2 | **Mobile app (Android)** | Bun ALONE for `check:mobile`; + Android SDK · `adb` on PATH · JDK 17 (Gradle) for the APK | `bun run check:mobile` (sync + webDir assertion, NO toolchain needed) · `bun run phone` (= `apk:debug` + `apk:install` to a device/emulator) |
|
||||
| 3 | **Direct-JS / dashboard** | Bun | `bun run build`, then paste the `<script src> + integrity` (SRI) snippet from `manifest.json`. *Proven same-root AND foreign-host (verified 2026-09-20: gl + attribution, 0 errors, 0 404s). Fill the `YOUR_*` placeholders the snippet ships with* |
|
||||
| 4 | **WordPress** | Bun (+ `php` CLI to run the contract gate) | `bun run build`, then either paste the iframe/script snippet into a **Custom HTML** block, **or** install `wordpress/doxa-maps-embed/` (shortcode + Gutenberg block). `bun run check:wp-embed` verifies the emitted markup. *(Contract-proven; not yet shot on a live WP install.)* |
|
||||
| 5 | **Desktop (Tauri)** | Bun ALONE for `check:tauri`; + Rust toolchain · Tauri CLI · system webview libs for the binary | `bun run check:tauri` (config contract, NO toolchain needed) · `cargo tauri build` (needs the toolchain). *(Built, not shot — `cargo check` compiles clean, 0 errors; no binary emitted here.)* |
|
||||
| 5 | **Desktop (Tauri)** | Bun ALONE for `check:tauri`; + Rust toolchain · Tauri CLI · system webview libs for the binary | `bun run check:tauri` (config contract, NO toolchain needed) · `cargo tauri build` (needs the toolchain). *(Built, not shot — a 65 MB binary + 58 MB `.deb` WERE emitted; only the GUI launch is unverified.)* |
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -230,9 +230,17 @@ windows array, missing crate file); each exits 1.
|
|||
> `capacitor.config.json` documents for `https://localhost`. **The fix is a response header on the
|
||||
> token host, not a change in `tauri.conf.json`.**
|
||||
|
||||
**Status: built + COMPILES CLEAN; no binary emitted.** Verified 2026-09-21 with the real toolchain:
|
||||
`cargo check` finishes with **0 errors and 0 warnings** across 400+ crates (`wry` 0.55.1, `tauri`
|
||||
2.11.6), which proves the config parses under Tauri's strict schema and the icon embeds. Producing
|
||||
and *launching* a packaged desktop binary still needs `cargo install tauri-cli`, so this is **not**
|
||||
"proven" — say *built, not shot*. See [`src-tauri/README.md`](../src-tauri/README.md) for the
|
||||
placement rules and the token/CORS caveat.
|
||||
**Status: BUILT — artifacts emitted; launch unverified.** Run 2026-09-21 with the real toolchain
|
||||
(`tauri info` all ✔: webkit2gtk 2.50.6, rustc/cargo 1.96.1, frontendDist `../public`, Vue.js/Vite):
|
||||
`bun run tauri:build` produced a **65 MB ELF executable** and a **58 MB `.deb`**
|
||||
(`Package: doxa-maps`, `Depends: libwebkit2gtk-4.1-0, libgtk-3-0`). The web tree is compiled INTO
|
||||
the binary — 19 distinct `doxa-maps/...` asset paths are embedded in the ELF, which is why the
|
||||
`.deb` holds only 6 entries.
|
||||
|
||||
`bundle.targets` is `["deb"]`, not `"all"`: `rpmbuild` and `linuxdeploy` (AppImage) are absent on
|
||||
this box, so `"all"` would fail two of three formats at the very end of a ~6-minute release build.
|
||||
|
||||
Still **not "proven"** — say *built, not shot*. The GUI launch is unverified because this VPS is
|
||||
headless: the binary panics in `tao` with "Failed to initialize GTK" (no display, not a defect) and
|
||||
no Xvfb is installed. See [`src-tauri/README.md`](../src-tauri/README.md) for placement rules, the
|
||||
token/CORS caveat and the full artifact table.
|
||||
|
|
|
|||
|
|
@ -137,7 +137,7 @@ Your one element deploys five ways (only an element supports all five — a page
|
|||
| 3 | **JavaScript embed** | `<script src=".../<plugin>.js">` + `<your-tag>` (SRI-hashed) | ✅ proven |
|
||||
| 2 | **mobile** | `bun run phone` (Capacitor) — build step, no new code | 🔶 built, not shot |
|
||||
| 4 | **WordPress plugin** | the `wordpress/doxa-maps-embed/` PHP wrapper emits the embed snippet | 🔶 built, not shot |
|
||||
| 5 | **desktop (Tauri)** | `src-tauri/` wraps the same `public/` tree (`cargo check` clean) | 🔶 built, not shot |
|
||||
| 5 | **desktop (Tauri)** | `bun run tauri:build` → a real binary + `.deb` wrapping the same `public/` tree | 🔶 built, not shot |
|
||||
|
||||
Say "proven" ONLY for 1 & 3 (2, 4 and 5 are scaffolded but no binary/install has been shot). Verify at `https://<platform>/plugin-assets/doxa-maps/<plugin>/<plugin>/index.html`.
|
||||
**Done = the live site shows it, not a green build.**
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@
|
|||
"cap:sync": "./node_modules/.bin/cap sync android # NOT `bunx` — bunx is not on PATH in this environment (command not found, exit 127), which broke cap:sync -> apk:debug -> phone at step one. The CLI IS installed locally (@capacitor/cli 7.6.9); invoke the local bin directly. The rest of package.json already uses the spaced `bun x` form.",
|
||||
"cap:verify": "test -f capacitor/android/app/src/main/assets/public/index.html && echo \"OK webDir copied\" || (echo \"FAIL: empty assets/public -> blank white screen. Check webDir.\" && exit 1)",
|
||||
"check:tauri": "node internal/check-tauri-config.mjs",
|
||||
"tauri:build": "./node_modules/.bin/tauri build",
|
||||
"apk:debug": "bun run build && bun run cap:sync && bun run cap:verify && cd capacitor/android && ./gradlew assembleDebug",
|
||||
"apk:install": "adb install -r capacitor/android/app/build/outputs/apk/debug/app-debug.apk",
|
||||
"phone": "bun run apk:debug && bun run apk:install",
|
||||
|
|
@ -73,6 +74,7 @@
|
|||
"@capacitor/android": "7",
|
||||
"@capacitor/cli": "7",
|
||||
"@capacitor/core": "7",
|
||||
"@tauri-apps/cli": "^2.11.5",
|
||||
"@vitejs/plugin-vue": "^5.0.4",
|
||||
"playwright": "1.61.1",
|
||||
"terser": "^5.46.0",
|
||||
|
|
|
|||
|
|
@ -69,9 +69,34 @@ from `public/assets/vendor/` (the no-CDN rule), so a naive `script-src` would br
|
|||
|
||||
```sh
|
||||
bun run check:tauri # config contract — NO Rust, NO Tauri CLI needed (CI-safe)
|
||||
cargo check # compiles the crate (needs Rust + webkit2gtk)
|
||||
cargo tauri build # the binary — additionally needs `cargo install tauri-cli`
|
||||
cargo check # typechecks the crate (needs Rust + webkit2gtk)
|
||||
bun run tauri:build # the real binary + .deb (CLI is a devDependency: @tauri-apps/cli)
|
||||
```
|
||||
|
||||
**Status: built, not shot.** No desktop binary has been emitted here. Say *built, not shot* —
|
||||
"proven" is reserved for methods 1 (iframe) and 3 (direct-JS), which have live artifacts.
|
||||
## `bundle.targets` is `["deb"]`, not `"all"` — on purpose
|
||||
|
||||
`"all"` attempts **deb + rpm + appimage**. Measured on this box: `dpkg-deb` present, but
|
||||
`rpmbuild` and `linuxdeploy` (AppImage) **absent**, so `"all"` would fail on two of three
|
||||
formats after a full release compile. Narrowed to what the machine can actually produce.
|
||||
Add targets back when the packaging tools exist — the failure comes at the very END of a
|
||||
~6-minute release build, which is the expensive place to discover it.
|
||||
|
||||
## Status: BUILT — binary + .deb emitted; LAUNCH still unverified
|
||||
|
||||
Verified 2026-09-21 with the real toolchain (`tauri info`: webkit2gtk 2.50.6, rustc/cargo
|
||||
1.96.1, frontendDist `../public`, framework Vue.js, bundler Vite — all ✔):
|
||||
|
||||
| Artifact | Result |
|
||||
|---|---|
|
||||
| `target/release/doxa-maps-desktop` | **65 MB ELF 64-bit executable** |
|
||||
| `target/release/bundle/deb/*.deb` | **58 MB**, `Package: doxa-maps`, `Depends: libwebkit2gtk-4.1-0, libgtk-3-0` |
|
||||
|
||||
The web tree is **compiled INTO the binary** — not shipped as loose files, which is why the
|
||||
`.deb` has only 6 entries. Confirmed by 19 distinct embedded `doxa-maps/...` asset paths in the
|
||||
ELF (all bundle dirs + `assets/`), and by size: a logic-free shell is 65 MB only because the
|
||||
132 MB `public/` tree is compressed inside it.
|
||||
|
||||
**What is still NOT proven: that the window opens and renders.** This VPS is headless — running
|
||||
the binary panics in `tao` with *"Failed to initialize GTK"*, which is the absence of a display,
|
||||
not a defect. No Xvfb is installed. A human on a desktop machine (or a CI job with a virtual
|
||||
display) must run it once to move method 5 to *shot*.
|
||||
|
|
|
|||
|
|
@ -23,6 +23,6 @@
|
|||
},
|
||||
"bundle": {
|
||||
"active": true,
|
||||
"targets": "all"
|
||||
"targets": ["deb"]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue