Skip to content

ci(desktop): 桌面预览发行手动工作流 / add manual desktop preview release workflow - #32

Merged
Qiuner merged 9 commits into
Qiuner:masterfrom
ruijayfeng:feat/desktop-release-ci
Sep 23, 2026
Merged

Qiuner merged 9 commits into
Qiuner:masterfrom
ruijayfeng:feat/desktop-release-ci

Conversation

@ruijayfeng

@ruijayfeng ruijayfeng commented Sep 22, 2026

Copy link
Copy Markdown
Contributor

Closes #18(Intel 缺口按 issue 完成标准如实保留)

按已确认的方案实现,全部约束落实:

  • 手动、不发布:仅 workflow_dispatch;无 Release/Publish 步骤,产物只进 artifact。
  • 架构不凭标签:每个 job 开始断言 uname -m + node -p process.arch(Windows 另加 PROCESSOR_ARCHITECTURE/RUNNER_ARCH)与矩阵目标一致,不一致立即失败。macos-15 的 arm64 归属以首跑守卫输出为准,通过后已在专项文档固定。
  • 分平台各自验证:Windows 跑现有 verify.ps1(安装提取、外部链接、隔离数据、单实例、退出清端口);macOS 跑 verify-darwin.sh(含 fix(desktop): 构建与验证拒绝 Rosetta 翻译环境 / reject Rosetta-translated macOS builds #28 的 Rosetta 拒绝门禁)。任何一方通过不替代另一方。
  • 解包冒烟:Windows 额外从 qcode-windows-x64.zip 解包直接启动 QCode.exe,轮询 token 化 browser-url.txt 并请求完整 URL(200/303),终止后断言端口释放;macOS 解包后把 app/ 交给 verify-darwin.sh,并 shasum -c SHA256SUMS.txt
  • darwin-x64 未覆盖:汇总 job 固定输出未覆盖声明,无 Rosetta 代产。
  • 临时目录与白名单QCODE_DATA_HOME/隔离数据/解包全部位于 RUNNER_TEMP;artifact 路径为明确白名单(qcode-*.zipqcode-setup-x64.exeSHA256SUMS.txt),if-no-files-found: error

限制:自动冒烟不替代 #19 的真实模型与干净机器人工验收;本 PR 不配置任何自动触发。

fork 首跑证据(矩阵全绿)

完整运行:https://github.com/ruijayfeng/agent-isles/actions/runs/35699586487(head f778d56;fork 上执行,本 PR 无上游 Actions 权限)

  • 架构守卫实测macos-15runner.arch=ARM64uname -m: arm64process.arch=arm64windows-2022(Microsoft Windows Server 2022)→ runner.arch=X64uname -m: x86_64PROCESSOR_ARCHITECTURE=AMD64。macOS arm64 标签据此固定为 macos-15
  • Windowsverify.ps1 全过(安装提取、无外部链接、认证页面、正常/崩溃清理、单实例、原生模块、迁移/冲突),解包 ZIP 直接启动 QCode.exe,跟随 token 认证跳转得 200,终止后端口释放断言通过。
  • macOS:解包 ZIP 交 verify-darwin.sh 全过(原生架构、冒烟就绪、退出清理、单实例、原生模块、迁移/冲突),shasum -c SHA256SUMS.txt 通过。
  • 产物windows-x64-preview 287,523,735 B、macos-arm64-preview 139,974,843 B(ZIP / 安装包 / SHA256SUMS 白名单,if-no-files-found: error)。
  • 首跑抓到并修复两个真实缺陷(各自独立提交):
    1. embedNodeRuntime 只拷 process.execPath——官方 darwin Node 动态链接 libnode.<abi>.dylib,产出包内 node 直接 Abort trap(本机静态 Node 构建从未暴露);修复为随带 runtime/libnode.*.dylib
    2. Launcher.swift 冒烟模式数据目录冲突走 NSApp.terminate(nil) 静默退出 0,verify 的冲突断言形同虚设;修复为 stderr 输出原因并 exit(1)
  • darwin-x64 未覆盖:汇总 job 固定输出未覆盖声明,无 Rosetta 代产;上游仓库内首跑需维护者(admin)触发。

ruijayfeng and others added 9 commits September 22, 2026 10:24
Qiuner#18 确认约束:仅 workflow_dispatch,不自动发布;windows-2022 /
macos-15 矩阵,job 开始断言 uname -m 与 process.arch 与目标一致;
复用现有打包与验证脚本,并从解包 ZIP 直接启动做原生冒烟;
上传 ZIP / 安装包 / SHA256SUMS,runner 数据全部隔离于临时目录;
汇总 job 如实记录 darwin-x64 未覆盖,禁止 Rosetta 代产。
…ase workflow

GitHub runner 默认不带 Godot 导出模板,build:world 会失败;
Windows/macOS 两侧均下载官方 sha256 校验的 tpz 并只解出
web debug/release 与 nothreads 变体,另断言 index.wasm 存在。
…plates

Godot 4.7.2 GitHub release 无 tpz 的 .sha256 伴生资产(404 返回网页),
改用 release 附件 SHA512-SUMS.txt 中导出模板包的官方哈希直接钉死。
…pansion and 303

首跑矩阵暴露三处:Godot macOS 资产实名带 macos. 前缀(404);
shasum -c 行误用单引号阻止变量展开且校验相对路径(本就不可用),
统一改为双引号全路径并以官方 SHA512-SUMS.txt 钉死;
pwsh 7 Invoke-WebRequest 对 303 抛异常,加 -SkipHttpErrorCheck
后按状态码判定。verify.ps1 与安装提取冒烟本身已全过。
… handling

verify-darwin.sh 期望含 app/ 的 out 目录,而 zip 根即 app/,
传 $work 而非 $work/app;Windows 冒烟改为跟随 token 认证
303 跳转并断言最终 200,顺带验证完整认证流。
macOS 发行 CI 首跑发现:embedNodeRuntime 只拷 process.execPath,
官方 darwin 发行版 node 动态链接 libnode.<abi>.dylib(rpath 含
@loader_path),单独拷出的二进制在包内 Abort trap。
构建用 node 静态链接时 lib 目录无匹配自然跳过(本机 v26 验证零拷贝)。
修复后由 desktop-release-preview macOS job 复验。
…nflict

macOS 发行 CI 复验暴露:resolveDataHome 抛错路径统一走
NSApp.terminate(nil),冒烟模式下冲突检测退出码为 0,
verify-darwin 的迁移冲突断言形同虚设。
smoke 分支改为 stderr 输出原因并 exit(1);GUI 模式行为不变。
本机 swiftc 编译复现验证:冲突场景由静默 0 修复为 1 + 中文错误。
…for release CI

矩阵两 job 全绿(架构守卫、双平台 verify、解包冒烟、产物上传),
状态转已实现待验收;如实记录首跑发现并修复的两个缺陷。

@Qiuner Qiuner left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

已复核最新提交与 fork 首跑证据:workflow 仅手动触发、不发布;架构守卫、Windows/macOS 独立矩阵、Godot 模板哈希、解包 ZIP 冒烟、认证跳转、端口清理和白名单 artifact 均有覆盖。两处首跑真实缺陷修复(darwin libnode.*.dylib 随包、macOS smoke 冲突改为非零退出)与验证记录一致。

保留限制:darwin-x64 未覆盖,不用 Rosetta 代产;自动冒烟不替代 #19 的真实模型和干净机器人工验收。批准并建议转 Ready;合并后由维护者从主分支手动触发 workflow 做上游首跑。

@Qiuner
Qiuner marked this pull request as ready for review September 23, 2026 00:25
@Qiuner
Qiuner merged commit 6cd157e into Qiuner:master Sep 23, 2026
3 checks passed
@ruijayfeng
ruijayfeng deleted the feat/desktop-release-ci branch September 23, 2026 00:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Maintenance]: 增加桌面便携包构建与冒烟验证工作流

2 participants