Skip to content

fix(deploy): 每次部署重建 shell dist,杜绝陈旧复用(#73) - #74

Merged
HandyWote merged 1 commit into
m0/devfrom
m0/issue-73
Sep 9, 2026
Merged

fix(deploy): 每次部署重建 shell dist,杜绝陈旧复用(#73)#74
HandyWote merged 1 commit into
m0/devfrom
m0/issue-73

Conversation

@HandyWote

Copy link
Copy Markdown
Contributor

背景

provisionAllapps/shell/dist 一旦存在就跳过 vite build、直接 cp 复用旧产物,源码变更被静默丢弃。真机实证:PR #72 合并后重部署,线上壳 bundle hash 与修复前完全相同(未带新实现)。另有注释声称支持 FORCE_BUILD,但代码中不存在该机制。

修法

删除 dist 复用捷径:每次部署都重建 shell(vite build ~2s;幂等语义由 wrangler deploy/路由幂等保证,部署器职责=始终搬运当前源码树)。

改动文件

文件 改动
deploy/cloudflare/src/assemble.ts 删除 existsSync(shellDist) 条件构建捷径 → 无条件构建后 cp 到 outDir/assets/shellprovisionAll options 新增 buildShell?: (rootDir) => Promise<void> 注入口(默认 pnpm --filter @unself/shell build);修正 JSDoc/文件头 FORCE_BUILD 与 dist 复用措辞
deploy/cloudflare/test/assemble.test.ts 新增 provisionAll 用例:mkdtemp 临时 rootDir + 预置陈旧 dist(stale.marker + 旧 index.html),注入 fake buildShell 重建新产物,断言 assets/shell 含新产物且无陈旧残留
deploy/cloudflare/src/steps.ts runNineSteps 转发 buildShell 注入口(与既有 putSecret/resolveZone 同模式)——#73 语义变化后仍保持注入模式一致
deploy/cloudflare/test/steps.test.ts 注入快速 fake buildShell(真实 vite ~4.4s/次,每次部署重建后套件必超时;fake 写最小 dist 产物)

说明:brief 允许范围内最小适配——assemble.ts 单点改动会令 runNineSteps 全部用例真跑 vite(分支 C 两次构建 ~9s > 5s 超时),故按步骤注入模式转发并注入 fake,测试行为不变、套件由 ~44s 降至 ~1.5s。

验收对照表

# 验收标准 结果
1 测试:dist 预先存在(含陈旧标记)→ 部署产物反映当前源码;破坏性回验:注入捷径恢复 → 红;还原 → 绿 ✅ 用例 provisionAll(③ shell 每次部署重建,#73) 通过(69/69)。破坏性回验:条件构建恢复时 expect(buildCalled).toBe(true) 红(AssertationError: expected false to be true,assemble.test.ts:219);还原后绿
2 三件套绿 pnpm -r typecheck 全过;pnpm -r test 全过(deploy/cloudflare 69、apps/shell 41、modules/hello 12 等);pnpm -r build exit=0
3 PR 中文描述 + 验收对照表,base m0/dev,rebase 线性,不合并 ✅ 本 PR;分支基于 origin/m0/dev(082ee78),线性单 commit 26f9e4d,未合并

provisionAll 中 apps/shell/dist 一旦存在即跳过 vite build、直接 cp 复用旧产物,
源码变更被静默丢弃(真机实证:PR #72 合并重部署后线上 bundle hash 未变化)。

- 删除 dist 复用捷径:每次部署无条件重建 shell,部署器职责=始终搬运当前源码树;
- 新增 buildShell 注入口(同 steps.ts putSecret/resolveZone 模式),测试注入 fake 避免真实 vite;
- runNineSteps 转发 buildShell;steps.test.ts 注入快速 fake(真实 vite ~4.4s/次会使套件超时);
- 修正 provisionAll JSDoc 与文件头注释中 FORCE_BUILD/dist 复用措辞;
- 新增 provisionAll 用例:预置陈旧 dist + stale.marker,断言新产物入 assets/shell 且无陈旧残留。

Signed-off-by: HandyWote <huangyinghui01@corp.netease.com>
@HandyWote
HandyWote merged commit ae2e9b7 into m0/dev Sep 9, 2026
1 check passed
@HandyWote
HandyWote deleted the m0/issue-73 branch September 9, 2026 01:52
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.

1 participant