Skip to content

Commit 2519db2

Browse files
committed
ci: add job for project validation
1 parent c65df35 commit 2519db2

File tree

1 file changed

+121
-5
lines changed

1 file changed

+121
-5
lines changed

β€Ž.github/workflows/integration.yamlβ€Ž

Lines changed: 121 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,21 +7,19 @@ jobs:
77
linelint:
88
runs-on: ubuntu-latest
99
steps:
10-
- uses: actions/checkout@v4
11-
with:
12-
fetch-depth: 0
10+
- uses: actions/checkout@v5
1311

1412
# PR 라벨 확인
1513
- name: Get PR labels
1614
id: pr-labels
1715
run: |
1816
echo "πŸ” PR 번호: ${{ github.event.pull_request.number }}"
1917
pr_number="${{ github.event.pull_request.number }}"
20-
18+
2119
echo "πŸ“‹ PR 라벨 쑰회 쀑..."
2220
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
2321
echo "ν™•μΈλœ 라벨: $labels_json"
24-
22+
2523
if [ -n "$labels_json" ]; then
2624
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
2725
echo "maintenance 라벨 포함 μ—¬λΆ€: $has_maintenance"
@@ -153,3 +151,121 @@ jobs:
153151
fi
154152
env:
155153
GH_TOKEN: ${{ github.token }}
154+
155+
check-project:
156+
runs-on: ubuntu-latest
157+
permissions:
158+
contents: read
159+
pull-requests: read
160+
161+
steps:
162+
- uses: actions/checkout@v5
163+
# GitHub App Token 생성
164+
- name: Generate GitHub App Token
165+
id: app-token
166+
uses: actions/create-github-app-token@v1
167+
with:
168+
app-id: ${{ secrets.APP_ID }}
169+
private-key: ${{ secrets.APP_PRIVATE_KEY }}
170+
171+
# PR 라벨 확인
172+
- name: Get PR labels
173+
id: pr-labels
174+
run: |
175+
echo "πŸ” PR 번호: ${{ github.event.pull_request.number }}"
176+
pr_number="${{ github.event.pull_request.number }}"
177+
178+
echo "πŸ“‹ PR 라벨 쑰회 쀑..."
179+
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
180+
echo "ν™•μΈλœ 라벨: $labels_json"
181+
182+
if [ -n "$labels_json" ]; then
183+
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
184+
echo "maintenance 라벨 포함 μ—¬λΆ€: $has_maintenance"
185+
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
186+
else
187+
echo "maintenance 라벨이 μ—†λŠ” PRμž…λ‹ˆλ‹€. Week 섀정을 κ²€μ‚¬ν•©λ‹ˆλ‹€."
188+
echo "has_maintenance=false" >> $GITHUB_OUTPUT
189+
fi
190+
env:
191+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
192+
193+
# Week μ„€μ • 확인
194+
- name: Check Week setting in project
195+
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
196+
run: |
197+
echo "πŸ” Week μ„€μ • 검사 μ‹œμž‘"
198+
pr_number="${{ github.event.pull_request.number }}"
199+
200+
echo "πŸ“‹ ν”„λ‘œμ νŠΈ 정보 쑰회 쀑..."
201+
project_data=$(gh api graphql -f query='
202+
query {
203+
repository(owner: "${{ github.repository_owner }}", name: "${{ github.event.repository.name }}") {
204+
pullRequest(number: '$pr_number') {
205+
projectItems(first: 10) {
206+
nodes {
207+
project {
208+
title
209+
}
210+
fieldValues(first: 20) {
211+
nodes {
212+
__typename
213+
... on ProjectV2ItemFieldIterationValue {
214+
title
215+
field {
216+
... on ProjectV2FieldCommon {
217+
name
218+
}
219+
}
220+
}
221+
}
222+
}
223+
}
224+
}
225+
}
226+
}
227+
}
228+
' 2>&1)
229+
230+
if [ $? -ne 0 ]; then
231+
echo "⚠️ ν”„λ‘œμ νŠΈ 정보λ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€."
232+
echo "$project_data"
233+
echo "## ❌ Week μ„€μ • 검증 μ‹€νŒ¨" >> $GITHUB_STEP_SUMMARY
234+
echo "" >> $GITHUB_STEP_SUMMARY
235+
echo "ν”„λ‘œμ νŠΈ 정보λ₯Ό μ‘°νšŒν•  수 μ—†μŠ΅λ‹ˆλ‹€. PR이 ν”„λ‘œμ νŠΈμ— μΆ”κ°€λ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄μ£Όμ„Έμš”." >> $GITHUB_STEP_SUMMARY
236+
237+
exit 1
238+
fi
239+
240+
echo "ν”„λ‘œμ νŠΈ 데이터:"
241+
echo "$project_data"
242+
243+
# Week ν•„λ“œ κ°’ μΆ”μΆœ (Iteration νƒ€μž…μ˜ Week ν•„λ“œ)
244+
week_value=$(echo "$project_data" | jq -r '
245+
.data.repository.pullRequest.projectItems.nodes[].fieldValues.nodes[] |
246+
select(.__typename == "ProjectV2ItemFieldIterationValue") |
247+
select(.field.name == "Week") |
248+
.title
249+
' 2>/dev/null | head -n 1)
250+
251+
echo "μΆ”μΆœλœ Week κ°’: '$week_value'"
252+
253+
if [ -z "$week_value" ] || [ "$week_value" = "null" ]; then
254+
echo "## ❌ Week μ„€μ • 검증 μ‹€νŒ¨" >> $GITHUB_STEP_SUMMARY
255+
echo "" >> $GITHUB_STEP_SUMMARY
256+
echo "⚠️ **PR에 Week 섀정이 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€!**" >> $GITHUB_STEP_SUMMARY
257+
echo "" >> $GITHUB_STEP_SUMMARY
258+
echo "### μ„€μ • 방법" >> $GITHUB_STEP_SUMMARY
259+
echo "1. PR 우츑의 \`Projects\` μ„Ήμ…˜μ—μ„œ \`λ¦¬νŠΈμ½”λ“œ μŠ€ν„°λ””\` μ˜† λ“œλ‘­λ‹€μš΄(β–Ό) 클릭" >> $GITHUB_STEP_SUMMARY
260+
echo "2. ν˜„μž¬ μ£Όμ°¨λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš” (예: \`Week 14(current)\` λ˜λŠ” \`Week 14\`)" >> $GITHUB_STEP_SUMMARY
261+
echo "" >> $GITHUB_STEP_SUMMARY
262+
echo "πŸ“š [μžμ„Έν•œ κ°€μ΄λ“œ 보기](https://github.com/DaleStudy/leetcode-study/wiki/%EB%8B%B5%EC%95%88-%EC%A0%9C%EC%B6%9C-%EA%B0%80%EC%9D%B4%EB%93%9C#pr-%EC%9E%91%EC%84%B1%EB%B2%95)" >> $GITHUB_STEP_SUMMARY
263+
exit 1
264+
fi
265+
266+
echo "## βœ… Week μ„€μ • 검증 성곡" >> $GITHUB_STEP_SUMMARY
267+
echo "" >> $GITHUB_STEP_SUMMARY
268+
echo "Week μ„€μ •: **$week_value**" >> $GITHUB_STEP_SUMMARY
269+
echo "βœ… Week 섀정이 μ˜¬λ°”λ₯΄κ²Œ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€!"
270+
env:
271+
GH_TOKEN: ${{ steps.app-token.outputs.token }}

0 commit comments

Comments
Β (0)