从代码到商店:Mindwtr多平台发布、性能预算与900+核心文件测试体系如何运转
【免费下载链接】MindwtrGet tasks and ideas out of your head. A free GTD to-do app for desktop and mobile. Works offline, no account needed项目地址: https://gitcode.com/gh_mirrors/mi/Mindwtr
Mindwtr 是一款免费的 GTD 待办应用,支持桌面与移动端、离线可用、无需账号。除了功能本身,这个项目真正值得学习的,是它如何用一套可复制的工程体系,把同一份代码送上 Windows、macOS、Linux、iOS、Android 五大商店,同时用明确的性能预算和 900 多个核心源文件的测试矩阵守住质量底线。本文带你从源码角度拆解这套体系。
🧩 一个仓库,五家商店,28 条流水线
Mindwtr 采用 monorepo 结构,所有端共享同一个核心包:
| 目录 | 说明 |
|---|---|
| packages/core/ | 跨端业务核心,887 个 TS 源文件 |
| apps/desktop/ | Tauri 桌面端(Win/macOS/Linux) |
| apps/mobile/ | Expo 移动端(iOS/Android) |
| apps/android-native/ 与 apps/ios-native/ | 原生外壳与 Widget |
| apps/cloud/ | 自托管同步服务器 |
发布侧由 .github/workflows/ 下的 28 条 GitHub Actions 流水线驱动,其中 release.yml 是总入口:推送v*标签后,按开关分发给 Android、iOS、macOS、Windows、Linux 及各包管理器渠道,并支持staged/immediate两种发布模式。
⏱️ 性能预算:给每个热点操作定死毫秒上限
在 docs/performance/budgets.md 中,每个关键操作都有显式的毫秒级预算,并且用 1k / 10k / 50k 任务三档数据规模测量。举几例:
| 操作 | 1k 任务 | 10k 任务 | 50k 任务 |
|---|---|---|---|
| Focus 列表派生 | 40ms | 500ms | 2500ms |
| 搜索/过滤/排序 | 30ms | 130ms | 650ms |
| 全量快照合并 | 150ms | 1500ms | 7500ms |
| 桌面 ListView 渲染(5k 任务) | 500ms | — | — |
这套预算有两层防线:绝对值抓明显回退,增长护栏(Growth Guard)抓 O(n²) 这类在小数据量上测不出来、数据一涨就失控的坏扩展。运行一条命令bun run test:perf(见 package.json 脚本定义),CI 的 performance 任务还会把每次通过运行的真实耗时上传为工件,无需本地重跑即可看到。
更精细的启动基线(浏览器、原生设备、真机 Android 冷启动 TTID/首内容绘制)则记录在 docs/performance/baselines.md,由每周定时任务 performance-baselines.yml 采集 30 个样本。
🧪 900+ 核心文件的测试体系怎么分层
packages/core里 887 个 TS 源文件中,有444 个是*.test.ts测试文件,几乎每个模块都自带同目录测试。整个仓库还有 785 个.test.ts与 346 个.test.tsx测试文件,覆盖所有端。测试按职责分层:
- 单元/契约测试:如
native-host-contract-*.test.ts,逐条校验原生外壳与核心命令的契约,防止移动端原生化时行为漂移; - Parity 测试:
*-parity.fixtures.json夹具驱动,保证桌面与移动端对同一输入输出一致; - 性能预算测试:performance-large-store.test.ts 生成大规模数据仓库压测热点路径;
- 治理测试:
bun run test:governance对发布脚本本身(商店提审、版本策略)做测试,"管发布的代码也要被测"。
根脚本bun run verify一次性串起类型检查、Lint、全量测试、治理测试、i18n 语言包一致性、同步字段一致性与文档检查,是合并前的完整体检。
🚀 商店灰度:5% → 20% → 50% → 100% 自动推进
发布不是"上传即完成"。docs/development/store-rollouts.md 定义了各商店的稳定发布策略:
- Apple:审核通过后按 1% → 2% → 5% → 10% → 20% → 50% → 100% 七天自动分阶段;
- Google Play / Microsoft Store:从 5% 起步,每日 15:17 UTC 定时任务 rollout.yml 每天只推进一个档位(5% → 20% → 50% → 100%),新版本发布后至少观察 24 小时;
- 紧急制动:出现崩溃、数据丢失等严重问题时,可随时
halt暂停;被暂停的发布永远不会被定时任务自动恢复——宁可人工确认,不可机器猜测。
发布前还有一个"预检门":若任一商店仍有未收尾的灰度发布,release 流水线直接失败,把"忘记收尾"的代价从几小时构建降到一分钟。
小结:三句话记住这套体系
- 预算先行:热点路径没有毫秒预算就不能改,增长护栏防"小数据量假通过";
- 测试与代码同目录:444 个核心测试文件 + 跨端 parity 夹具,把多端一致性变成可执行的断言;
- 发布像生产系统一样管:灰度只进一格、暂停不自动恢复、预检门拦截遗忘。
如果你想动手体验,仓库是只读镜像,可执行git clone https://gitcode.com/gh_mirrors/mi/Mindwtr,然后从bun run verify开始感受这条验证链路。
【免费下载链接】MindwtrGet tasks and ideas out of your head. A free GTD to-do app for desktop and mobile. Works offline, no account needed项目地址: https://gitcode.com/gh_mirrors/mi/Mindwtr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考