From 41a5026331cdd799276a5b9b468ded335a86f1b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pascal=20Andr=C3=A9?= Date: Mon, 30 Mar 2026 21:52:37 +0200 Subject: [PATCH] fix(tauri): sync native app version with package releases (#257) ## Summary - sync the Tauri native version metadata from `packages/tauri-app/package.json` so release builds pick up workspace version bumps like `0.13.1` - update the checked-in Tauri `Cargo.toml` and `tauri.conf.json` versions from `0.12.3` to `0.13.1` - document the prebuild sync behavior in `BUILD.md` ## Testing - `node packages/tauri-app/scripts/sync-tauri-version.js` --- package.json | 2 +- packages/tauri-app/package.json | 1 + .../tauri-app/scripts/sync-tauri-version.js | 102 ++++++++++++++++++ 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 packages/tauri-app/scripts/sync-tauri-version.js diff --git a/package.json b/package.json index f87e6994..a423bd4a 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "build:mac-x64": "npm run build:mac-x64 --workspace @neuralnomads/codenomad-electron-app", "build:binaries": "npm run build:binaries --workspace @neuralnomads/codenomad-electron-app", "typecheck": "npm run typecheck --workspace @codenomad/ui && npm run typecheck --workspace @neuralnomads/codenomad-electron-app", - "bumpVersion": "npm version --workspaces --include-workspace-root --no-git-tag-version" + "bumpVersion": "npm version --workspaces --include-workspace-root --no-git-tag-version && npm run sync:version --workspace @codenomad/tauri-app" }, "dependencies": { "7zip-bin": "^5.2.0", diff --git a/packages/tauri-app/package.json b/packages/tauri-app/package.json index 67bf4578..fddb3baf 100644 --- a/packages/tauri-app/package.json +++ b/packages/tauri-app/package.json @@ -8,6 +8,7 @@ "dev:ui": "npm run dev --workspace @codenomad/ui", "dev:prep": "node ./scripts/dev-prep.js", "dev:bootstrap": "npm run dev:prep && npm run dev:ui", + "sync:version": "node ./scripts/sync-tauri-version.js", "prebuild": "node ./scripts/prebuild.js", "bundle:server": "npm run prebuild", "build": "tauri build" diff --git a/packages/tauri-app/scripts/sync-tauri-version.js b/packages/tauri-app/scripts/sync-tauri-version.js new file mode 100644 index 00000000..f5f8092e --- /dev/null +++ b/packages/tauri-app/scripts/sync-tauri-version.js @@ -0,0 +1,102 @@ +#!/usr/bin/env node + +const fs = require("fs") +const path = require("path") + +const root = path.resolve(__dirname, "..") +const packageJsonPath = path.join(root, "package.json") +const cargoTomlPath = path.join(root, "src-tauri", "Cargo.toml") +const cargoLockPath = path.join(root, "Cargo.lock") +const tauriConfigPath = path.join(root, "src-tauri", "tauri.conf.json") + +function readPackageVersion() { + const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8")) + if (typeof packageJson.version !== "string" || packageJson.version.length === 0) { + throw new Error("Missing version in packages/tauri-app/package.json") + } + return packageJson.version +} + +function syncCargoToml(version) { + const current = fs.readFileSync(cargoTomlPath, "utf8") + const packageVersionPattern = /(\[package\][\s\S]*?^version\s*=\s*")([^"]+)(")/m + const match = current.match(packageVersionPattern) + + if (!match) { + throw new Error("Unable to find [package] version in packages/tauri-app/src-tauri/Cargo.toml") + } + + if (match[2] === version) { + return false + } + + const updated = current.replace(packageVersionPattern, (_, prefix, __, suffix) => `${prefix}${version}${suffix}`) + fs.writeFileSync(cargoTomlPath, updated) + return true +} + +function syncCargoLock(version) { + if (!fs.existsSync(cargoLockPath)) { + return false + } + + const current = fs.readFileSync(cargoLockPath, "utf8") + const packageVersionPattern = /(\[\[package\]\]\r?\nname = "codenomad-tauri"\r?\nversion = ")([^"]+)(")/ + const match = current.match(packageVersionPattern) + + if (!match) { + throw new Error("Unable to find codenomad-tauri version in packages/tauri-app/Cargo.lock") + } + + if (match[2] === version) { + return false + } + + const updated = current.replace(packageVersionPattern, (_, prefix, __, suffix) => `${prefix}${version}${suffix}`) + fs.writeFileSync(cargoLockPath, updated) + return true +} + +function syncTauriConfig(version) { + const current = fs.readFileSync(tauriConfigPath, "utf8") + const config = JSON.parse(current) + if (config.version === version) { + return false + } + + config.version = version + fs.writeFileSync(tauriConfigPath, `${JSON.stringify(config, null, 2)}\n`) + return true +} + +function main() { + const version = readPackageVersion() + const changed = [] + + if (syncCargoToml(version)) { + changed.push(path.relative(root, cargoTomlPath)) + } + + if (syncCargoLock(version)) { + changed.push(path.relative(root, cargoLockPath)) + } + + if (syncTauriConfig(version)) { + changed.push(path.relative(root, tauriConfigPath)) + } + + if (changed.length === 0) { + console.log(`[sync-tauri-version] already aligned to ${version}`) + return + } + + console.log(`[sync-tauri-version] synced ${version} -> ${changed.join(", ")}`) +} + +try { + main() +} catch (error) { + const message = error instanceof Error ? error.message : String(error) + console.error(`[sync-tauri-version] failed: ${message}`) + process.exit(1) +}