fix(ci): 全量刷新判定改为「非纯内容改动即全量」+ 刷新分批(又拍云 50/次)
上一版用「themes/layouts/assets 等 dirs 白名单」判全局,实测被绕过: build 2 的 diff 只有 scripts/purge_list.js(主题改动在上一个 commit), 判成非全局 → 只刷了 10 条固定入口页 → 文章页仍引用已被 --delete 删掉的 旧 page-only.min.1e47477b…(靠 CDN 缓存才 200,缓存一过期即 404)。 改法: - 判定反转:diff 只含 content/** 才算「纯内容改动」(走精细刷新), 其它一律全量刷 public 下所有 .html。 - 拿不到基线时:push 事件按全量(宁多刷不漏刷),定时任务只刷固定入口页。 - 输出一行 stderr 诊断(base/变更数/纯内容/全量/清单条数)便于事后核对。 - .cnb.yml:清单按 50 条/批 + 批间 6s 调用 upx purge(又拍云限制 单次 ≤50、每分钟 ≤600),并逐批打日志;不再一次性提交 1300+ 条。
This commit is contained in:
1 parent
5a50df6e23
commit
c1f9a0c6f0
2 files changed
+44
-18
No files matched your search
@@ -113,7 +113,10 @@
|
||||
}
|
||||
trap record EXIT
|
||||
|
||||
# 刷新清单 = 固定入口页 + 本次改动过的内容页,由 scripts/purge_list.js 生成。
|
||||
# 刷新清单 = 固定入口页 + (纯内容改动 ? 改动内容页 : 全站 HTML),
|
||||
# 由 scripts/purge_list.js 生成。判定理由见脚本头部注释:只要产物里的资源
|
||||
# 文件名可能变(非纯内容改动),就必须全量刷,否则旧 HTML 会引用被
|
||||
# `upx sync --delete` 删掉的旧指纹资源而断链。
|
||||
#
|
||||
# ★ 为什么必须刷固定入口页:只刷首页会让 sitemap.xml / rss.xml /
|
||||
# archives.html / posts.html 一直发 CDN 上的旧副本(2026-10-01 实测复现:
|
||||
@@ -121,14 +124,27 @@
|
||||
# ★ 为什么要动态部分:又拍云对 HTML 的 max-age 是 691200(8 天),
|
||||
# **不在清单里的页面即使源站已更新,CDN 也会发最多 8 天的旧副本**
|
||||
# (2026-10-05 实测:about.html 源站 47935B 已含新板块,CDN 仍发 41454B 旧版)。
|
||||
# 脚本靠 `git diff BASE HEAD` 找出改动的 content/*.md,按 slug/url/文件名
|
||||
# 推出输出页并校验 public/ 下确实存在,避免刷不存在的 URL。
|
||||
# 基线取 HEAD~1;拿不到(浅克隆等)就自动降级为只剩固定入口页。
|
||||
# 脚本靠 `git diff BASE HEAD` 找出改动文件:只含 content/ 时按 slug/url/
|
||||
# 文件名推出改动内容页并校验 public/ 下确实存在;否则(含主题/脚本等)
|
||||
# 全量输出 public 下所有 .html。
|
||||
# 基线取 HEAD~1,按 push / 定时任务分别兜底(见脚本头部注释)。
|
||||
node scripts/purge_list.js > /tmp/purge.txt || true
|
||||
# 兜底:脚本要是整个失败,至少保证固定入口页仍被刷
|
||||
[ -s /tmp/purge.txt ] || printf 'https://usj.cc/\n' > /tmp/purge.txt
|
||||
echo "刷新清单 $(wc -l < /tmp/purge.txt) 条"
|
||||
upx purge --list /tmp/purge.txt
|
||||
echo "刷新清单 $(wc -l < /tmp/purge.txt | tr -d ' ') 条"
|
||||
# ★ 分批:又拍云 URL 刷新「单次 ≤50 个、每分钟 ≤600 个」。清单在全量刷新时
|
||||
# 可达 1300+ 条,一次性提交会被拒(且 allowFailure 下静默失败)——2026-10-05
|
||||
# 实测踩到过。按 50 条/批 + 批间 6s(≈500 条/分钟)稳妥推进。
|
||||
TOTAL=$(wc -l < /tmp/purge.txt | tr -d ' ')
|
||||
awk -v n=50 'NR % n == 1 { c++ } { print > sprintf("/tmp/pchunk_%03d", c) }' /tmp/purge.txt
|
||||
n=0
|
||||
for f in /tmp/pchunk_*; do
|
||||
n=$((n + 1))
|
||||
echo " → 批次 $n($(wc -l < "$f" | tr -d ' ') 条)"
|
||||
upx purge --list "$f" || echo " ⚠️ 批次 $n 刷新失败(不阻断流水线)"
|
||||
sleep 6
|
||||
done
|
||||
echo "✅ 又拍云 CDN 刷新完成:$TOTAL 条 / $n 批"
|
||||
|
||||
- name: 刷新多吉云 CDN
|
||||
allowFailure: true
|
||||
|
||||
Reference in new issue
Block a user