Phaser 一键发布:发布前自动构建与打包(作者不 build、不打 ZIP) #481
Reference in New Issue
Block a user
Delete Branch "codex/publish-auto-build"
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?
解决什么
让作者不需要自己构建、也不需要打 ZIP:AGC 点一次发布,客户端负责装依赖、构建、打包、上传;网页端直接能看到、能玩。这一版先把 Phaser 4 + Vite 这条链路做通并验收,其余技术栈随后补。
主要行为
export_local_project_package变成发布前构建:已有可玩入口(game/index.html/dist/index.html)直接打包;否则解析game/(AGC 脚手架)或项目根的 npmbuild脚本,缺game/node_modules时先跑project.bootstrap(npm install),再复用project.verify的受控 npm 运行器执行npm run build(脚本白名单含build、禁止项目级.npmrc改写语义、有沙箱与超时),最后校验入口并打包。安装/构建失败返回带日志尾部的可操作错误,不回传本地路径。resolve_publish_build_plan:game 子工程优先并要求先装依赖、根 npm 工程回退、没有任何可构建工程时失败关闭。GET /api/game-distribution/releases/{gameId}(含尾斜杠)等价于index.html,所以入口填「根地址」在本地直连网关时也能玩(生产本来就由每游戏 origin 映射根路径);路由级用例同时覆盖 Cookie 拒绝门。验证
base: './',构建产物index.html323 B +assets/index-DZGg_tPs.js1,388,719 B)走完整发布链路:真实封面/截图直传 → 创建游戏/版本 → 上传 ZIP(370,969 B)→ 送审 → 管理员审核通过 → 网关index.html200、bundle 200、nosniff/CORP 正常 → 网页播放页在allow-scripts沙箱 iframe 内渲染出PHASER-PUBLISH-OK与可点击按钮(点击后计数生效)。npm run check:game-distribution-media-e2e新增E2E_PACKAGE_ZIP支持,可直接把真实构建产物接进这条可重复校验(断言从包内派生入口/资源,不再依赖 fixture 文件名)。cargo test -p api-server game_distribution(18)、AGCpublish_build_plan两条决策用例、AGC/root typecheck、npm run check:encoding、check:doc-index、check:rustfmt、全量npm test(401 文件 / 4436 用例)、npm run check:repository-ci -- origin/master HEAD全绿。project_verification_*用例同样失败),与本次改动无关;该路径由 CI 镜像(固定 node/npm)覆盖。后续(本 PR 不含)