Skip to content

fix: 发版回查窗口从 30 秒放到 4 分钟,别再误判 CDN 延迟 - #5

Merged
modusensus merged 1 commit into
mainfrom
fix/release-recheck-window
Nov 12, 2026
Merged

modusensus merged 1 commit into
mainfrom
fix/release-recheck-window

Conversation

@modusensus

Copy link
Copy Markdown
Member

问题

第一次实跑 v0.9.0 就翻车:npm publish 明明成功——

npm notice publish Signed provenance statement ...
npm notice publish Provenance statement published to transparency log
+ dsh-cura@0.9.0

紧接着的「发完回查」只等了 30 秒就判定失败,release job 被跳过,整个 run 红着。

根因

npm 自己在输出里写得很清楚:

Your package is being processed and may take a few minutes to become available.

我给的窗口是 10 × 3s = 30 秒,比 npm 自己声明的延迟还短。registry 的 CDN 边缘节点这时候还没拿到新版本,npm view 查不到,于是「发成功了」被读成「发失败了」。

而且 npm view 默认会走本地缓存,刚发完立刻查,很可能拿到的就是「没有这个版本」的旧缓存。

改法

项 之前 现在
窗口 10 × 3s = 30 秒 24 × 10s = 4 分钟
查询 npm view npm view --prefer-online
失败时的信息 只有一句 error 每次未命中打印「第 i/24 次没查到」

4 分钟是个折中:等太短会把 CDN 抖动当成发版失败(这次就是),等太久又把真失败拖成十分钟。

测试

新增三条断言,都盯着这次踩的坑:

  1. 窗口是分钟级且带 --prefer-online;
  2. 超时才失败,不是首次没查到就失败;
  3. 回查只在真上传过的那次跑(跳过 publish 时不该卡在回查)。

三条变异全部 EXIT=1,还原后 8 套全绿:

# 变异 结果
M6 窗口退回 10 × 3s 2 条红
M7 去掉 --prefer-online 1 条红
M8 去掉 if: published == 'true' 守卫 1 条红

遗留

v0.9.0 那个 run 是红的,但包已经发上去了(latest = 0.9.0,npm install dsh-cura@0.9.0 能装)。Release 也是之前手建的。所以这次不需要补发,只是把误判的判定条件修掉。

第一次实跑 v0.9.0 就翻车了:npm publish 明明成功(日志里 "+ dsh-cura@0.9.0"、
provenance 也发到了 sigstore),紧接着的回查只等了 30 秒就判定失败,
release job 被跳过,整个 run 红着。

npm 自己在输出里写了 "Your package is being processed and may take a few
minutes to become available"——30 秒窗口比它自己声明的延迟还短。

改法:
- 窗口 10 × 3s → 24 × 10s(4 分钟)
- 查询加 --prefer-online,绕过本地 CDN 缓存,否则查到的是旧缓存
- 每次未命中打印第几次重试,失败时能看出是"一直没上去"还是"最后才上去"

补三条断言盯着这件事:窗口是分钟级且带 --prefer-online、超时才失败而不是
首次没查到就失败、回查只在真上传过的那次跑(跳过 publish 时不该卡在回查)。

三条变异全部 EXIT=1:窗口退回 30 秒 / 去掉 --prefer-online / 去掉 if 守卫。
@modusensus
modusensus merged commit 53b1526 into main Nov 12, 2026
4 checks passed
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