Desktop (Tauri) / Windows installer (cross-compiled) (push) Successful in 2m53s
Desktop (Tauri) / Tauri desktop (Linux) (push) Successful in 4m41s
Desktop (Tauri) / Update manifest (push) Successful in 4s
Android (Tauri) / Android APK (debug) (push) Successful in 3m40s
First Android build failed at openssl-sys: "Could not find directory of OpenSSL installation". reqwest is pinned to native-tls, which is right for Windows — it resolves to schannel there and keeps C and assembly out of the cross-compile — but on Android it resolves to OpenSSL, and there is no Android OpenSSL in the image to link against. Vendored rather than rustls. rustls builds faster and was the obvious fix, but it ships its own root store, so the phone would trust a different set of certificates than the desktop: a self-hosted server behind a private or enterprise CA would work on one surface and fail on another. Peer surfaces that quietly disagree about who to trust is a worse outcome than a slower build, so one TLS stack stays everywhere and OpenSSL gets compiled from source with the NDK toolchain — which is what perl and make are in ci-tauri-android for. Scoped to cfg(target_os = "android") so nothing changes for the Linux, Windows or web lanes; declared as a direct dependency purely to flip the feature, since cargo's unification then applies it to the copy native-tls pulls in. Cargo.lock regenerated in the same commit, per the documented procedure — the --locked gates in every lane fail otherwise. openssl-src 300.6.1+3.6.3 joins. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
90 lines
4.4 KiB
TOML
90 lines
4.4 KiB
TOML
[package]
|
|
name = "thoughtsync-desktop"
|
|
version = "0.1.0"
|
|
description = "ThoughtSync desktop — local-first Keep-style thought capture"
|
|
authors = ["bvandeusen"]
|
|
edition = "2021"
|
|
# The executable is named below, not inferred from this package name. Off so the
|
|
# inferred `thoughtsync-desktop` target and the explicit one can't both claim
|
|
# src/main.rs.
|
|
autobins = false
|
|
|
|
# App logic lives in the library (Tauri v2 pattern: a single `run()` entry point
|
|
# reusable across desktop and any future mobile target); main.rs is a thin shim.
|
|
[lib]
|
|
name = "thoughtsync_desktop_lib"
|
|
crate-type = ["staticlib", "cdylib", "rlib"]
|
|
|
|
# The shipped command is `thoughtsync` on every install channel, and the binary's
|
|
# own name is what the desktop actually keys on: GTK derives the window's WM_CLASS
|
|
# from it, and Tauri's generated .desktop file sets StartupWMClass to that same
|
|
# name. (Written without braces on purpose: `tauri android init` round-trips this
|
|
# file through a TOML serializer that reformats brace tokens inside comments.)
|
|
# So the canonical name has to be carried by the build target itself, not just by
|
|
# the path it gets installed to (issue 2075). The crate stays `thoughtsync-desktop`
|
|
# — only the executable is renamed. `thoughtsync` is also fixed under kebab-casing,
|
|
# which the AppImage bundler applies to the binary name on its way in.
|
|
[[bin]]
|
|
name = "thoughtsync"
|
|
path = "src/main.rs"
|
|
|
|
[build-dependencies]
|
|
tauri-build = { version = "2", features = [] }
|
|
|
|
[dependencies]
|
|
tauri = { version = "2", features = [] }
|
|
serde = { version = "1", features = ["derive"] }
|
|
serde_json = "1"
|
|
# Local-first store (M10.4): bundled = compile SQLite in, so there's no system
|
|
# libsqlite dependency to vary across the AppImage / native / Windows builds.
|
|
rusqlite = { version = "0.32", features = ["bundled"] }
|
|
uuid = { version = "1", features = ["v4"] }
|
|
# RFC3339 timestamps for created_at/updated_at/remind_at (Date.parse-able on the JS side).
|
|
chrono = { version = "0.4", default-features = false, features = ["clock"] }
|
|
# Startup + operation logging to stdout AND a persistent file, so portability
|
|
# issues are diagnosable from any environment. `log` is the facade the code uses.
|
|
tauri-plugin-log = "2"
|
|
log = "0.4"
|
|
# In-app updates (M10.9). Signature verification is minisign; the public half lives
|
|
# in tauri.conf.json and the private half only ever as a CI secret.
|
|
tauri-plugin-updater = "2"
|
|
# HTTP for the opt-in server handshake (M10.6) and, next, the sync engine (M10.7).
|
|
#
|
|
# native-tls, NOT rustls, deliberately: on x86_64-pc-windows-msvc native-tls
|
|
# resolves to `schannel` — pure-Rust bindings to the OS TLS stack — so nothing C or
|
|
# assembly has to cross-compile on the Windows lane, which is the fragile one (it
|
|
# builds on Linux via cargo-xwin, and a C dependency there is what broke it before).
|
|
# rustls would instead pull in ring/aws-lc-rs and their assembler. On Linux
|
|
# native-tls uses OpenSSL, whose headers (libssl-dev) ci-tauri already ships.
|
|
# default-features off drops http2/charset we don't need for a JSON API.
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "native-tls"] }
|
|
# Verifying downloaded attachment bytes against the sha256 the server advertised.
|
|
# Pure Rust (no C/asm beyond optional cpufeatures), so it costs the Windows
|
|
# cross-compile lane nothing — see ci-requirements.md on why that matters here.
|
|
sha2 = "0.10"
|
|
|
|
# Android has no system OpenSSL to link against, and `native-tls` resolves to
|
|
# OpenSSL there — unlike Windows, where it lands on schannel and costs nothing.
|
|
# Without this the build dies at `openssl-sys`: "Could not find directory of
|
|
# OpenSSL installation".
|
|
#
|
|
# `vendored` compiles OpenSSL from source with the NDK toolchain (hence perl + make
|
|
# in ci-tauri-android). The alternative was rustls on Android only, which builds
|
|
# faster — but rustls ships its own root store, so the phone would trust a
|
|
# DIFFERENT set of certificates than the desktop does. A self-hosted server behind
|
|
# a private or enterprise CA would then work on one surface and fail on another,
|
|
# and "the surfaces behave the same" is worth more here than build minutes.
|
|
#
|
|
# Declared as a direct dependency purely to turn the feature on: cargo's feature
|
|
# unification applies it to the copy `native-tls` pulls in transitively.
|
|
[target.'cfg(target_os = "android")'.dependencies]
|
|
openssl-sys = { version = "0.9", features = ["vendored"] }
|
|
|
|
# Tauri's default release profile: smaller, faster shipped binaries.
|
|
[profile.release]
|
|
codegen-units = 1
|
|
lto = true
|
|
opt-level = "s"
|
|
panic = "abort"
|
|
strip = true
|