Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .github/workflows/content-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ on:
- "**/*.md"
- "**/*.mdx"
- "source.config.ts"
- "app/docs/**"
# 2026-05 i18n URL 段化:mdx 内容从 app/docs/ 迁到 content/docs/
- "content/docs/**"
- "data/**"
- "tests/**"
- "lib/source.ts"
Expand Down
51 changes: 38 additions & 13 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
run: node scripts/check-pnpm-version.mjs

- run: pnpm install --frozen-lockfile

# Verify lockfile wasn't modified by install
- name: Check lockfile consistency
run: |
Expand Down Expand Up @@ -75,31 +75,56 @@ jobs:

git fetch --depth=2 origin ${{ github.ref }} || true
CHANGED="$(git diff --name-only HEAD~1 HEAD || true)"
CHANGED_DOCS="$(echo "$CHANGED" | grep -E '^(app/docs/|content/docs/).*\.(mdx?|tsx?)$' || true)"

CHANGED_DOCS="$(echo "$CHANGED" | grep -E '^content/docs/.*\.(md|mdx)$' || true)"

# i18n URL 段化(2026-05)后所有 docs URL 都带 /<locale>/ 前缀。
# 每篇文档对外有 /zh/docs/<slug> 和 /en/docs/<slug> 两个独立 URL,
# 任意文件变更都推送两条让 IndexNow 同时刷新两种语言版本。
# 文件命名约定(fumadocs dot parser):
# xxx.mdx → 默认 (zh) 原文,slug = xxx
# xxx.en.mdx → en 翻译,slug = xxx(去 .en 后缀提 base slug)
#
# 例外:career/interview-prep/leetcode/ 下含中文的文件名会被
# lib/source.ts 的 transformer 拼音化(convertSlugToPinyin),
# 实际路由的最后一段是拼音 slug 而不是中文 stem。这里复用
# generated/leetcode-slug-map.json (prebuild 时由
# scripts/generate-leetcode-slug-map.mts 与 source.ts 同算法生成)
# 把中文 stem 映射到拼音 slug,否则推送的 URL 会 404。
LEETCODE_PREFIX="career/interview-prep/leetcode/"
SLUG_MAP_FILE="generated/leetcode-slug-map.json"
URLS=()

while IFS= read -r f; do
[ -z "$f" ] && continue
if [[ "$f" =~ ^app/docs/(.*)/page\.(mdx|md|tsx|ts|jsx|js)$ ]]; then
slug="${BASH_REMATCH[1]}"
URLS+=("$SITE_ORIGIN/docs/$slug")
fi
done <<< "$CHANGED_DOCS"

while IFS= read -r f; do
[ -z "$f" ] && continue
if [[ "$f" =~ ^content/docs/(.*)\.(md|mdx)$ ]]; then
slug="${BASH_REMATCH[1]}"
# 剥离 locale 后缀(.en / .zh),拿到 canonical base slug
slug="${slug%.en}"
slug="${slug%.zh}"
# index.mdx 对应目录本身的 URL(fumadocs 约定)
slug="${slug%/index}"
URLS+=("$SITE_ORIGIN/docs/$slug")

# leetcode 中文 stem → 拼音 slug 映射(与 source.ts transformer 一致)
if [[ "$slug" == "$LEETCODE_PREFIX"* && -f "$SLUG_MAP_FILE" ]]; then
stem="${slug##*/}"
dir="${slug%/*}"
mapped="$(jq -r --arg k "$stem" '.[$k] // empty' "$SLUG_MAP_FILE")"
if [ -n "$mapped" ]; then
slug="$dir/$mapped"
fi
fi

URLS+=("$SITE_ORIGIN/zh/docs/$slug")
URLS+=("$SITE_ORIGIN/en/docs/$slug")
fi
Comment on lines 97 to 119
done <<< "$CHANGED_DOCS"

mapfile -t URLS < <(printf "%s\n" "${URLS[@]}" | awk 'NF' | sort -u)

if [ "${#URLS[@]}" -eq 0 ]; then
URLS=("$SITE_ORIGIN/")
# 没有 docs 改动时(例如改 README / 配置等)仍提交首页让 Bing/Yandex
# 知道站点活跃。i18n 段化后首页有两个 URL,分别推送。
URLS=("$SITE_ORIGIN/zh" "$SITE_ORIGIN/en")
fi

echo "✅ Submitting URLs to IndexNow:"
Expand Down
7 changes: 4 additions & 3 deletions .github/workflows/sync-uuid.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ on:
- main
- feat/contributor
paths:
- "app/docs/**"
# 2026-05 i18n URL 段化:mdx 内容从 app/docs/ 迁到 content/docs/
- "content/docs/**"
- "scripts/uuid.mjs"
- "scripts/backfill-contributors.mjs"
- "package.json"
Expand Down Expand Up @@ -146,10 +147,10 @@ jobs:
# 只 commit MDX frontmatter 改动 + 生成的 JSON,不包含任何其他脏文件。
# [skip ci] 防止自提交再次触发本 workflow 死循环。
# ============================================================
if ! git diff --quiet -- 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json; then
if ! git diff --quiet -- 'content/docs/**/*.md' 'content/docs/**/*.mdx' generated/doc-contributors.json; then
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add 'app/docs/**/*.md' 'app/docs/**/*.mdx' generated/doc-contributors.json
git add 'content/docs/**/*.md' 'content/docs/**/*.mdx' generated/doc-contributors.json
git commit -m "chore(docs): sync doc metadata [skip ci]"
git push origin "$BRANCH"
else
Expand Down
Loading