-
Notifications
You must be signed in to change notification settings - Fork 182
Expand file tree
/
Copy pathsync.sh
More file actions
executable file
ยท163 lines (141 loc) ยท 6.84 KB
/
Copy pathsync.sh
File metadata and controls
executable file
ยท163 lines (141 loc) ยท 6.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
#!/usr/bin/env bash
# Taiwan.md ็ตฑไธๅๆญฅ่
ณๆฌ๏ผknowledge/ SSOT โ src/content/ ๆๅฝฑๅฑค
#
# ่จญ่จ๏ผ
# - SSOT: enabled lang codes from src/config/languages.mjs
# - zh-TW (default): knowledge/{Category}/ โ src/content/zh-TW/{category}/
# - ๅ
ถไป lang: knowledge/{lang}/{Category}/ โ src/content/{lang}/{category}/
# - Resources: knowledge/resources/ (zh-TW) + knowledge/{lang}/resources/ โ src/content/{lang}/resources/
# - Root files: knowledge/{lang}/*.md (root level) โ src/content/{lang}/*.md
# - ๅช็ญ๏ผๅ
rm -rf ๆๆ enabled lang dirs ๅ้ๅปบ
#
# ็จๆณ๏ผbash scripts/core/sync.sh
#
# 2026-05-12 admiring-montalcini-post-finale refactor:
# - ๅพ 217 ่ก 5x repeat โ ๆจก็ตๅ sync_lang() function
# - ไฟฎ่ฃๆขๆ bug:
# (a) fr/es ๅ ้ฒ rm list๏ผๆธ
336 zombie articles๏ผ
# (b) ๅ lang ้ฝ่ท resources/ ๅๆญฅ๏ผๅๆฌๅช่ท zh-TW + en๏ผ
# (c) ๅ lang ็ root-level .md ไนๆฌ๏ผๅๆฌๅชๆฌ zh-TW _Home.md๏ผ
# knowledge/en/{root.md} ็ญ่ขซ็ฅ้ โ 8 silent missing ๆ นๅ ๏ผ
# - SSOT ้ฉ
ๅ๏ผactive lang list ๅพ src/config/languages.mjs ่ฎๅ
#
# ๅฐๆ๏ผreports/sync-architecture-evolution-2026-05-12.md v2.0 Ship 1
set -euo pipefail
# โโโโโโโโโโโโโโโโโโ ่จญๅฎ โโโโโโโโโโโโโโโโโโ
readonly REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
cd "$REPO_ROOT"
# Categories๏ผ่ท knowledge/ ็ฎ้็ตๆงๅฐ้ฝ๏ผๆฐๅขๅ้กๆ้่ฃก + knowledge/ ไธ่ตทๅ ๏ผ
readonly CATEGORIES=(
About Art Culture Economy Food Geography History
Lifestyle Music Nature People Politics Society Technology
)
# Enabled lang codes ๅพ SSOT ่ฎๅ
ENABLED_LANGS=$(node -e "
import('./src/config/languages.mjs')
.then(m => console.log(m.ENABLED_LANGUAGE_CODES.join(' ')))
.catch(e => { console.error(e.message); process.exit(1); });
" 2>&1) || {
echo "โ ็กๆณๅพ src/config/languages.mjs ่ฎๅ ENABLED_LANGUAGE_CODES" >&2
echo " ้ฏ่ชค๏ผ$ENABLED_LANGS" >&2
exit 2
}
if [ -z "$ENABLED_LANGS" ]; then
echo "โ ENABLED_LANGUAGE_CODES ็บ็ฉบ" >&2
exit 2
fi
# โโโโโโโโโโโโโโโโโโ Header โโโโโโโโโโโโโโโโโโ
echo "๐ Taiwan.md sync โ knowledge/ SSOT โ src/content/ ๆๅฝฑๅฑค"
echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
echo " Enabled langs: $ENABLED_LANGS"
echo ""
# โโโโโโโโโโโโโโโโโโ Phase 1: ๆธ
็ฉบ โโโโโโโโโโโโโโโโโโ
echo "๐งน Phase 1: ๆธ
็ฉบ src/content/{lang}/ (ๅช็ญ้ๅปบ)..."
for lang in $ENABLED_LANGS; do
if [ -d "src/content/$lang" ]; then
rm -rf "src/content/$lang"
fi
done
echo " โ
Cleaned: $ENABLED_LANGS"
echo ""
# โโโโโโโโโโโโโโโโโโ Phase 2: ๅๆญฅ sync_lang() โโโโโโโโโโโโโโโโโโ
KNOWLEDGE_COUNT=$(find knowledge/ -name "*.md" | wc -l | tr -d ' ')
SYNCED_TOTAL=0
# sync_lang LANG_CODE โ ๆ knowledge/{lang}/ (ๆ zh-TW ็ knowledge/ root) ๅๆญฅๅฐ src/content/{lang}/
sync_lang() {
local lang="$1"
local src_root dst_root count=0
# zh-TW ็นไพ๏ผsource ๅจ knowledge/ root๏ผไธๅจ knowledge/zh-TW/๏ผ
if [ "$lang" = "zh-TW" ]; then
src_root="knowledge"
else
src_root="knowledge/$lang"
fi
dst_root="src/content/$lang"
if [ ! -d "$src_root" ]; then
echo " โ ๏ธ $lang: SKIP (no $src_root/)"
return
fi
# ้ๆช cp โ ๅฎๆฌกๅคๆช cp๏ผ2026-08-04 build-speed๏ผ๏ผๅๅฏซๆณๅฐ 10k+ ๆชๅ spawn ไธๅ
# cp process๏ผCI ไธๅ 26sใๆฌๆฉ dev ๅๅ 23sใๆนๆฌกๅๅพๆฏๅ็ฎ้ไธๅ processใ
# copy_md_batch SRC_DIR DST_DIR โ ๆท SRC_DIR ้ ๅฑค *.md๏ผไธ้่ฟด๏ผๅๅ่ชๆ๏ผ๏ผๅๅณๆชๆธ
copy_md_batch() {
local sdir="$1" ddir="$2"
local batch=("$sdir"/*.md)
# glob ็กๅน้
ๆ็ไธ literal pattern๏ผ่ทๅ [ ! -f ] ๆชขๆฅๅ่ชๆ
[ ! -f "${batch[0]}" ] && { echo 0; return; }
mkdir -p "$ddir"
cp "${batch[@]}" "$ddir/"
echo "${#batch[@]}"
}
# 2a. Category subdirs (knowledge/{Cat}/*.md โ src/content/{lang}/{cat}/*.md)
for category in "${CATEGORIES[@]}"; do
local src_dir="$src_root/$category"
[ ! -d "$src_dir" ] && continue
local cat_lower
cat_lower=$(echo "$category" | tr '[:upper:]' '[:lower:]')
mkdir -p "$dst_root/$cat_lower" # ๅ่ชๆ๏ผsrc category ็ฎ้ๅญๅจๅฐฑๅปบ dst๏ผๅณไฝฟๆฒ md๏ผ
count=$((count + $(copy_md_batch "$src_dir" "$dst_root/$cat_lower")))
done
# 2b. resources/ subdir (ๅ lang ้ฝๆ๏ผๅๆฌ bug๏ผๅช่ท zh-TW + en)
if [ -d "$src_root/resources" ]; then
count=$((count + $(copy_md_batch "$src_root/resources" "$dst_root/resources")))
fi
# 2c. Root-level .md files (knowledge/{lang}/*.md โ src/content/{lang}/*.md)
# ๅๆฌ bug๏ผๅชๆฌ knowledge/_Home.md๏ผๅ
ถไป lang root ็ .md ่ขซ็ฅ้ โ silent missing
count=$((count + $(copy_md_batch "$src_root" "$dst_root")))
SYNCED_TOTAL=$((SYNCED_TOTAL + count))
printf " โ
%-6s %4d files\n" "$lang" "$count"
}
echo "๐ Phase 2: ๅๆญฅ (per lang)..."
for lang in $ENABLED_LANGS; do
sync_lang "$lang"
done
echo ""
# โโโโโโโโโโโโโโโโโโ Phase 3: Frontmatter ไฟฎๅพฉ (legacy) โโโโโโโโโโโโโโโโโโ
# ๆณจๆ๏ผfix-all-frontmatter.py ๅชๅจ็ผบ `title:` ๆ้ๅปบ frontmatter (99% ๆชๆก no-op)
# ็่ๆฏ legacy migration safeguard๏ผๆชไพ contributor ็ดไธๅฐ src/content/ ไธๅๅฏ่ฝ๏ผgitignore ๅพ๏ผ
echo "๐ง Phase 3: Frontmatter ไฟฎๅพฉ (legacy fallback)..."
if [ -f "scripts/utils/fix-all-frontmatter.py" ]; then
python3 scripts/utils/fix-all-frontmatter.py 2>&1 | tail -2
else
echo " โ ๏ธ scripts/utils/fix-all-frontmatter.py ไธๅญๅจ๏ผ่ทณ้"
fi
echo ""
# โโโโโโโโโโโโโโโโโโ Phase 4: ๅ็ๅฅๅบทๆชขๆฅ โโโโโโโโโโโโโโโโโโ
echo "๐ผ๏ธ Phase 4: ๅ็ๅฅๅบทๆชขๆฅ..."
if [ -f "scripts/utils/check-images.mjs" ]; then
node scripts/utils/check-images.mjs 2>&1 | tail -5 || echo " โ ๏ธ ๅ็ๆชขๆฅๅๅ ฑ่ญฆๅ๏ผ้่ดๅฝ๏ผ"
else
echo " โ ๏ธ scripts/utils/check-images.mjs ไธๅญๅจ๏ผ่ทณ้"
fi
echo ""
# โโโโโโโโโโโโโโโโโโ Footer โโโโโโโโโโโโโโโโโโ
CONTENT_FINAL=$(find src/content/ -name "*.md" | wc -l | tr -d ' ')
echo "โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ"
echo "โจ Sync ๅฎๆ"
echo " ๐ knowledge/ source: $KNOWLEDGE_COUNT files"
echo " ๐ src/content/ final: $CONTENT_FINAL files"
echo " ๐ synced: $SYNCED_TOTAL files"
echo ""
echo "โถ๏ธ ไธไธๆญฅ๏ผnpm run build"