-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPROJECT-COMMON-README-VERSION-UPDATE.yaml
More file actions
290 lines (254 loc) Β· 13.3 KB
/
PROJECT-COMMON-README-VERSION-UPDATE.yaml
File metadata and controls
290 lines (254 loc) Β· 13.3 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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
# ===================================================================
# README νμΌ λ²μ μλ μ
λ°μ΄νΈ μν¬νλ‘μ°
# ===================================================================
#
# μ΄ μν¬νλ‘μ°λ deploy λΈλμΉλ‘ νΈμκ° λ°μν λ README.md νμΌμ
# λ²μ μ 보λ₯Ό version_manager.shλ₯Ό ν΅ν΄ κ°μ Έμ μλμΌλ‘ μ
λ°μ΄νΈν©λλ€.
#
# μλ λ°©μ:
# 1. deploy λΈλμΉ νΈμ μ νΈλ¦¬κ±°
# 2. version_manager.shλ₯Ό ν΅ν΄ μ΅μ λ²μ μ 보 μΆμΆ
# 3. README.md νμΌμ λ²μ μ 보 μ
λ°μ΄νΈ
# 4. λ³κ²½μ¬ν μ»€λ° λ° νΈμ
#
# β οΈ README.md νμΌ λ²μ νκΈ° κ°μ΄λλΌμΈ:
#
# β
μ§μλλ λ²μ νκΈ° νμλ€:
# - ## μ΅μ λ²μ : v1.0.0 (2025-08-15)
# - ## μ΅μ λ²μ : v1.0.0 (2025-08-15)
# - ## Current Version : v1.0.0 (2025-08-15)
# - ## Recent Version : v1.0.0 (2025-08-15)
# - ## Version : v1.0.0 (2025-08-15)
# - ## λ²μ : v1.0.0 (2025-08-15)
#
# - λμλ¬Έμ κ΅¬λΆ μμ
# - μ½λ‘ (:) μλ€ κ³΅λ°± μμ λ‘κ² νμ©
# - "version", "λ²μ ", "μ΅μ ", "current", "recent" λ±μ ν€μλ ν¬ν¨ μ μλ μΈμ
# - μ£Όμ <!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->κ° μλμΌλ‘ μΆκ°λ©λλ€.
#
# β μ§μλμ§ μλ νμ (μλ¬ λ°μ):
# - ## μ΅μ λ²μ : v1.0.0** (λ§ν¬λ€μ΄ λ³Όλ λ¬Έμ μ¬μ© κΈμ§)
# - ## μ΅μ λ²μ v1.0.0 (μ½λ‘ λλ½)
# - μ κ·ννμ νΉμλ¬Έμ(*, [, ], ^, $) ν¬ν¨λ λ²μ νκΈ°
#
# π§ νκ²½λ³μ μ€μ :
# - SHOW_DATE: λ²μ μ λ μ§ νμ μ¬λΆ (true/false, κΈ°λ³Έκ°: true)
# * true: v1.0.0 (2025-08-16) νμ
# * false: v1.0.0 νμ
#
# ===================================================================
name: README VERSION UPDATE
# νκ²½λ³μ μ€μ - μ¬μ©μ λ§μΆ€ μ€μ
env:
# λ²μ μ λ μ§ νμ μ¬λΆ (true/false)
SHOW_DATE: true # π§ μ΄ κ°μ falseλ‘ λ³κ²½νλ©΄ λ μ§κ° νμλμ§ μμ΅λλ€
on:
push:
branches: ["deploy"]
permissions:
contents: write
pull-requests: write
jobs:
update-readme:
name: README λ²μ μ 보 μ
λ°μ΄νΈ
runs-on: ubuntu-latest
steps:
- name: μ μ₯μ 체ν¬μμ
uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
fetch-depth: 0
ref: ${{ github.event.repository.default_branch || 'main' }}
- name: Git μ€μ
run: |
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
- name: version_manager.shλ₯Ό ν΅ν΄ μ΅μ λ²μ μ 보 κ°μ Έμ€κΈ°
id: version_info
run: |
# λ²μ κ΄λ¦¬ μ€ν¬λ¦½νΈμ μ€ν κΆν λΆμ¬
chmod +x .github/scripts/version_manager.sh
# version_manager.shλ₯Ό ν΅ν΄ μ΅μ λ²μ κ°μ Έμ€κΈ°
LATEST_VERSION=$(.github/scripts/version_manager.sh get | tail -n 1)
# νμ¬ λ μ§λ₯Ό λ¦΄λ¦¬μ¦ λ μ§λ‘ μ¬μ©
RELEASE_DATE=$(date '+%Y-%m-%d')
# λ²μ μ 보 μ μ₯
echo "latest_version=$LATEST_VERSION" >> $GITHUB_OUTPUT
echo "release_date=$RELEASE_DATE" >> $GITHUB_OUTPUT
- name: README.md νμΌ λ²μ μ 보 μ
λ°μ΄νΈ
run: |
LATEST_VERSION="${{ steps.version_info.outputs.latest_version }}"
RELEASE_DATE="${{ steps.version_info.outputs.release_date }}"
SHOW_DATE="${{ env.SHOW_DATE }}"
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
# μλ¬ λ©μμ§ μΆλ ₯ ν¨μ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
print_error_message() {
local error_type="$1"
local version_line="$2"
local header_part="$3"
local version_text="$4"
echo ""
echo "β README.md λ²μ μ
λ°μ΄νΈ μ€ν¨"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
echo "π μλ¬ μ ν: $error_type"
echo ""
echo "π μ§λ¨ μ 보:"
echo " β’ νμ¬ λ²μ λΌμΈ: $version_line"
echo " β’ μΆμΆλ ν€λ: $header_part"
echo " β’ μ λ²μ ν
μ€νΈ: $version_text"
echo ""
echo "π‘ ν΄κ²° λ°©λ²:"
echo " README.mdμ λ²μ νκΈ°κ° μλ νμ μ€ νλμ μΌμΉνλμ§ νμΈνμΈμ:"
echo ""
echo " β
μ§μλλ νμ μμ:"
echo " β’ ## μ΅μ λ²μ : v1.0.0 (2025-08-15)"
echo " β’ ## μ΅μ λ²μ : v1.0.0"
echo " β’ ## Version : v1.0.0"
echo " β’ ## Current Version : v1.0.0 (2025-08-15)"
echo ""
echo " β οΈ μ£Όμμ¬ν:"
echo " β’ λ§ν¬λ€μ΄ λ³Όλ(**) λ¬Έμ μ¬μ© κΈμ§"
echo " β’ μ κ·ννμ νΉμλ¬Έμ(*, [, ], ^, $) μ¬μ© κΈμ§"
echo " β’ μ½λ‘ (:) λ€μ λ²μ μ λ³΄κ° λ°λ‘ μμΌ ν©λλ€"
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββ"
}
# λ μ§ νμ μ¬λΆμ λ°λΌ λ²μ νμ κ²°μ
if [ "$SHOW_DATE" = "true" ]; then
VERSION_TEXT="v${LATEST_VERSION} (${RELEASE_DATE})"
echo "ποΈ λ μ§ ν¬ν¨ λ²μ νμ: $VERSION_TEXT"
else
VERSION_TEXT="v${LATEST_VERSION}"
echo "π λ²μ λ§ νμ νμ: $VERSION_TEXT"
fi
# λ€μν λ²μ νκΈ° ν¨ν΄μ μ°ΎκΈ° μν μ κ·ννμ
# λμλ¬Έμ 무μ, 곡백 μ μ°νκ² μ²λ¦¬
VERSION_PATTERNS=(
"^##[[:space:]]*μ΅μ [[:space:]]*λ²μ [[:space:]]*:"
"^##[[:space:]]*μ΅μ λ²μ [[:space:]]*:"
"^##[[:space:]]*[Cc]urrent[[:space:]]*[Vv]ersion[[:space:]]*:"
"^##[[:space:]]*[Rr]ecent[[:space:]]*[Vv]ersion[[:space:]]*:"
"^##[[:space:]]*[Vv]ersion[[:space:]]*:"
"^##[[:space:]]*λ²μ [[:space:]]*:"
"^##[[:space:]]*[Ll]atest[[:space:]]*[Vv]ersion[[:space:]]*:"
)
# λ²μ λΌμΈ μ°ΎκΈ°
VERSION_LINE=""
PATTERN_FOUND=""
for pattern in "${VERSION_PATTERNS[@]}"; do
if grep -qi "$pattern" README.md; then
VERSION_LINE=$(grep -i "$pattern" README.md | head -n 1)
PATTERN_FOUND="$pattern"
echo "β
λ²μ ν¨ν΄ λ°κ²¬: $VERSION_LINE"
break
fi
done
# λ²μ λΌμΈμ΄ μμΌλ©΄ κΈ°λ³Έ νμμΌλ‘ μΆκ°
if [ -z "$VERSION_LINE" ]; then
echo "π λ²μ μ λ³΄κ° μμ΄ μλ‘ μΆκ°ν©λλ€"
# νμΌ λ§¨ μμ μ λͺ©μ΄ μλμ§ νμΈ ν κ·Έ λ€μμ μΆκ°
if grep -q "^# " README.md; then
# 첫 λ²μ§Έ μ λͺ© λ€μμ μΆκ°
sed -i '/^# /a\\n<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## μ΅μ λ²μ : '"$VERSION_TEXT" README.md
else
# νμΌ λ§¨ μμ μΆκ°
sed -i '1i\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->\n## μ΅μ λ²μ : '"$VERSION_TEXT"'\n' README.md
fi
echo "β
κΈ°λ³Έ λ²μ μ 보 μΆκ° μλ£: $VERSION_TEXT"
else
# κΈ°μ‘΄ λ²μ λΌμΈ μ
λ°μ΄νΈ
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
# λ²μ λΌμΈ νμ κ²μ¦ λ° κ²½κ³
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
if [[ "$VERSION_LINE" =~ \*\* ]]; then
echo ""
echo "β οΈ κ²½κ³ : λ²μ λΌμΈμ λ§ν¬λ€μ΄ λ³Όλ(**) λ¬Έμκ° ν¬ν¨λμ΄ μμ΅λλ€"
echo " νμ¬ λ²μ λΌμΈ: $VERSION_LINE"
echo " μ΄λ‘ μΈν΄ λ²μ μ
λ°μ΄νΈκ° μ€ν¨ν μ μμ΅λλ€"
echo ""
fi
# HTML μ£Όμμ΄ ν΄λΉ λΌμΈ μμ μλμ§ νμΈ
LINE_NUMBER=$(grep -n -i "$PATTERN_FOUND" README.md | head -n 1 | cut -d: -f1)
PREV_LINE_NUMBER=$((LINE_NUMBER - 1))
if [ $PREV_LINE_NUMBER -gt 0 ]; then
PREV_LINE=$(sed -n "${PREV_LINE_NUMBER}p" README.md)
if [[ "$PREV_LINE" != *"AUTO-VERSION-SECTION"* ]]; then
# μ£Όμμ΄ μμΌλ©΄ λ²μ λΌμΈ μμ μΆκ°
sed -i "${PREV_LINE_NUMBER}a\\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->" README.md
echo "β
μλ μ
λ°μ΄νΈ μ£Όμ μΆκ° μλ£"
# μ£Όμ μΆκ°λ‘ λΌμΈ λ²νΈκ° λ³κ²½λ¨
LINE_NUMBER=$((LINE_NUMBER + 1))
fi
else
# 첫 λ²μ§Έ λΌμΈμ΄λ©΄ κ·Έ μμ μΆκ°
sed -i '1i\<!-- AUTO-VERSION-SECTION: DO NOT EDIT MANUALLY -->' README.md
echo "β
μλ μ
λ°μ΄νΈ μ£Όμ μΆκ° μλ£"
# μ£Όμ μΆκ°λ‘ λΌμΈ λ²νΈκ° λ³κ²½λ¨
LINE_NUMBER=$((LINE_NUMBER + 1))
fi
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
# ν€λ λΆλΆ μΆμΆ (μ½λ‘ κΉμ§λ§ μΆμΆνμ¬ μμ νκ² μ²λ¦¬)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
HEADER_PART=$(echo "$VERSION_LINE" | sed 's/\(.*:\).*/\1 /')
# ν€λ μΆμΆ μ€ν¨ κ²μ¦
if [ -z "$HEADER_PART" ] || [[ "$HEADER_PART" == "$VERSION_LINE" ]]; then
print_error_message "ν€λ μΆμΆ μ€ν¨ - μ½λ‘ (:)μ μ°Ύμ μ μμ΅λλ€" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
exit 1
fi
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
# λΌμΈ λ²νΈ κΈ°λ°μΌλ‘ μ§μ κ΅μ²΄ (μ κ·ννμ νΉμλ¬Έμ λ¬Έμ ννΌ)
# βββββββββββββββββββββββββββββββββββββββββββββββββββββ
NEW_LINE="${HEADER_PART}${VERSION_TEXT}"
if ! sed -i "${LINE_NUMBER}s|.*|${NEW_LINE}|" README.md 2>/tmp/sed_error.log; then
SED_ERROR=$(cat /tmp/sed_error.log 2>/dev/null || echo "μ μ μλ sed μ€λ₯")
print_error_message "sed λͺ
λ Ήμ΄ μ€ν μ€ν¨ - $SED_ERROR" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
exit 1
fi
# λ³κ²½ κ²°κ³Ό κ²μ¦
UPDATED_LINE=$(sed -n "${LINE_NUMBER}p" README.md)
if [[ "$UPDATED_LINE" != *"$VERSION_TEXT"* ]]; then
print_error_message "λ²μ μ 보 κ΅μ²΄ κ²μ¦ μ€ν¨" "$VERSION_LINE" "$HEADER_PART" "$VERSION_TEXT"
echo " β’ μ
λ°μ΄νΈλ λΌμΈ: $UPDATED_LINE"
exit 1
fi
echo "β
λ²μ μ 보 μ
λ°μ΄νΈ μλ£: $VERSION_TEXT"
fi
- name: λ³κ²½μ¬ν μ»€λ° λ° νΈμ
run: |
DEFAULT_BRANCH="${{ github.event.repository.default_branch || 'main' }}"
git add README.md
if git diff --staged --quiet; then
echo "π README.mdμ λ³κ²½μ¬νμ΄ μμ΅λλ€"
else
REPO_NAME=$(basename "${{ github.repository }}")
VERSION="${{ steps.version_info.outputs.latest_version }}"
git commit -m "$REPO_NAME λ²μ κ΄λ¦¬ : docs : v$VERSION README λ²μ μ 보 μ
λ°μ΄νΈ [skip ci]"
# Race Condition λ°©μ§: pull-rebase ν push (μ΅λ 3ν μ¬μλ)
MAX_RETRIES=3
RETRY_COUNT=0
PUSH_SUCCESS=false
while [ $RETRY_COUNT -lt $MAX_RETRIES ]; do
RETRY_COUNT=$((RETRY_COUNT + 1))
echo "π Push μλ $RETRY_COUNT/$MAX_RETRIES..."
if git push origin HEAD:$DEFAULT_BRANCH; then
PUSH_SUCCESS=true
echo "β
README.md λ²μ μ 보 μ
λ°μ΄νΈ μλ£"
break
else
echo "β οΈ Push μ€ν¨, remote λ³κ²½μ¬ν λκΈ°ν μ€..."
if git pull --rebase origin $DEFAULT_BRANCH; then
echo "β
Rebase μ±κ³΅, λ€μ push μλ..."
else
echo "β Rebase μ€ν¨, μΆ©λ ν΄κ²° νμ"
git rebase --abort 2>/dev/null || true
exit 1
fi
fi
done
if [ "$PUSH_SUCCESS" = false ]; then
echo "β $MAX_RETRIESν μλ νμλ push μ€ν¨"
exit 1
fi
fi