优化 AGC 发版脚本的测试:每次改代码都跑,并且不受渠道参数影响 #542
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
一句话
AGC 客户端(桌面 App)的安装包由同一个脚本生成,这个脚本现在有 5 个测试文件保护它,一共 62 个测试,跑完不到 1 秒。问题有两个:这 5 个测试只在 macOS 发版任务里跑,改坏脚本时提交代码不会报错;而且它读环境里的渠道参数,同一个测试在开发渠道能过、在正式渠道必挂。9 月 30 日凌晨的正式发版就是这样被卡住的,官网 macOS 版号停在 0.1.139。这个 Issue 要把这两件事一起改掉。
先把名词说清
apps/ai-game-creator-shell/scripts/build-release.mjs。它按平台和渠道决定安装包叫什么名字、更新地址写在哪里、清单里写什么版本。macOS 和 Windows 的安装包都由它产出。dev是开发版,release是正式版。AGC_UPDATE_CHANNEL。发版任务启动构建时把它传进去,脚本据此知道这次发哪个渠道。apps/ai-game-creator-shell/scripts/下的build-release.test.mjs、cargo-features.test.mjs、prepare-macos-codex.test.mjs、verify-updater-signature.test.mjs、macos-release-identity.test.mjs。它们校验发版脚本的行为,例如:给 Windows 目标生成的配置里该不该带 NSIS 安装钩子、macOS 首次安装包该选哪个文件、清单里该出现哪些平台。问题一:几乎没有人在跑这 5 个测试
nsis-toolset.test.mjs,不跑这 5 个。npm run check也不跑。问题二:测试读环境变量,结果随渠道变
测试要判断"这次是哪个渠道",办法是去读
AGC_UPDATE_CHANNEL,没有把渠道写死在自己的代码里。9 月 29 日有人加了一条新测试,断言"Windows 安装包里带有旧名字迁移钩子"。这个钩子只有开发渠道需要,因为开发版的显示名改过两次,正式版没改过。但这条测试没有写死渠道,于是:
Cannot read properties of undefined (reading 'nsis')。9 月 30 日凌晨 4 点的正式发版就死在这里:4:00 拉代码,4:01 装依赖,4:02 跑到这批测试就报错退出。没有编译任何东西,官网 macOS 版号因此没有更新。当时同一批测试里另外 4 个文件都是通过的,所以表面上像"代码坏了",实际是测试的假设和运行环境对不上。
要改成什么样
怎么算改完
AGC_UPDATE_CHANNEL的测试,新加的检查要能让 CI 报错。docs/【开发运维】本地开发验证与生产运维-2026-05-15.md里写明这 5 个测试在哪里跑、要传什么参数、归哪个平台管。这次先不改
相关
39823b05cdocs/project-memory/shared-memory/pitfalls.mdAGC 发版脚本契约门禁的设计问题:唯一执行点在 mac 线且输入被渠道参数污染to 改发版脚本时没有 PR 检查会红:这五个回归测试只被接进了 mac 管线(要从设计上修)改发版脚本时没有 PR 检查会红:这五个回归测试只被接进了 mac 管线(要从设计上修)to 优化发版脚本回归测试接入:每 PR 必跑 + 输入确定 + 防复发守卫优化发版脚本回归测试接入:每 PR 必跑 + 输入确定 + 防复发守卫to 优化 AGC 发版脚本的测试:每次改代码都跑,并且不受渠道参数影响