#!/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 脚本未就绪,跳过" 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"