PI-Desktop 跨平台打包与发布流水线全解析从版本 Tag 到三平台安装器的完整清单【免费下载链接】PI-DesktopLocal-first AI coding agent desktop: Electron Rust host core pi Agent Harness user-installable plugins项目地址: https://gitcode.com/GitHub_Trending/pid/PI-Desktop装到新版 PI-Desktop 只需点一次下载发版一侧却要同时产出 macOS 双架构、Windows 双形态、Linux 三格式共九个安装包还要逐个过签名、公证与兼容性检查。PI-Desktop 的跨平台打包与发布流水线把这件事压成一个动作推送一个vX.Y.Z版本 tag由 GitHub Actions 完成质检—并行构建—汇总发布产物连同自动更新 Feed 一并挂到 GitHub Release。一条版本 Tag 如何跑完全链路整条主线如下散在十几个文件里的版本号怎么一次改齐结论一条命令同步所有版本位预检不通过就拒绝打 tag。发版者只需执行node scripts/release.mjs 0.21.0 --tag脚本会遍历全部 workspace 包apps/、packages/、docs/及根目录的package.json同步根 Cargo.toml 的[workspace.package]、Cargo.lock 中host-core条目以及 protocol.ts 里的APP_VERSION常量。为什么打 tag 前还要查文档版本号散落十几处手改必然漏而 tag 不可撤销。release.mjs 因此先跑 check-release-docs.mjs 预检各语言 changelog 条目、README 里的发布行、随包发布的模型目录快照必须对齐任何一面对不上就拒发。提交与打 tag 的最后防线预检通过后脚本只按文件列表提交版本号变更随后打 tag打之前还会查本地与远端是否已存在同名 tag避免二次发版。为什么推 tag 还要先过一遍 CI 门禁结论tag 推送不会触发 CI所以 release.yml 自己重放了一遍出厂质检。门禁 job 在 Linux 上依次跑构建、类型检查、lint、全量单测和cargo test -p host-core任一红灯后续打包装机一律不启动——坏代码没有机会混进安装包。 这里还有个容易忽略的细节CI 与发布线统一使用 Node 24与 Electron 43 捆绑的运行时版本对齐保证质检时的环境就是用户机器上的环境。构建矩阵里藏着哪些防错配校验结论五条构建线并行、互不阻塞fail-fast: false每条线开工前先过两道校验。Runner 架构必须与目标一致应用内有一个 Rust 编写的宿主内核pi-desktop-host-core必须以与 Electron 壳相同的 CPU 架构原生编译。macOS 两条线与 Linux 两条线开工前先比对uname -m与期望架构防止ARM 的壳装着 x86 的内核这类错配。Windows 允许任意 runner 交叉构建故不做此项。tag 号必须与包版本对得上每条线还会比对 tag 号与apps/desktop/package.json的版本字段不一致直接终止并提示先跑版本升级脚本。三大平台的安装包凭什么开箱即用结论平台差异集中在一张表里每行对应一条构建线及其专属校验。平台Runner产物关键校验macOS arm64macos-15原生 Apple SiliconDMG ZIP签名 → 公证 → staple 装订 → 四重校验macOS x64macos-15-intel原生 IntelDMG ZIP同上Windows x64windows-latestNSIS 安装器 便携 ZIP双形态分别标记更新策略Linux x64ubuntu-22.04AppImage / deb / rpmglibc 地板校验 更新 Feed 存在性Linux arm64ubuntu-22.04-armAppImage / deb / rpm同上Feed 带-arm64后缀macOS 的签名、公证与装订tag 构建默认走签名通道CI 从 Actions secrets 注入开发者 ID 证书与 Apple 凭据。三个术语各管一段开发者 ID 签名相当于给应用盖身份证公证是提交 Apple 检测并换回一张无恶意代码票据staple 把票据缝进安装包用户首次启动无需联网也能通过 Gatekeeper。⚠️ 签名公证全程由看门狗脚本监控静默超时即倾泻诊断装订最多重试 6 次。签名后还要过四重校验verify-macos-release.shcodesign核对开发者 ID 身份与完整性、spctl确认 Gatekeeper 承认已公证、xcrun stapler validate验证 App 与 DMG 票据齐全任一不过就不许上传。Windows 双形态与免运行库Rust 侧车静态链接 MSVC 运行库干净系统免装 VC 组件即可启动本地服务。NSIS 安装器参与应用内自动更新便携 ZIP 则故意不写更新 Feed——更新时只在应用内提示并给出下载链接防止免安装版被自动更新偷装成安装版。Linux 的 glibc 地板与 RPM 审计glibc 是 Linux 的系统 C 库二进制若引用了更新版本的符号在老系统上会直接加载失败。构建刻意钉在ubuntu-22.04把地板压到 glibc 2.35覆盖 Ubuntu 22.04、Debian 12、Fedora 36每次构建后用objdump解析 host-core 的动态符号超出地板即判失败check-linux-host-glibc.mjs。rpm 还通过_build_id_links none关闭全局 build-id 软链避免与系统内其他应用冲突另有可手动触发的 linux-package.yml 工作流解包 rpm 逐条核对app.asar、宿主二进制、.desktop桌面项与 hicolor 图标的落位。更新 Feed 怎么分发到用户手里结论latest*.ymlFeed 与产物同传 Release应用内 electron-updater 据此发现新版本。macOS 两条线各产一份带架构标签的 Feed发布 job 先校验两者版本号一致再合并为单一latest-mac.ymlWindows NSIS、Linux AppImage、打包版 macOS 走完整应用内更新后台静默下载、提示重启安装、退出时兜底安装便携 ZIP 与 deb 走通知 链接模式只提示并给下载入口版本号带连字符如-beta的 tag 自动标记为预发布而更新器只跟踪最新稳定版。不想等流水线本机怎么最快出包结论每条本机出包命令都走同一套路——构建 workspace 依赖 →cargo build --release -p host-core→ 打包 agent-runtime 旁车 → electron-vite 构建前端 → electron-builder 出包产物统一落在apps/desktop/release/。目的命令快速冒烟--dir不压缩pnpm --filter pi-desktop/desktop pack本机完整包不签名pnpm --filter pi-desktop/desktop dist分平台产物pnpm --filter pi-desktop/desktop dist:mac:win/:linux同理macOS 签名 公证发行scripts/release-macos.sh需MAC_SIGNING_IDENTITY、APPLE_ID等环境变量没有证书时产物默认不签名——构建配置不内嵌证书身份任何人都能本地出包自测签名通道则要求本机架构与目标架构一致脚本会主动拒绝交叉尝试。核心思想整条流水线的本质是单一版本号输入机器负责把它变成三平台可分发的安装包而签名公证、glibc 地板、RPM 审计这些关卡都是在替未来的用户提前踩坑。延伸阅读06-release-runbook.md发布手册全文含构建线、包体积门禁与已知限制0289-signed-macos-github-releases.mdmacOS 签名发布决策0197-windows-portable-exe.mdWindows 便携版设计背景【免费下载链接】PI-DesktopLocal-first AI coding agent desktop: Electron Rust host core pi Agent Harness user-installable plugins项目地址: https://gitcode.com/GitHub_Trending/pid/PI-Desktop创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考