Skip to content

Commit cf39a87

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

File tree

1 file changed

+126
-5
lines changed

1 file changed

+126
-5
lines changed

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

Lines changed: 126 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,126 @@ 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+
164+
# Secret 확인 (λ””λ²„κΉ…μš©)
165+
- name: Check PROJECT_TOKEN
166+
run: |
167+
if [ -z "${{ secrets.PROJECT_TOKEN }}" ]; then
168+
echo "❌ PROJECT_TOKEN secret이 μ„€μ •λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€."
169+
echo "Organization secrets 섀정을 ν™•μΈν•΄μ£Όμ„Έμš”:"
170+
echo "https://github.com/organizations/DaleStudy/settings/secrets/actions"
171+
exit 1
172+
else
173+
echo "βœ… PROJECT_TOKEN secret이 μ •μƒμ μœΌλ‘œ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€."
174+
fi
175+
176+
# PR 라벨 확인
177+
- name: Get PR labels
178+
id: pr-labels
179+
run: |
180+
echo "πŸ” PR 번호: ${{ github.event.pull_request.number }}"
181+
pr_number="${{ github.event.pull_request.number }}"
182+
183+
echo "πŸ“‹ PR 라벨 쑰회 쀑..."
184+
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
185+
echo "ν™•μΈλœ 라벨: $labels_json"
186+
187+
if [ -n "$labels_json" ]; then
188+
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
189+
echo "maintenance 라벨 포함 μ—¬λΆ€: $has_maintenance"
190+
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
191+
else
192+
echo "maintenance 라벨이 μ—†λŠ” PRμž…λ‹ˆλ‹€. Week 섀정을 κ²€μ‚¬ν•©λ‹ˆλ‹€."
193+
echo "has_maintenance=false" >> $GITHUB_OUTPUT
194+
fi
195+
env:
196+
GH_TOKEN: ${{ secrets.PROJECT_TOKEN }}
197+
198+
# Week μ„€μ • 확인
199+
- name: Check Week setting in project
200+
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
201+
run: |
202+
echo "πŸ” Week μ„€μ • 검사 μ‹œμž‘"
203+
pr_number="${{ github.event.pull_request.number }}"
204+
205+
echo "πŸ“‹ ν”„λ‘œμ νŠΈ 정보 쑰회 쀑..."
206+
project_data=$(gh api graphql -f query='
207+
query {
208+
repository(owner: "${{ github.repository_owner }}", name: "${{ github.event.repository.name }}") {
209+
pullRequest(number: '$pr_number') {
210+
projectItems(first: 10) {
211+
nodes {
212+
project {
213+
title
214+
}
215+
fieldValues(first: 20) {
216+
nodes {
217+
__typename
218+
... on ProjectV2ItemFieldIterationValue {
219+
title
220+
field {
221+
... on ProjectV2FieldCommon {
222+
name
223+
}
224+
}
225+
}
226+
}
227+
}
228+
}
229+
}
230+
}
231+
}
232+
}
233+
' 2>&1)
234+
235+
if [ $? -ne 0 ]; then
236+
echo "⚠️ ν”„λ‘œμ νŠΈ 정보λ₯Ό κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€."
237+
echo "$project_data"
238+
echo "## ❌ Week μ„€μ • 검증 μ‹€νŒ¨" >> $GITHUB_STEP_SUMMARY
239+
echo "" >> $GITHUB_STEP_SUMMARY
240+
echo "ν”„λ‘œμ νŠΈ 정보λ₯Ό μ‘°νšŒν•  수 μ—†μŠ΅λ‹ˆλ‹€. PR이 ν”„λ‘œμ νŠΈμ— μΆ”κ°€λ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄μ£Όμ„Έμš”." >> $GITHUB_STEP_SUMMARY
241+
242+
exit 1
243+
fi
244+
245+
echo "ν”„λ‘œμ νŠΈ 데이터:"
246+
echo "$project_data"
247+
248+
# Week ν•„λ“œ κ°’ μΆ”μΆœ (Iteration νƒ€μž…μ˜ Week ν•„λ“œ)
249+
week_value=$(echo "$project_data" | jq -r '
250+
.data.repository.pullRequest.projectItems.nodes[].fieldValues.nodes[] |
251+
select(.__typename == "ProjectV2ItemFieldIterationValue") |
252+
select(.field.name == "Week") |
253+
.title
254+
' 2>/dev/null | head -n 1)
255+
256+
echo "μΆ”μΆœλœ Week κ°’: '$week_value'"
257+
258+
if [ -z "$week_value" ] || [ "$week_value" = "null" ]; then
259+
echo "## ❌ Week μ„€μ • 검증 μ‹€νŒ¨" >> $GITHUB_STEP_SUMMARY
260+
echo "" >> $GITHUB_STEP_SUMMARY
261+
echo "⚠️ **PR에 Week 섀정이 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€!**" >> $GITHUB_STEP_SUMMARY
262+
echo "" >> $GITHUB_STEP_SUMMARY
263+
echo "### μ„€μ • 방법" >> $GITHUB_STEP_SUMMARY
264+
echo "1. PR 우츑의 \`Projects\` μ„Ήμ…˜μ—μ„œ \`λ¦¬νŠΈμ½”λ“œ μŠ€ν„°λ””\` μ˜† λ“œλ‘­λ‹€μš΄(β–Ό) 클릭" >> $GITHUB_STEP_SUMMARY
265+
echo "2. ν˜„μž¬ μ£Όμ°¨λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš” (예: \`Week 14(current)\` λ˜λŠ” \`Week 14\`)" >> $GITHUB_STEP_SUMMARY
266+
echo "" >> $GITHUB_STEP_SUMMARY
267+
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
268+
exit 1
269+
fi
270+
271+
echo "## βœ… Week μ„€μ • 검증 성곡" >> $GITHUB_STEP_SUMMARY
272+
echo "" >> $GITHUB_STEP_SUMMARY
273+
echo "Week μ„€μ •: **$week_value**" >> $GITHUB_STEP_SUMMARY
274+
echo "βœ… Week 섀정이 μ˜¬λ°”λ₯΄κ²Œ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€!"
275+
env:
276+
GH_TOKEN: ${{ secrets.PROJECT_TOKEN }}

0 commit comments

Comments
Β (0)