支持矩阵
桌面平台边界
权威运行时是 Agent、文件、Git、PTY、供应商、权限和持久化的所有者。平台差异应封装在apps/desktop/src/platform 或共享 facade 中,不要在 UI 里复制业务分支。
发布通道
通道是编译期身份,不是运行时开关:
通道由 tag 推导(
*-preview.* / *-rc.* / 纯 semver)。发布流程会断言 tag、Cargo.toml、package.json 与 Packager.<channel>.toml 中的版本完全一致。运行时覆盖通道会被拒绝(release_channel_override_rejected)。
发布工作流
.github/workflows/release.yml 在 v* tag 上全自动运行,桌面端矩阵覆盖六个平台 / 架构组合:
移动端在同一个 workflow 中构建:Android APK + AAB,iOS XCFramework + 未签名模拟器应用。发布 job 要求全部前置 job 成功才会创建 release,因此不会出现部分矩阵的残缺发布。
工作流目前没有 macOS 公证和 Windows Authenticode 步骤。加入这两步之前,安装包会一直带有平台警告。
Android 构建
VIBEX_MOBILE_ANDROID_TARGETS(空格分隔)可覆盖 Debug ABI,Release 默认只构建 arm64-v8a。
发布工作流会调用 apps/mobile/scripts/sign-android-release.sh:APK 使用 zipalign + apksigner,AAB 使用 jarsigner。RC / 预览在没有仓库密钥时生成一次性的 vibex-ci 密钥;Stable 发布必须配置 VIBEX_ANDROID_KEYSTORE_BASE64 和 VIBEX_ANDROID_KEYSTORE_PASSWORD,可选 VIBEX_ANDROID_KEY_PASSWORD 和仓库变量 VIBEX_ANDROID_KEY_ALIAS(默认 vibex)。
iOS 构建
VibexFFI.xcframework 并生成 Xcode 工程。签名、Bundle identifier、真机 / 模拟器选择和分发凭据都由本机 Xcode 流程决定,不要把证书或 provisioning profile 提交到仓库。
桌面打包
自动更新
crates/app-update 实现签名更新:
- 从 GitHub Releases Atom feed 发现候选版本,按通道过滤。
- 校验
vibex-update.json的 Ed25519 签名,并对产物做 SHA-256 校验,URL 白名单限定在 releases 下载路径。 - 启动 30 秒后首次检查,之后 RC / 预览每 2 小时、Stable 每 6 小时检查一次,带抖动与退避。
- AppImage 走原地自我替换(带
.vibex-backup与pending-install.json崩溃恢复);deb、macOS app 和 NSIS 拉起系统安装器并要求重启。 - 发布流水线会把标记提交里的
docs/operations/release-notes-v<version>.md暂存为vibex-release-notes.md,文件缺失或没有## English段落时直接让发布失败;桌面端在限定大小和更短超时下从已验证的标签获取它,并按界面语言选择段落,依次回退到通用中文和英文。
移动端生命周期
移动端需要处理后台、网络切换、断线和重连。恢复时先用 Remote v2 获取权威会话和时间线,再订阅实时事件;不要用过期投影覆盖权威状态。自托管部署
推荐把服务绑定 loopback,再通过受控 HTTPS 反向代理或 Tailnet Serve 发布。Host 和 Origin 必须独立校验,CORS 不得使用*。网关只暴露协议与健康检查端点,不提供浏览器 UI 或业务 API。
详见自托管无头运行时与自托管 Relay。