- gen-sw-precache.mjs post-build:按 dist 产物推导路由重写 dist/sw.js 预缓存段(AUTO 标记锚定;规则=顶层+/en/ 轨深度≤1、/admin 永不入 列)——新增顶层页自动进离线包,根治手工清单漏页维护债;实测 19 路由含 moments 双轨、admin 排除 - build.sh 守卫挂钩(守卫先行纪律);sw.js 源内兜底清单保留 - Sveltia 加 moments 集合:随手发瞬间(text/image 可选+hint 自查条 件必填、pubDate 日期件、tags、slug 日期模板)——管理后台从只管 照片扩到内容面第一步 验证: 产物 sw 19 路由断言全过;E2E 33/33 PASS;yaml 解析过;bash -n 过 Spec: none (离线包自动化+后台扩容,车道级交付) Co-authored-by: GLM-5.3
41 lines
2.1 KiB
Bash
Executable File
41 lines
2.1 KiB
Bash
Executable File
#!/bin/sh
|
|
# 构建管线(Phase 5c 裸 clone 改造):构建源 = origin/main 硬跟,非本地工作树。
|
|
#
|
|
# 为什么:此前直接构建 ~/Code/Github/my-blog 工作树——分支/未提交状态会
|
|
# 意外上线(Sveltia 冒烟期实测发生过);且 Sveltia 的 main 提交无法自动
|
|
# 发布。改为独立构建仓 fetch+reset 硬跟 main:线上=远端 main,确定性闭环。
|
|
# blog 仓已公开,匿名 fetch 无需凭据。
|
|
set -e
|
|
BUILD_REPO="$HOME/docker_apps/blog/build-repo"
|
|
STAGING="$HOME/docker_apps/blog/www-staging"
|
|
|
|
if [ ! -d "$BUILD_REPO/.git" ]; then
|
|
echo "[build] 首次克隆构建仓"
|
|
git clone https://git.wait4x.online/wait4x/blog.git "$BUILD_REPO"
|
|
fi
|
|
|
|
cd "$BUILD_REPO"
|
|
git fetch origin main
|
|
git reset --hard origin/main
|
|
git clean -fd --exclude node_modules
|
|
SHA=$(git rev-parse --short HEAD)
|
|
echo "[build] 构建源: origin/main @ $SHA"
|
|
|
|
pnpm install --frozen-lockfile >/dev/null
|
|
pnpm astro build
|
|
|
|
# 按页字体 CSS 子集化(车道 A 任务 1):裁 @font-face 声明数,构建仓与本地同链;
|
|
# 存在性守卫:新文件未推送到 main 前构建仓无此脚本,绝不让发布链因车道在途文件断掉
|
|
[ -f scripts/build-perf/subset-font-css.mjs ] && node scripts/build-perf/subset-font-css.mjs dist || echo "[build] subset 脚本未就绪,跳过"
|
|
# 首页阻塞 CSS 内联(车道 D):守卫先行同上——脚本未到 main 前绝不炸链
|
|
[ -f scripts/build-perf/gen-sw-precache.mjs ] && node scripts/build-perf/gen-sw-precache.mjs dist || echo "[build] sw-precache 生成器未就绪,跳过"
|
|
[ -f scripts/build-perf/inline-home-css.mjs ] && node scripts/build-perf/inline-home-css.mjs || echo "[build] inline-home 脚本未就绪,跳过"
|
|
|
|
echo "[build] rsync -> $STAGING"
|
|
mkdir -p "$STAGING"
|
|
rsync -a --delete "$BUILD_REPO/dist/" "$STAGING/"
|
|
ORIG="$HOME/docker_apps/blog/photos-originals"
|
|
if [ -d "$ORIG" ]; then rsync -a "$ORIG/" "$STAGING/photos-originals/"; fi
|
|
printf 'built %s at %s\n' "$SHA" "$(date -Is)" > "$STAGING/.build-stamp"
|
|
echo "[build] done: $(find "$STAGING" -name '*.html' | wc -l) html files @ $SHA"
|