Skip to content

Commit 9bead42

Browse files
authored
feat(cli): allow rotating updater private key (#8059)
1 parent 2da043f commit 9bead42

File tree

6 files changed

+55
-9
lines changed

6 files changed

+55
-9
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@tauri-apps/cli": patch:enhance
3+
"tauri-cli": patch:enhance
4+
---
5+
6+
Allow rotating the updater private key.

.github/workflows/test-core.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ jobs:
8888
cargo update -p system-deps:6.1.2 --precise 6.1.1
8989
cargo update -p toml:0.7.8 --precise 0.7.3
9090
cargo update -p toml_edit:0.19.15 --precise 0.19.8
91+
cargo update -p embed-resource --precise 2.3.0
9192
cargo update -p toml_datetime --precise 0.6.1
9293
cargo update -p serde_spanned --precise 0.6.1
9394
cargo update -p winnow --precise 0.4.1
@@ -100,7 +101,7 @@ jobs:
100101
cargo update -p is-terminal --precise 0.4.7
101102
cargo update -p colored --precise 2.0.2
102103
cargo update -p tempfile --precise 3.6.0
103-
cargo update -p serde_with:3.3.0 --precise 3.0.0
104+
cargo update -p serde_with:3.4.0 --precise 3.0.0
104105
cargo update -p tokio --precise 1.29.0
105106
cargo update -p flate2 --precise 1.0.26
106107
cargo update -p h2 --precise 0.3.20

core/tests/app-updater/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
"updater": {
3535
"active": true,
3636
"dialog": false,
37-
"pubkey": "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK",
37+
"pubkey": "dummy",
3838
"endpoints": ["http://localhost:3007"],
3939
"windows": {
4040
"installMode": "quiet"

core/tests/app-updater/tests/update.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,30 @@ use std::{
1414
use serde::Serialize;
1515

1616
const UPDATER_PRIVATE_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5YTBGV3JiTy9lRDZVd3NkL0RoQ1htZmExNDd3RmJaNmRMT1ZGVjczWTBKZ0FBQkFBQUFBQUFBQUFBQUlBQUFBQWdMekUzVkE4K0tWQ1hjeGt1Vkx2QnRUR3pzQjVuV0ZpM2czWXNkRm9hVUxrVnB6TUN3K1NheHJMREhQbUVWVFZRK3NIL1VsMDBHNW5ET1EzQno0UStSb21nRW4vZlpTaXIwZFh5ZmRlL1lSN0dKcHdyOUVPclVvdzFhVkxDVnZrbHM2T1o4Tk1NWEU9Cg==";
17+
// const UPDATER_PUBLIC_KEY: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE5QzMxNjYwNTM5OEUwNTgKUldSWTRKaFRZQmJER1h4d1ZMYVA3dnluSjdpN2RmMldJR09hUFFlZDY0SlFqckkvRUJhZDJVZXAK";
18+
19+
const UPDATER_PRIVATE_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IHJzaWduIGVuY3J5cHRlZCBzZWNyZXQga2V5ClJXUlRZMEl5Vm1kaFhCeEh0N2svRy85djJQbmNGTnk3TUQ1emJRWTF3Y01INW9OZjJwSUFBQkFBQUFBQUFBQUFBQUlBQUFBQS9YRStJU1RjK1JmUS9QK0F3WmdaMFE0RmUrcVY1RXhkL0VaYVZEeTVDNHREWnE2Y21yTVZCcW0rM1lKOUVLd1p1MWVPVFN5WmZBZEUxYnVtT3BnWW93TDZZRnYra1FUblFXazBVempRUFZOTnFRSjdod05LMjhvK3M0VGhoR0V4YWkzWUpOQXBIcEU9Cg==";
20+
const UPDATER_PUBLIC_KEY_NEXT: &str = "dW50cnVzdGVkIGNvbW1lbnQ6IG1pbmlzaWduIHB1YmxpYyBrZXk6IDE3RjlEQzI0MjEzRTcxRkQKUldUOWNUNGhKTno1RjZtKzNZSjlFS3dadTFlT1RTeVpmQWRFMWJ1bU9wZ1lvd0w2WUZ2K2tRVG4K";
1721

1822
#[derive(Serialize)]
1923
struct PackageConfig {
2024
version: &'static str,
2125
}
2226

27+
#[derive(Serialize)]
28+
struct UpdaterConfig {
29+
pubkey: &'static str,
30+
}
31+
32+
#[derive(Serialize)]
33+
struct TauriConfig {
34+
updater: UpdaterConfig,
35+
}
36+
2337
#[derive(Serialize)]
2438
struct Config {
2539
package: PackageConfig,
40+
tauri: TauriConfig,
2641
}
2742

2843
#[derive(Serialize)]
@@ -57,6 +72,7 @@ fn get_cli_bin_path(cli_dir: &Path, debug: bool) -> Option<PathBuf> {
5772
fn build_app(
5873
cli_bin_path: &Path,
5974
cwd: &Path,
75+
envs: Vec<(&str, &str)>,
6076
config: &Config,
6177
bundle_updater: bool,
6278
target: BundleTarget,
@@ -78,7 +94,7 @@ fn build_app(
7894
command.args(["--bundles", "msi", "nsis"]);
7995

8096
command
81-
.env("TAURI_PRIVATE_KEY", UPDATER_PRIVATE_KEY)
97+
.envs(envs)
8298
.env("TAURI_KEY_PASSWORD", "")
8399
.args(["--bundles", "updater"]);
84100
} else {
@@ -197,12 +213,18 @@ fn update_app() {
197213

198214
let mut config = Config {
199215
package: PackageConfig { version: "1.0.0" },
216+
tauri: TauriConfig {
217+
updater: UpdaterConfig {
218+
pubkey: UPDATER_PUBLIC_KEY_NEXT,
219+
},
220+
},
200221
};
201222

202223
// bundle app update
203224
build_app(
204225
&cli_bin_path,
205226
&manifest_dir,
227+
vec![("TAURI_PRIVATE_KEY", UPDATER_PRIVATE_KEY_NEXT)],
206228
&config,
207229
true,
208230
Default::default(),
@@ -285,7 +307,14 @@ fn update_app() {
285307
config.package.version = "0.1.0";
286308

287309
// bundle initial app version
288-
build_app(&cli_bin_path, &manifest_dir, &config, false, bundle_target);
310+
build_app(
311+
&cli_bin_path,
312+
&manifest_dir,
313+
vec![("TAURI_PRIVATE_KEY", UPDATER_PRIVATE_KEY)],
314+
&config,
315+
false,
316+
bundle_target,
317+
);
289318

290319
let mut binary_cmd = if cfg!(windows) {
291320
Command::new(root_dir.join("target/debug/app-updater.exe"))

tooling/cli/Cargo.lock

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tooling/cli/src/build.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,9 +320,9 @@ pub fn command(mut options: Options, verbosity: u8) -> Result<()> {
320320
// sign our path from environment variables
321321
let (signature_path, signature) = sign_file(&secret_key, path)?;
322322
if signature.keynum() != public_key.keynum() {
323-
return Err(anyhow::anyhow!(
324-
"The updater secret key from `TAURI_PRIVATE_KEY` does not match the public key defined in `tauri.conf.json > tauri > updater > pubkey`."
325-
));
323+
log::warn!(
324+
"The updater secret key from `TAURI_PRIVATE_KEY` does not match the public key defined in `tauri.conf.json > tauri > updater > pubkey`. If you are not rotating keys, this means your configuration is wrong and won't be accepted at runtime."
325+
);
326326
}
327327
signed_paths.push(signature_path);
328328
}

0 commit comments

Comments
 (0)