Repository navigation
chore(deps): 合并 dependabot 的五组依赖升级并适配新版本 - #224
Merged
Merged
Conversation
…t 8.0.2、setup-node 7.1.0、rust-cache 2.9.3、install-action 2.88.0 取代 dependabot #189。按标签核对过新的提交 SHA;工作流里 11 月 1 日之后新增的引用也一并改了。
合入 dependabot 的 cargo-minor-patch 分组(#213)。tauri 跟着 tauri-build 2.7.4 与 tauri-utils 2.10.2 升到 2.12.5,插件随之升级:opener 2.5.5、 single-instance 2.4.5、barcode-scanner 2.5.3。其余:arboard 3.7.0、 hyper-util 0.1.21、rmcp 3.8.0、tokio 1.54.1、rustls 0.23.46、uuid 1.29.0、 serde_json 1.0.154 等。 tauri-plugin-dialog 保持 2.7.3:它支持 tauri 2.10 及以后的版本,2.8.4 换用 rfd 0.17,需要在各平台另行检查保存对话框。opus-rs 0.1.40 与 Symphonia 0.6 一起在适配 voltip-media 的提交里升级。
…ry 0.100 合入 dependabot 的 cargo-major 分组(#212)中不需要改代码的三项: - rusqlite 0.41.1(内置 SQLite 3.54.0):历史库、同步镜像与备份的测试照常通过。 - voltip-focus 的 windows 0.62.2:tauri 2.12 的 tao 也用这个版本,四个功能它都已开启。 - voltip-net 的 windows-registry 0.100.0:hyper-util 0.1.21 要求 0.7 以下,Windows 构建会 同时编译 0.6 给它用。 Symphonia 0.6 需要改 voltip-media,在下一个提交里升级。
合入 #212 的 symphonia 0.5.5 → 0.6.1 与 #213 的 opus-rs 0.1.34 → 0.1.40, 按新接口改写 voltip-media,导入的结果与升级前相同: - 探测、取包、建解码器换成 0.6 的接口;音轨长度先看音轨自己的时长,再看帧数, 最后看整个文件的时长。 - 打开 `id3v2` 特性:0.6 只在开头 1 MB 内找 MP3 的第一帧,带封面的大标签 会让文件被当成「不是媒体文件」。 - 空的 Opus 包不交给 opus-rs:0.1.40 把它当作丢包,补出 120 ms 的声音。 - MP4 与 Matroska 的最后一个盒子或元素超出文件末尾时报「文件已损坏」 (mp4.rs、mkv.rs):0.6 把截断的文件报成格式不支持;截断的 MKV 在 0.5 会让读取器 panic。 - 编码名覆盖 0.6 新增的编码 ID(AC-3、TrueHD、RealAudio、aptX 等), 不再把认不出的编码报成 pcm。 - MP4 的编辑列表按音轨在文件里的顺序找:0.6 的音轨 ID 是 tkhd 的编号。 与升级前逐个比较了 tests/fixtures 的全部文件和截断、拼接、损坏的变体: 样本数都相同;AAC 的差值不超过 148(16 位整数);Opus 的输出更接近原始 正弦波(opus-rs 的修正)。
oxlint 1.90 的 no-unnecessary-type-assertion 报出这一处:toContainElement 直接接受 querySelector 的返回类型,断言什么也没改变。
合入 dependabot 的 npm-minor-patch 分组(#175)中除 React Native 应用以外的部分: @tauri-apps/api、@tauri-apps/cli 2.12.4,@tauri-apps/plugin-barcode-scanner 2.5.3, 电脑端、手机端与 UI 包的 react / react-dom 19.3.1,vite 8.3.5、vitest 5.0.5、 jsdom 30.1.3,oxfmt 0.75.0、oxlint 1.90.0,zod 4.6.7 等。React Native 应用的 部分要和 Expo 58 一起升级,见下一个提交。 CI 与发布用的 cargo-tauri 同步到 2.12.4(.github/scripts/install-cargo-tauri.sh, 三个平台的 SHA-256 已核对)。它带的 tauri-bundler 2.10.4 仍然在工具目录缺少 AppRun-x86_64 时从 apprun-old 下载、以 0770 写入并原样复制进 AppDir, scripts/lib/appimage.sh 预先放好固定 AppRun 的做法照旧有效。
React Native 0.88 默认导出按源码生成的类型(types_generated):
- Easing.cubic 声明成方法,直接当缓动函数传入会被 oxlint 的 unbound-method
报出;Sheet 改为传一个调用它的普通函数。
- TextInput 的 ref 类型变成 TextInputInstance;CodeInput 的 ref 用
ComponentRef<typeof TextInput>。
- StyleSheet.flatten 可能返回 null 或 undefined;两处测试读样式前补上 `?? {}`。
行为不变。
Expo SDK 58 的 app/build.gradle 模板在 release 构建类型里直接写了 proguard-android-optimize.txt。withOptimizedRelease 找不到 proguard-android.txt 就报「the template changed」,prebuild 因此失败。 插件现在遇到优化版原样保留;SDK 57 的写法照旧换成优化版;两者都没有仍然报错, 不会悄悄出一个只缩减、不优化的包。回归测试用 SDK 58 模板的 release 段落。
合入 #211 与 #175 里 apps/mobile-rn 的版本:expo 58.0.21 及 expo-* 58、 react-native 0.88.1、react-native-screens 4.30.1、react-native-svg 15.16.0、 React Navigation 7.21 / 7.5.1、jest 30.5.2、@react-native/jest-preset 0.88.1、 @testing-library/react-native 14.1.0、@types/jest 30.0.0、@types/react 19.3.0、 babel-preset-expo 58.0.22、test-renderer 1.3.1。 与两份 PR 不同的四处,前三处按 Expo SDK 58 的官方对应表 (expo/bundledNativeModules.json),待协调会话确认: - react、react-dom 19.3.0(#175 为 19.3.1):RN 0.88.1 内置的渲染器是 19.3.0, SDK 58 固定这个版本。 - react-native-safe-area-context 5.10.1(#175 为 5.11.0):SDK 58 要求 ~5.10.1; 5.11 改了 Android 上父视图已经处理过的窗口边距的计算方式。 - @babel/core 7.29.13(#211 为 8.0.9):babel-preset-expo 58 带的 Babel 7 插件要求 ^7,换成 8 后每个测试套件加载时都报 Requires Babel "^7.0.0-0"。 - jest-expo 58.0.14(#211 为 58.0.13):RN 0.88 从 react-native 导出 AssetRegistry, 58.0.13 只模拟 react-native/asset-registry,198 个测试报 Module "1" is missing from the asset registry;58.0.14 修正了这个模拟。 expo install --check 没有报告;prebuild 通过。
tauri-build 2.7 起,build.windows.staticVCRuntime 默认开启,普通 cargo 构建也会加上 Tauri 自己的运行库链接参数:VC 运行库静态链接,UCRT 改用系统 DLL(/NODEFAULTLIB:libucrt.lib、 /DEFAULTLIB:ucrt.lib)。桌面版本来就用 .cargo/config.toml 的 +crt-static 和 build.rs 的 libucrt.lib 静态链接整个 C 运行库,两者叠加后,Windows 原生 cargo test 链接 voltip-desktop 的库测试时报 __p___argc 重复定义(LNK2005、LNK1169)。tauri-build 2.6 只在 STATIC_VCRUNTIME 为 true 时加这组参数,那是 Tauri CLI 2.11 构建安装包时设置的;CLI 2.12 不再设置这个变量。 tauri.conf.json 的 build.windows 把 staticVCRuntime 关掉(build 设置只写在 tauri.conf.json, 平台覆盖文件只改自己的 bundle 段,window-config.test.ts 检查;这一项只对 MSVC 目标生效), 测试构建和安装包的 C 运行库都只由 .cargo/config.toml 和 build.rs 决定。bundle.rs 加了回归 测试,检查 Windows 配置和安装包覆盖配置合并后这一项都是 false,并且静态链接的两处设置还在。
Expo SDK 58 / React Native 0.88 带的 Android Gradle Plugin 是 9.2.1。从 9.0 起 android.onlyEnableUnitTestForTheTestedBuildType 默认为 true,只给模块测试的构建类型(默认 debug)创建单元测试任务,scripts/build-android-rn.sh 调用的 :voltip-native:testReleaseUnitTest 因此不存在,Gradle 在开始构建前就停下了。 voltip-native 的 build.gradle 写明 testBuildType 'release':单元测试继续针对 assembleRelease 本来就要编译的 release 构建,不用另外编译一遍 debug。 test_release_workflows.py 加了回归测试。
Symphonia 0.6 的 ADTS 读取器给这段测试音频估计 2.09 s,与解码出的长度一致;0.5 估计的是 2.6 s。注释里只写了旧值。
导入失败时,界面在「文件已损坏或不完整:」后面显示读取器给的原因。Symphonia 0.5 对末尾 缺失的文件说 end of stream;换到 0.6 后,Ogg 的读取器改说 unexpected end of file,MP4 与 Matroska 由 mp4.rs、mkv.rs 认出截断后写的是 the file is cut off,用户看到的文字因此变了。 三处都改回 end of stream(END_OF_STREAM)。截断的 MKV、WebM 在 0.5 会让读取器 panic, 现在也显示这个原因。decode.rs 加了回归测试,逐个检查截断的 M4A、MP4、MOV、Ogg、MKV、 WebM 的探测与解码结果。
opus-rs 0.1.40 与 libopus 一样,单声道解码器会把声道数为 2 的包混成单声道解出来;0.1.34 直接报错。take_codec 的测试原来拿这样的包当「解不出的包」,升级后断言失败(Windows 与 Linux 都一样)。 「坏包被跳过、录音继续」改用 RFC 6716 §3.4 R5 定义的畸形包(不含任何帧的 code 3 包), 并检查它后面的包照常解码;双声道包那一行保留,改为检查它按 libopus 的做法解出 10 ms。
dictation.md §3.9 与 acceptance.md 写的是 0.1.34 按输出缓冲区大小给 SILK 分配码率。0.1.40 改按 bitrate_bps:上传与长录音副本的 61 字节缓冲区仍是每包上限,码率不变(20.2 → 20.1 kbit/s);手机录音用整个缓冲区,从 78.2 降到 22.5 kbit/s,本机 SenseVoice 的识别结果与原音频的差别不变。
Expo SDK 58 带的 AGP 9.2 不允许库的 consumer 规则里有全局选项:本地模块的构建在 exportReleaseConsumerProguardFiles 失败(-renamesourcefileattribute),预编译 AAR 里的则被 应用的 R8 忽略。-keepattributes SourceFile,LineNumberTable 和 -renamesourcefileattribute SourceFile 改由 app.json 的 expo-build-properties android.extraProguardRules 写进应用的 proguard-rules.pro;模块的 consumer-rules.pro 只留针对类的规则。
Tauri CLI 2.12 把配置要求的特性(macos-private-api)写进 [dependencies] 和每个 [target.*.dependencies] 里的 tauri 表,2.11 只写 [dependencies]。macOS 和 Windows 的表 缺这一项,每次 cargo tauri build / dev 都会改写 Cargo.toml,构建后的工作树与提交不一致。 两张表补上后 CLI 没有可写的内容;解析出的特性集合不变(基础表本来就开着这一项)。
Expo SDK 58 预编译的模块在 AAR 元数据里要求 minCompileSdk=37,compileSdk 36 时 Gradle 的 checkReleaseAarMetadata 拒绝构建。compileSdk 只决定代码能调用哪些接口,应用的 行为跟随 targetSdk,仍是 36(check-android-package.sh 照旧检查)。CI 的工具链改装 platforms;android-37.0。
React Native 0.88 的 Metro 把 packager source map 写成按模块分段的 index map,顶层没有 sourcesContent,build-android-rn.sh 因此报 no sourcesContent 并停止。取源码的代码移到 scripts/release/bundled-sources.py,逐段(可嵌套)读取 sourcesContent;整份没有源码,或某段 不内嵌 map 时仍然拒绝,扫描不会漏过没读到的源码。
opus-rs 0.1.34 不看 bitrate_bps,手机录音按整个包缓冲区分配码率,语音约 78 kbit/s; 0.1.40 按设置分配,24 kbit/s 时只剩 22.5 kbit/s。按用户的决定(协调会话答复 Q4, 2026-11-07)把手机录音的设置改为 96 kbit/s:58 s 中文语音、单音、噪声和合成浊音编出的包 都与 0.1.34 逐字节相同,语音实际 78.2 kbit/s,本机 SenseVoice 的结果与原音频相差 7 字, 与升级前一样。上传给内置服务的长录音和录音缓存的长录音副本升级前后都约 20 kbit/s,不改。
expo-camera 58 默认带上 ML Kit 文档扫描(play-services-mlkit-document-scanner),它的 GmsDocumentScanningDelegateActivity 锁竖屏,check-android-package.sh 因此拒绝发布包。应用 不扫描文档(扫码用自己的相机预览),plugins/display.js 在根工程的 build.gradle 里把这个库 从 :app 的依赖中排除,库和它的页面都不进包,与升级前(expo-camera 57)一样。 expo-camera 自己的开关 expo.camera.document-scanner-enabled 只在从源码构建它时生效:Expo SDK 58 用预编译模块,模块的 Gradle 元数据总是带上这个库。测试读取这份元数据,确认排除的 正是它带来的库。
Tauri CLI 2.12 会合并它读到的所有 tauri 依赖表的 feature,不看目标平台 (tauri-apps/tauri#16250)。macOS 与 Windows 表里的 tray-icon 因此在 Linux 主机上 也算数:CI 用 cargo-xwin 交叉构建 Windows 安装包时报 "Can't detect any appindicator library" 退出,本机打出的 deb 和 rpm 多了 libayatana-appindicator3 依赖。 CLI 不读也不改继承工作区的表,所以 macOS 与 Windows 表改为 tauri = { workspace = true, features = ["tray-icon"] },版本和默认 feature 来自根 Cargo.toml。两个平台的构建仍然带托盘(cargo tree 核对过),Linux 不带;Cargo.lock 不变。tests/bundle.rs 新增回归测试,检查 CLI 读到的表都不含 tray-icon。
tray-icon 0.25.1(随 Tauri 2.12)只在菜单弹出的那段时间把它挂到状态栏项上 (tauri-apps/tray-icon#365,修 macOS 27 吞掉左键单击)。VoiceOver 和键盘进入 菜单栏时的按下由 AppKit 转成状态栏按钮的 action,按钮既没有 action 也没有菜单, 于是什么都不打开;CI 两台 Mac 的托盘冒烟在第 3 步等不到菜单。 现在给状态栏按钮设 target/action,按下时调 tray-icon 的 show_menu(),菜单正在 显示时不再打开,并取消等待中的单击。鼠标单击照旧走 tray-icon 盖在按钮上的视图, 到不了这个 action。冒烟脚本第 3–4d 步(经辅助功能按下打开菜单并选择各项)就是 它的回归检查。docs/dictation.md §15.4 与 docs/acceptance.md 同步。
Codecov Report❌ Patch coverage is
@@ Coverage Diff @@
## main #224 +/- ##
========================================
Coverage 93.53% 93.53%
========================================
Files 481 482 +1
Lines 83800 83966 +166
Branches 4902 4902
========================================
+ Hits 78384 78540 +156
- Misses 4744 4754 +10
Partials 672 672
Flags with carried forward coverage won't be shown. Click here to find out more.
... and 9 files with indirect coverage changes 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
把 dependabot 开着的五个依赖升级 PR 合进一个分支,并修好它们引起的构建、测试和打包问题,随 0.3.0 一起发布。
这个 PR 取代 #175(npm 小版本与补丁,28 项)、#189(GitHub Actions,5 项)、#211(npm 大版本,16 项)、#212(Cargo 大版本,4 项)和 #213(Cargo 小版本与补丁,25 项)。那五个 PR 基于 11-01 的 main,锁文件互相冲突,也没有包含适配代码,所以这里重新生成了
Cargo.lock和pnpm-lock.yaml。这个 PR 合并后,再由维护者关闭那五个 PR。主要版本
tauri2.12.5、tauri-build2.7.4、tauri-utils2.10.2(chore(deps): bump the cargo-minor-patch group across 1 directory with 25 updates #213 只升了后两个,这里把tauri一起升上去,两边才匹配);npm 侧@tauri-apps/api、@tauri-apps/cli2.12.4,CI 与发布用的 cargo-tauri 2.12.4;扫码插件的 Rust 包与 npm 包都是 2.5.3。expo install --check没有报告不匹配。@voltip/ui)、Vite 8.3.5、Vitest 5.0.5、oxlint 1.90.0、oxfmt 0.75.0 等。五个 PR 共 78 项:72 项是 PR 里的版本,2 项是同一大版本里更新的版本(
jest-expo58.0.14、tauri-plugin-barcode-scanner2.5.3)。下面 4 项低于 PR 的版本,都只在apps/mobile-rn:react、react-dom19.3.0(其余工作区是 19.3.1):Expo SDK 58 固定 19.3.0,React Native 0.88.1 内置的渲染器也是 19.3.0。react-native-safe-area-context5.10.1(PR 为 5.11.0):Expo SDK 58 要求~5.10.1;5.11.0 还改了 Android 上的边距计算,会改变页面留白。@babel/core7.29.13(PR 为 8.0.9):babel-preset-expo58 的插件要求@babel/core ^7,换成 8.0.9 后测试和 Metro 打包都加载不了这个预设。等 Expo 发布支持 Babel 8 的预设后再升。为适配新版本做的改动
TAKE_OPUS_BITRATE_BPS改为 96 kbit/s 后,编出的包与升级前逐字节相同。上传给内置服务的长录音和录音缓存升级前后都是约 20 kbit/s,没有改。staticVCRuntime移到tauri.conf.json的 build 块)。tauri依赖表写上 CLI 管理的特性,构建时不再改动Cargo.toml。CLI 会不分目标平台合并各表的特性(tauri-apps/tauri#16250,上游还没修),让 Linux 的 deb、rpm 多出 appindicator 依赖、Windows 交叉构建失败,所以 macOS 与 Windows 的表改为继承工作区的tauri。以后升级tauri要同时改根Cargo.toml和apps/desktop/src-tauri/Cargo.toml,bundle.rs的测试会检查两处版本一致。这些改动都有回归测试(
crates/voltip-media/tests/decode.rs、crates/voltip-media/src/opus.rs、crates/voltip-core/src/runtime/take_codec.rs、apps/desktop/src-tauri/tests/bundle.rs、apps/mobile-rn/plugins/*.test.js、scripts/release/test_*.py);macOS 状态栏按钮的 action 由scripts/smoke-tray-macos.sh的托盘冒烟覆盖。没有删除、跳过或放宽测试。文档同步更新了docs/dictation.md、docs/acceptance.md、docs/mobile-rn.md、docs/architecture.md和docs/runbook.md;docs/site里没有受影响的内容。用户能看到的行为
会变的(都已确认接受):
.aac文件的读取进度能到 100%;导入的 Opus、WebM(Opus)解码更接近原文件。tauri-apps/tray-icon#365),tray-icon 0.25.1 修了 macOS 27 吞掉菜单栏图标左键单击的问题,升级后单击、双击应按设计工作。没有实测,见下面的清单。macOS 15 上不变。保持不变的:
验证
make verify在干净的 HEAD 上通过(22 个 gate 都是 exit 0)。cargo clippy --workspace --all-targets -- -D warnings通过;cargo test --workspace --all-targets只有 main 上本来就有的两处失败(voltip-relay --test socket、voltip-transport --test link,0.3.0 之后另行修复)。make linux-x64:AppRun 仍是固定版本,AppImage 的 575 项都通过权限检查,deb、rpm 都不依赖 appindicator。需要在真机上验证
托管 CI 只有 macOS 15、Windows Server 2025 和 Android 模拟器,下面这些需要在真机上看: