Skip to content

Commit 8c0fc06

Browse files
fix(ci): workflow path 跟随 i18n URL 段化(修 sync-uuid 失败 + IndexNow 双语推送) (#331)
* fix(ci): workflow path 跟随 i18n URL 段化(app/docs → content/docs) i18n PR (#330) merge 后,sync-uuid workflow 在 main 上 fail: git add 'app/docs/**/*.md' 'app/docs/**/*.mdx' 因为 app/docs 已经 不存在,pathspec 不匹配任何文件,git 退出码 128 → workflow 失败。 backfill 脚本本身 OK(已成功生成 JSON),失败在最后 commit 那一步。 修: 1. sync-uuid.yml - paths trigger: app/docs/** → content/docs/** - git diff / git add 路径同步改 content/docs 2. content-check.yml - paths trigger: app/docs/** → content/docs/** 3. deploy.yml (IndexNow 推送) - 删掉旧 app/docs/(.*)/page.tsx 提取分支(不再有 page.tsx-as-content) - content/docs/(.*).mdx 提 base slug 时剥离 locale 后缀(.en/.zh), 拿到 canonical slug - 每篇文档推送 zh + en 两条 URL(/zh/docs/<slug> + /en/docs/<slug>), i18n 段化后这是两个独立 URL,IndexNow 要分别通知 - fallback URL 也改成双语 ($SITE_ORIGIN/zh + $SITE_ORIGIN/en) 注:generated/doc-contributors.json 留给 sync-uuid workflow 修好后 下次跑自己 commit,不进本 PR。 * fix(ci): IndexNow 提 leetcode slug 时走拼音映射,与实际路由对齐 CR (Copilot) 指出 #331 的 deploy.yml 直接拿文件路径当 slug,但 lib/source.ts 的 transformer 把 career/interview-prep/leetcode/ 下 含中文的文件名拼音化(convertSlugToPinyin): 文件:content/docs/career/interview-prep/leetcode/142.环形链表II_translated.md 实际路由:/<locale>/docs/career/interview-prep/leetcode/142-huan-xing-lian-biao-iitranslated 我之前推的:/<locale>/docs/career/interview-prep/leetcode/142.环形链表II_translated ← 404 修:在 deploy.yml 的 IndexNow URL 提取里复用 generated/leetcode-slug-map.json (prebuild 时由 scripts/generate-leetcode-slug-map.mts 用同一份算法生成), 对 leetcode 子树的 slug 做 stem → 拼音 映射后再推送。 非 leetcode 子树的 slug 不受影响(它们的文件名都是 ASCII,路由按 file path 直出,不需要映射)。 --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent e74b5fd commit 8c0fc06

3 files changed

Lines changed: 44 additions & 17 deletions

File tree

.github/workflows/content-check.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ on:
1010
- "**/*.md"
1111
- "**/*.mdx"
1212
- "source.config.ts"
13-
- "app/docs/**"
13+
# 2026-05 i18n URL 段化:mdx 内容从 app/docs/ 迁到 content/docs/
14+
- "content/docs/**"
1415
- "data/**"
1516
- "tests/**"
1617
- "lib/source.ts"

.github/workflows/deploy.yml

Lines changed: 38 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ jobs:
3636
run: node scripts/check-pnpm-version.mjs
3737

3838
- run: pnpm install --frozen-lockfile
39-
39+
4040
# Verify lockfile wasn't modified by install
4141
- name: Check lockfile consistency
4242
run: |
@@ -75,31 +75,56 @@ jobs:
7575
7676
git fetch --depth=2 origin ${{ github.ref }} || true
7777
CHANGED="$(git diff --name-only HEAD~1 HEAD || true)"
78-
CHANGED_DOCS="$(echo "$CHANGED" | grep -E '^(app/docs/|content/docs/).*\.(mdx?|tsx?)$' || true)"
79-
78+
CHANGED_DOCS="$(echo "$CHANGED" | grep -E '^content/docs/.*\.(md|mdx)$' || true)"
79+
80+
# i18n URL 段化(2026-05)后所有 docs URL 都带 /<locale>/ 前缀。
81+
# 每篇文档对外有 /zh/docs/<slug> 和 /en/docs/<slug> 两个独立 URL,
82+
# 任意文件变更都推送两条让 IndexNow 同时刷新两种语言版本。
83+
# 文件命名约定(fumadocs dot parser):
84+
# xxx.mdx → 默认 (zh) 原文,slug = xxx
85+
# xxx.en.mdx → en 翻译,slug = xxx(去 .en 后缀提 base slug)
86+
#
87+
# 例外:career/interview-prep/leetcode/ 下含中文的文件名会被
88+
# lib/source.ts 的 transformer 拼音化(convertSlugToPinyin),
89+
# 实际路由的最后一段是拼音 slug 而不是中文 stem。这里复用
90+
# generated/leetcode-slug-map.json (prebuild 时由
91+
# scripts/generate-leetcode-slug-map.mts 与 source.ts 同算法生成)
92+
# 把中文 stem 映射到拼音 slug,否则推送的 URL 会 404。
93+
LEETCODE_PREFIX="career/interview-prep/leetcode/"
94+
SLUG_MAP_FILE="generated/leetcode-slug-map.json"
8095
URLS=()
8196
82-
while IFS= read -r f; do
83-
[ -z "$f" ] && continue
84-
if [[ "$f" =~ ^app/docs/(.*)/page\.(mdx|md|tsx|ts|jsx|js)$ ]]; then
85-
slug="${BASH_REMATCH[1]}"
86-
URLS+=("$SITE_ORIGIN/docs/$slug")
87-
fi
88-
done <<< "$CHANGED_DOCS"
89-
9097
while IFS= read -r f; do
9198
[ -z "$f" ] && continue
9299
if [[ "$f" =~ ^content/docs/(.*)\.(md|mdx)$ ]]; then
93100
slug="${BASH_REMATCH[1]}"
101+
# 剥离 locale 后缀(.en / .zh),拿到 canonical base slug
102+
slug="${slug%.en}"
103+
slug="${slug%.zh}"
104+
# index.mdx 对应目录本身的 URL(fumadocs 约定)
94105
slug="${slug%/index}"
95-
URLS+=("$SITE_ORIGIN/docs/$slug")
106+
107+
# leetcode 中文 stem → 拼音 slug 映射(与 source.ts transformer 一致)
108+
if [[ "$slug" == "$LEETCODE_PREFIX"* && -f "$SLUG_MAP_FILE" ]]; then
109+
stem="${slug##*/}"
110+
dir="${slug%/*}"
111+
mapped="$(jq -r --arg k "$stem" '.[$k] // empty' "$SLUG_MAP_FILE")"
112+
if [ -n "$mapped" ]; then
113+
slug="$dir/$mapped"
114+
fi
115+
fi
116+
117+
URLS+=("$SITE_ORIGIN/zh/docs/$slug")
118+
URLS+=("$SITE_ORIGIN/en/docs/$slug")
96119
fi
97120
done <<< "$CHANGED_DOCS"
98121
99122
mapfile -t URLS < <(printf "%s\n" "${URLS[@]}" | awk 'NF' | sort -u)
100123
101124
if [ "${#URLS[@]}" -eq 0 ]; then
102-
URLS=("$SITE_ORIGIN/")
125+
# 没有 docs 改动时(例如改 README / 配置等)仍提交首页让 Bing/Yandex
126+
# 知道站点活跃。i18n 段化后首页有两个 URL,分别推送。
127+
URLS=("$SITE_ORIGIN/zh" "$SITE_ORIGIN/en")
103128
fi
104129
105130
echo "✅ Submitting URLs to IndexNow:"

.github/workflows/sync-uuid.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ on:
2222
- main
2323
- feat/contributor
2424
paths:
25-
- "app/docs/**"
25+
# 2026-05 i18n URL 段化:mdx 内容从 app/docs/ 迁到 content/docs/
26+
- "content/docs/**"
2627
- "scripts/uuid.mjs"
2728
- "scripts/backfill-contributors.mjs"
2829
- "package.json"
@@ -146,10 +147,10 @@ jobs:
146147
# 只 commit MDX frontmatter 改动 + 生成的 JSON,不包含任何其他脏文件。
147148
# [skip ci] 防止自提交再次触发本 workflow 死循环。
148149
# ============================================================
149-
if ! git diff --quiet -- 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json; then
150+
if ! git diff --quiet -- 'content/docs/**/*.md' 'content/docs/**/*.mdx' generated/doc-contributors.json; then
150151
git config user.name "github-actions[bot]"
151152
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
152-
git add 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json
153+
git add 'content/docs/**/*.md' 'content/docs/**/*.mdx' generated/doc-contributors.json
153154
git commit -m "chore(docs): sync doc metadata [skip ci]"
154155
git push origin "$BRANCH"
155156
else

0 commit comments

Comments
 (0)