feat: OTA 附件改用 7z 压缩包(体积 -73%),客户端纯 Rust 解压

- 发布脚本:附件打包为 <binary>.7z(-mx=9)+ .7z.sha256 上传;
  同时保留裸二进制附件,v1.0.3 及更早客户端(不认识 7z)仍可升级
- update.rs:pick_assets 优先选 7z、无则回退裸二进制;
  下载 → 大小对账 + sha256 校验 → sevenz-rust 解压出二进制暂存
  (压缩包随即删除);暂存目录清理排除 .7z
- UpdateInfo 增加 asset_name 字段区分压缩包/裸文件
- 实测 21.3MB exe → 5.8MB(7-Zip -mx=9)
This commit is contained in:
2026-09-29 17:29:47 +08:00
parent 1792c17eb2
commit 2e5e1b8143
5 changed files with 265 additions and 48 deletions
Generated
+83 -5
View File
@@ -632,15 +632,30 @@ dependencies = [
"syn 2.0.119",
]
[[package]]
name = "bit-set"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f0481a0e032742109b1133a095184ee93d88f3dc9e0d28a5d033dc77a073f44f"
dependencies = [
"bit-vec 0.7.0",
]
[[package]]
name = "bit-set"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ddef2995421ab6a5c779542c81ee77c115206f4ad9d5a8e05f4ff49716a3dd"
dependencies = [
"bit-vec",
"bit-vec 0.9.1",
]
[[package]]
name = "bit-vec"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2c54ff287cfc0a34f38a6b832ea1bd8e448a330b3e40a50859e6488bee07f22"
[[package]]
name = "bit-vec"
version = "0.9.1"
@@ -1308,6 +1323,21 @@ dependencies = [
"libc",
]
[[package]]
name = "crc"
version = "3.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5eb8a2a1cd12ab0d987a5d5e825195d372001a4094a0376319d5a0ad71c1ba0d"
dependencies = [
"crc-catalog",
]
[[package]]
name = "crc-catalog"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "217698eaf96b4a3f0bc4f3662aaa55bdf913cd54d7204591faa790070c6d0853"
[[package]]
name = "crc32fast"
version = "1.5.2"
@@ -1827,6 +1857,17 @@ dependencies = [
"libc",
]
[[package]]
name = "filetime_creation"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c25b5d475550e559de5b0c0084761c65325444e3b6c9e298af9cefe7a9ef3a5f"
dependencies = [
"cfg-if",
"filetime",
"windows-sys 0.52.0",
]
[[package]]
name = "find-msvc-tools"
version = "0.1.14"
@@ -3926,6 +3967,15 @@ dependencies = [
"num-traits",
]
[[package]]
name = "lzma-rust"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5baab2bbbd7d75a144d671e9ff79270e903957d92fb7386fd39034c709bd2661"
dependencies = [
"byteorder",
]
[[package]]
name = "mac"
version = "0.1.1"
@@ -4153,6 +4203,7 @@ dependencies = [
"sentry",
"serde",
"serde_json",
"sevenz-rust",
"sha1",
"sha2 0.10.9",
"smol",
@@ -4175,7 +4226,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2bf919621e7975acb27d881bae2fb993e0d45c8e0446e85e6272971e00dc8df"
dependencies = [
"arrayvec",
"bit-set",
"bit-set 0.9.1",
"bitflags 2.13.2",
"cfg-if",
"cfg_aliases",
@@ -4312,6 +4363,16 @@ dependencies = [
"instant",
]
[[package]]
name = "nt-time"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2de419e64947cd8830e66beb584acc3fb42ed411d103e3c794dda355d1b374b5"
dependencies = [
"chrono",
"time",
]
[[package]]
name = "ntapi"
version = "0.4.3"
@@ -6577,6 +6638,23 @@ dependencies = [
"serde",
]
[[package]]
name = "sevenz-rust"
version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26482cf1ecce4540dc782fc70019eba89ffc4d87b3717eb5ec524b5db6fdefef"
dependencies = [
"bit-set 0.6.0",
"byteorder",
"crc",
"filetime_creation",
"js-sys",
"lzma-rust",
"nt-time",
"sha2 0.10.9",
"wasm-bindgen",
]
[[package]]
name = "sha1"
version = "0.10.7"
@@ -8250,8 +8328,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2f519832254e56965a9940c4af57dcb75f702b6f6fa4a0b172f685395843a4d7"
dependencies = [
"arrayvec",
"bit-set",
"bit-vec",
"bit-set 0.9.1",
"bit-vec 0.9.1",
"bitflags 2.13.2",
"bytemuck",
"cfg_aliases",
@@ -8322,7 +8400,7 @@ dependencies = [
"android_system_properties",
"arrayvec",
"ash",
"bit-set",
"bit-set 0.9.1",
"bitflags 2.13.2",
"block2 0.6.2",
"bytemuck",