desktop-cc-gui构建发布完全指南pnpm workspace、macOS签名与GitHub Actions CI详解【免费下载链接】desktop-cc-guiMulti-engine AI coding desktop client (Tauri). Claude Code, Codex, Gemini, OpenCode, DeepSeek Harness and more in one GUI.项目地址: https://gitcode.com/zhukunpenglinyutong/desktop-cc-guidesktop-cc-guiCC GUI是一个基于 Tauri 2 React Rust 的开源多引擎 AI 编程桌面客户端把 Claude Code、Codex 等命令行 AI 引擎装进统一的图形界面。本文带你完整看懂它的构建发布体系pnpm workspace 工作区如何管理依赖、macOS 签名与公证如何跑通、GitHub Actions 一条流水线如何产出三平台安装包并发布自动更新。为什么一个桌面 AI 编程客户端需要完整的发布体系 ️CC GUI 用 Tauri 2 开发Rust 后端 前端 UI要同时交付 macOS、Windows、Linux 三端还要过系统安全关卡、支持应用内自动更新。这套体系涉及三件事依赖管理前端用 pnpm workspace内置一个插件 SDK 子包签名与公证macOS 必须 Developer ID 签名 公证Windows/Linux 依赖 Tauri 的 minisign 签名文件CI 流水线手动触发的 GitHub Actions 工作流完成校验、三平台构建、聚合发布和版本号自动递增。下面逐一拆解。一、pnpm workspace 工作区结构两个包如何协作1.1 根包应用本身根目录 package.json 定义了主包ccgui-next有两个值得注意的设计锁定包管理器packageManager: pnpm10.29.3保证所有人和 CI 用同一个 pnpm 版本避免依赖漂移工作区依赖ccgui/plugin-sdk: workspace:*见 package.json表示直接从本仓库的工作区包引用插件 SDK而不是去 npm 拉取——本地改 SDK应用立即生效。1.2 工作区声明与供应链加固pnpm-workspace.yaml 声明工作区成员为packages/*目前只包含自研插件 SDKpackages/plugin-sdk/插件开发可参考 docs/plugin-development-guide.zh-CN.md。更亮眼的是文件里的供应链加固配置配置作用minimumReleaseAge: 10080延迟安装发布不足 7 天的新包版本让恶意发布有时间被下架patchedDependencies给framer-motion12.43.0打补丁patches/framer-motion12.43.0.patch修复拖拽回滚卡顿问题trustPolicy: no-downgrade拒绝信任信号签名/溯源变差的依赖解析结果对新手来说记住一点pnpm install会同时安装根包和子包依赖共享一个 pnpm-lock.yaml 锁文件这是发布可复现的基础。1.3 常用脚本速查根 package.json 中的核心脚本命令干什么pnpm dev以开发模式启动 Tauri 应用Vite HMRpnpm build类型检查tsc Vite 前端打包pnpm test运行 Vitest 单元测试pnpm build:mac调用本地 macOS 签名构建脚本./scripts/build-signed-macos.shpnpm build:mac:skip-notarize同上但跳过公证适合本地快速出包二、Tauri 配置版本号与签名信息都在这一个文件发布流程的核心配置集中在 src-tauri/tauri.conf.json应用身份productName: CC GUI、version: 1.0.3、identifier: com.zhukunpenglinyutong.ccgui——三者分别决定应用名、升级判断和 Windows NSIS 升级替换逻辑打包策略tauri.conf.jsontargets: all全平台打包createUpdaterArtifacts: true表示每次构建都额外产出自动更新用的签名压缩包macOS 签名身份signingIdentity: Developer ID Application: kunpeng zhu (RLHBM56QRH)构建机证书库里必须存在这条身份才能签名更新器插件tauri.conf.json内置 minisign 公钥和latest.json地址客户端后台轮询该文件判断新版本。Windows 端另有 src-tauri/tauri.windows.conf.json通过 CI 的--config参数合并进主配置用于内嵌 WebView2 引导程序保证老系统上首次运行能自动装 WebView2。 版本号是三处同步的package.json、tauri.conf.json、src-tauri/Cargo.toml。发布前手动 bump发布后 CI 会自动递增见第四节。三、macOS 签名与公证安装包如何过 GatekeepermacOS 分发第三方应用必须完成三步签名codesign→ 公证notarize→ 装订staple。CC GUI 的 CI 在 macOS 构建任务里完整实现了这条链对应 release.yml 的几个步骤导入签名证书从仓库 Secrets 取出 base64 的.p12证书APPLE_CERTIFICATE_P12解码后导入临时钥匙串build.keychain并用security set-key-partition-list放行 codesign 访问配置公证凭据用 Apple API KeyKey ID / Issuer /.p8私钥执行xcrun notarytool store-credentials保存公证 profile构建应用release.yml执行pnpm exec tauri build --bundles app,dmg。因为无头headlessCI 机器上 DMG 打包偶发失败工作流做了最多 3 次重试失败才判错——配合 Rust 缓存第二次重试只需增量编译公证并装订release.ymlxcrun notarytool submit --wait等待 Apple 校验通过再xcrun stapler staple把公证票据打进 DMG离线环境也能验证。本地开发时只需在 Mac 上执行pnpm build:mac它会走仓库内置的build-signed-macos.sh脚本完成同样的签名流程没有公证环境可用pnpm build:mac:skip-notarize快速出包自测。四、GitHub Actions 发布流水线逐步拆解整条流水线定义在 .github/workflows/release.yml采用手动触发workflow_dispatch需要填入版本号作为门禁。整体是 5 个 job 的流水线4.1 preflight发版前置校验防呆第一关release.yml 里的 preflight 任务做三件事任一不过就快速失败版本号必须符合X.Y.Z格式输入版本必须与src-tauri/tauri.conf.json中的version完全一致远端不能已存在v{版本}tag——防止同一个版本发布两次。这一步避免了点了运行就把 main 分支当前内容按错误版本发布出去的经典事故。4.2 macOS双架构矩阵构建release.yml 用 matrix 策略并行构建两个版本Runner架构产物macos-latestApple Siliconaarch64签名 DMG 更新包macos-15-intelx86_64签名 DMG 更新包环境准备很规范pnpm/action-setup Node 20启用 pnpm 缓存 Rust stable swatinem/rust-cache按平台-架构划分缓存键。依赖安装统一用pnpm install --frozen-lockfile --ignore-scripts保证与锁文件一致且不执行可疑的安装脚本。每个架构的产物包含三类文件ccgui_{版本}_{架构}.dmg分发给用户的安装包ccgui_{架构}.app.tar.gz自动更新器下载的压缩应用包ccgui_{架构}.app.tar.gz.sigminisign 签名更新器校验用。4.3 LinuxAppImage 构建与 Wayland 库裁剪Linux 任务release.yml在ubuntu-24.04上先安装 webkit2gtk、GTK3 等 Tauri 依赖构建--bundles appimage。有一个细节特别值得学习打包进 AppImage 的 Wayland 客户端库会与宿主机系统库冲突导致崩溃。流水线用 scripts/prune-appimage-wayland-libs.mjs 把 AppImage 解包、删除usr/lib下所有libwayland-*、再重打包。因为裁剪后原签名失效CI 还会用 Tauri signer 对裁剪后的镜像重新签名release.yml。4.4 WindowsNSIS 安装包Windows 任务release.yml执行pnpm exec tauri build --config src-tauri/tauri.windows.conf.json --bundles nsis产出带 WebView2 引导程序的.exe安装包及.sig签名文件。4.5 release聚合产物并发布release job 等三个平台全部成功后运行依次完成下载全部产物macOS 双架构、AppImage、NSIS到release-artifacts/生成latest.json按 Tauri v2 更新器清单格式为每个平台填入下载 URL 和签名自动生成发布说明从上一个 tag 到当前提交的 conventional commits 中把feat/fix/perf前缀的提交归类为 New Features / Fixes / Performance Improvements创建 Releasegh release create v{版本}上传全部资产自动 bump 版本号并开 PR按十进制进位规则递增1.0.9 → 1.1.01.9.9 → 2.0.0同时改package.json、tauri.conf.json、Cargo.toml三处推分支并gh pr create提交人工合并release.yml。一个真实踩过的坑写在了工作流注释里GitHub 会把资产名中的空格替换为点CC GUI_1.0.1_x64-setup.exe变成CC.GUI_...latest.json必须指向改名后的 URL否则更新器下载 404——生成逻辑中专门做了asset_name()替换release.yml。五、自动更新通道latest.json 背后的机制 把前面内容串起来createUpdaterArtifacts: true让每次构建产出带.sig的更新包 → 发布任务把所有平台的 URL 签名写进latest.json并上传 → 已安装客户端按 tauri.conf.json 中配置的 endpoint 轮询latest.json→ 发现新版本后下载、校验 minisign 签名、静默替换。这也解释了为什么签名私钥TAURI_SIGNING_PRIVATE_KEY是整条流水线的关键 SecretmacOS、Linux、Windows 三个构建 job 都注入了它任何一端签名失败都会阻断发布。六、本地跑起来三步快速开始 想自己编译按 README.zh-CN.md 的步骤1. 准备环境Node.js 20、pnpm 10、Rust stable再按系统装 Tauri 前置依赖macOS 装 Xcode 命令行工具、Windows 装 C Build Tools、Linux 装 webkit2gtk。2. 克隆并安装依赖git clone https://gitcode.com/zhukunpenglinyutong/desktop-cc-gui cd desktop-cc-gui pnpm install3. 启动或构建pnpm dev # 开发模式 pnpm build # 前端打包 pnpm build:mac # macOS 签名构建需在 macOS 且有证书总结这套发布体系做对了什么✅版本门禁手动触发 版本号三处比对 tag 查重杜绝误发✅工作区依赖插件 SDK 走workspace:*供应链配置发布年龄门槛、no-downgrade、补丁防投毒✅macOS 合规签名 → 公证 → 装订三步齐全DMG 打包失败自动重试 3 次✅Linux 稳定性裁剪冲突 Wayland 库并重签名✅发布自动化latest.json自动生成、发布说明从提交历史提炼、版本号自动 bump 开 PR。理解这条流水线你也就掌握了 Tauri 桌面应用三平台构建 签名公证 自动更新的完整范式。【免费下载链接】desktop-cc-guiMulti-engine AI coding desktop client (Tauri). Claude Code, Codex, Gemini, OpenCode, DeepSeek Harness and more in one GUI.项目地址: https://gitcode.com/zhukunpenglinyutong/desktop-cc-gui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
AI短视频怎么批量管理?脚本、素材、生成任务和版本的衔接方法 同一条视频,策划、设计、生成、剪辑和发布看到的信息经常不一样。策划改了脚本,设计换了商品图,生成人员提交了几次任务,剪辑拿到的是群里发来的链接。到了发布环节,大家还要重新确认到底用哪一版。
这不是某个人没整理… · 2026/9/25 21:02:42
电动、手动、手自一体开窗器:三步选型决策路径 电动、手动、手自一体,这三种窗控控制方式,在不少采购场景中会被默认为一条 “档次线”:手动低、电动中、手自一体高。这其实是采购视角的惯性认知,并非科学选型视角。选型真正要回答的问题,不是 “哪一种方案更好”&a… · 2026/9/25 21:02:36
华为Atlas 300V 24G部署YOLOv5实战:从ONNX转换到ACL推理 最近群里好几个朋友都在折腾 Atlas,开口就是两个问题:Atlas 300V 24G 是运算加速卡吗?Atlas 部署 YOLO 到底怎么搞?我一开始觉得这问题挺基础,结果发现不少人把 Atlas 当成一块普通 GPU 来理解,然后在驱动安… · 2026/9/25 21:02:30
直播流协议直采技术:绕过录屏限制获取原画无水印视频 1. 这不是“录屏软件”,而是一套面向内容创作者的直播信号捕获系统你刷到过那种视频吗?某位游戏主播刚打完一场巅峰对决,5分钟内全网就出现了带完整高光时刻、无平台水印、画质和原直播一模一样的切片;或者某位知识类UP主深夜开播… · 2026/9/25 21:40:04
VMnet0消失原因与修复:Windows NDIS驱动冲突解决方案 1. 问题本质与真实场景还原:这不是“网卡丢了”,而是桥接通道被系统级策略掐断了你打开 VMware Workstation 的“虚拟网络编辑器”,点开“更改设置”后,发现本该出现在列表顶部的VMnet0(桥接模式)神秘消失—… · 2026/9/25 21:39:58
腾讯云WorkBuddy国际版与国内版深度对比:架构差异与海外配置实战 1. 从代理商视角看WorkBuddy双版本的真实差异做腾讯云国际站代理这几年,被问得最多的问题之一就是:“WorkBuddy到底用国际版还是国内版?”这个问题看似简单,但背后牵扯到账号体系、网络链路、数据合规、功能完整度、计费方式等一连… · 2026/9/25 21:39:58
5分钟定位局域网设备IP地址的实战指南 1. 这不是网络故障,是日常刚需:为什么“找IP”这件事值得单独写一篇干货你刚把新买的NAS接进客厅路由器,想用手机APP管理它,结果卡在登录页——提示“无法连接到设备”。你翻出说明书,发现第一步就是输入“设备的IP地址… · 2026/9/25 21:39:45
抓包分析器 Day 25:基于 WebSocket 的实时 Web 流量大盘与拓扑画布 抓包分析器 Day 25:基于 WebSocket 的实时 Web 流量大盘与拓扑画布今天是抓包分析器(PacketAnalyzer CLI)实战开发的第二十五天。
在前面的二十多天里,我们的系统主要以命令行 CLI 和终端 TUI(Ratatui)作为… · 2026/9/25 21:39:39
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37