11name : Docs Backfill (on docs changes)
22
3+ # 2026-04-17 起从"GH runner 直连 Neon"改为"SSH 进自建服务器跑脚本"。
4+ # 原因:DB 从 Neon 迁到服务器自建 PG 后只绑 127.0.0.1:5432,不对公网暴露。
5+ # 设计权衡见 wiki Frontend-Auth-And-Admin / 后端 docs/database.md。
6+ #
7+ # Secrets 依赖:
8+ # SERVER_HOST / SERVER_USER / SERVER_SSH_KEY — SSH 远程登录三件套
9+ # (私钥生成方式 + 公钥已写入服务器 ~/.ssh/authorized_keys,见仓库 wiki)
10+
311on :
412 push :
513 branches :
@@ -21,57 +29,52 @@ concurrency:
2129
2230jobs :
2331 backfill :
24- # 防止 fork、限定 main、并避免机器人循环
32+ # 防止 fork、限定 main / feat/contributor 、并避免机器人循环
2533 if :
2634 (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/feat/contributor') &&
2735 github.actor != 'github-actions[bot]'
2836 runs-on : ubuntu-latest
29- permissions :
30- contents : write
31- env :
32- DATABASE_URL : ${{ secrets.DATABASE_URL }}
33- GITHUB_TOKEN : ${{ secrets.GH_PAT }} # 供脚本调用 GitHub API 提升速率
34- DOCS_DIR : app/docs
35-
3637 steps :
37- - uses : actions/checkout@v4
38-
39- # Enable corepack to ensure the exact pnpm version from package.json is used
40- - name : Enable Corepack
41- run : corepack enable
42-
43- - uses : pnpm/action-setup@v4
44-
45- - uses : actions/setup-node@v4
38+ - name : Run backfill on server via SSH
39+ uses : appleboy/ssh-action@v1.2.0
4640 with :
47- node-version : 22
48- cache : " pnpm" # 顺便启用 pnpm 缓存,加速
41+ host : ${{ secrets.SERVER_HOST }}
42+ username : ${{ secrets.SERVER_USER }}
43+ key : ${{ secrets.SERVER_SSH_KEY }}
44+ # 超时 15 分钟:backfill-contributors 要遍历所有 docs + 拉 GitHub API,
45+ # 大改动一次跑 3-5 分钟,留足余量
46+ command_timeout : 15m
47+ # set -euo pipefail + BRANCH 透传,脚本内任何一步失败都让整个 action fail
48+ envs : GITHUB_REF_NAME
49+ script : |
50+ set -euo pipefail
51+ BRANCH="${GITHUB_REF_NAME:-main}"
52+ cd /home/ubuntu/involution-hell-project/frontend
4953
50- # Verify pnpm version matches package.json packageManager field
51- - name : Check pnpm version
52- run : node scripts/check-pnpm-version.mjs
54+ # 1. 同步仓库到触发本次 workflow 的 commit
55+ git fetch --prune origin
56+ git checkout "$BRANCH"
57+ git reset --hard "origin/$BRANCH"
5358
54- - name : Install deps
55- run : pnpm install --frozen-lockfile
59+ # 2. 依赖和 Prisma client(frontend .env 里 DATABASE_URL 已指本地 PG)
60+ set -a && . ./.env && set +a
61+ pnpm install --frozen-lockfile
62+ pnpm prisma generate
5663
57- - name : Generate Prisma Client
58- run : pnpm prisma generate
64+ # 3. 给 docs 补 docId frontmatter(幂等;没新增就啥都不改)
65+ pnpm exec node scripts/uuid.mjs
5966
60- - name : Ensure docId frontmatter
61- run : pnpm exec node scripts/uuid .mjs
67+ # 4. 回填 contributors 并写 generated/doc-contributors.json
68+ pnpm exec tsx scripts/backfill-contributors .mjs
6269
63- - name : Backfill contributors & sync DB
64- run : pnpm exec tsx scripts/backfill-contributors.mjs
65-
66- - name : Auto-commit doc metadata (if any)
67- uses : stefanzweifel/git-auto-commit-action@v5
68- with :
69- commit_message : " chore(docs): sync doc metadata [skip ci]" # ← 防循环
70- file_pattern : " app/docs/**/*.md app/docs/**/*.mdx generated/doc-contributors.json"
71-
72- - name : Upload snapshot JSON
73- uses : actions/upload-artifact@v4
74- with :
75- name : doc-contributors-snapshot
76- path : generated/doc-contributors.json
77- if-no-files-found : ignore
70+ # 5. 自动提交 —— 仅当 MDX / JSON 有实际变动时才推
71+ if ! git diff --quiet -- 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json; then
72+ git config user.name "github-actions[bot]"
73+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
74+ git add 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json
75+ # [skip ci] 防止自提交再次触发本 workflow 死循环
76+ git commit -m "chore(docs): sync doc metadata [skip ci]"
77+ git push origin "$BRANCH"
78+ else
79+ echo "No metadata changes to commit."
80+ fi
0 commit comments