Skip to content

Commit d19b9b4

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

File tree

2 files changed

+126
-5
lines changed

2 files changed

+126
-5
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
name: Check Project Week ๐Ÿ—“๏ธ
2+
3+
on:
4+
pull_request_target:
5+
6+
jobs:
7+
check-project:
8+
runs-on: ubuntu-latest
9+
permissions:
10+
contents: read
11+
pull-requests: write
12+
13+
steps:
14+
# GitHub App Token ์ƒ์„ฑ
15+
- name: Generate GitHub App Token
16+
id: app-token
17+
uses: actions/create-github-app-token@v1
18+
with:
19+
app-id: ${{ secrets.APP_ID }}
20+
private-key: ${{ secrets.APP_PRIVATE_KEY }}
21+
22+
# PR ๋ผ๋ฒจ ํ™•์ธ
23+
- name: Get PR labels
24+
id: pr-labels
25+
run: |
26+
echo "๐Ÿ” PR ๋ฒˆํ˜ธ: ${{ github.event.pull_request.number }}"
27+
pr_number="${{ github.event.pull_request.number }}"
28+
29+
echo "๐Ÿ“‹ PR ๋ผ๋ฒจ ์กฐํšŒ ์ค‘..."
30+
labels_json=$(gh pr view $pr_number --json labels -q '.labels[].name')
31+
echo "ํ™•์ธ๋œ ๋ผ๋ฒจ: $labels_json"
32+
33+
if [ -n "$labels_json" ]; then
34+
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
35+
echo "maintenance ๋ผ๋ฒจ ํฌํ•จ ์—ฌ๋ถ€: $has_maintenance"
36+
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
37+
else
38+
echo "maintenance ๋ผ๋ฒจ์ด ์—†๋Š” PR์ž…๋‹ˆ๋‹ค. Week ์„ค์ •์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค."
39+
echo "has_maintenance=false" >> $GITHUB_OUTPUT
40+
fi
41+
env:
42+
GH_TOKEN: ${{ steps.app-token.outputs.token }}
43+
44+
# Week ์„ค์ • ํ™•์ธ
45+
- name: Check Week setting in project
46+
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
47+
run: |
48+
echo "๐Ÿ” Week ์„ค์ • ๊ฒ€์‚ฌ ์‹œ์ž‘"
49+
pr_number="${{ github.event.pull_request.number }}"
50+
51+
echo "๐Ÿ“‹ ํ”„๋กœ์ ํŠธ ์ •๋ณด ์กฐํšŒ ์ค‘..."
52+
project_data=$(gh api graphql -f query='
53+
query {
54+
repository(owner: "${{ github.repository_owner }}", name: "${{ github.event.repository.name }}") {
55+
pullRequest(number: '$pr_number') {
56+
projectItems(first: 10) {
57+
nodes {
58+
project {
59+
title
60+
}
61+
fieldValues(first: 20) {
62+
nodes {
63+
__typename
64+
... on ProjectV2ItemFieldIterationValue {
65+
title
66+
field {
67+
... on ProjectV2FieldCommon {
68+
name
69+
}
70+
}
71+
}
72+
}
73+
}
74+
}
75+
}
76+
}
77+
}
78+
}
79+
' 2>&1)
80+
81+
if [ $? -ne 0 ]; then
82+
echo "โš ๏ธ ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."
83+
echo "$project_data"
84+
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
85+
echo "" >> $GITHUB_STEP_SUMMARY
86+
echo "ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. PR์ด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์ฃผ์„ธ์š”." >> $GITHUB_STEP_SUMMARY
87+
echo "" >> $GITHUB_STEP_SUMMARY
88+
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
89+
exit 1
90+
fi
91+
92+
echo "ํ”„๋กœ์ ํŠธ ๋ฐ์ดํ„ฐ:"
93+
echo "$project_data"
94+
95+
# Week ํ•„๋“œ ๊ฐ’ ์ถ”์ถœ (Iteration ํƒ€์ž…์˜ Week ํ•„๋“œ)
96+
week_value=$(echo "$project_data" | jq -r '
97+
.data.repository.pullRequest.projectItems.nodes[].fieldValues.nodes[] |
98+
select(.__typename == "ProjectV2ItemFieldIterationValue") |
99+
select(.field.name == "Week") |
100+
.title
101+
' 2>/dev/null | head -n 1)
102+
103+
echo "์ถ”์ถœ๋œ Week ๊ฐ’: '$week_value'"
104+
105+
if [ -z "$week_value" ] || [ "$week_value" = "null" ]; then
106+
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
107+
echo "" >> $GITHUB_STEP_SUMMARY
108+
echo "โš ๏ธ **PR์— Week ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!**" >> $GITHUB_STEP_SUMMARY
109+
echo "" >> $GITHUB_STEP_SUMMARY
110+
echo "### ์„ค์ • ๋ฐฉ๋ฒ•" >> $GITHUB_STEP_SUMMARY
111+
echo "1. PR ์šฐ์ธก์˜ \`Projects\` ์„น์…˜์—์„œ \`๋ฆฌํŠธ์ฝ”๋“œ ์Šคํ„ฐ๋””\` ์˜† ๋“œ๋กญ๋‹ค์šด(โ–ผ) ํด๋ฆญ" >> $GITHUB_STEP_SUMMARY
112+
echo "2. ํ˜„์žฌ ์ฃผ์ฐจ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” (์˜ˆ: \`Week 14(current)\` ๋˜๋Š” \`Week 14\`)" >> $GITHUB_STEP_SUMMARY
113+
echo "" >> $GITHUB_STEP_SUMMARY
114+
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
115+
exit 1
116+
fi
117+
118+
echo "## โœ… Week ์„ค์ • ๊ฒ€์ฆ ์„ฑ๊ณต" >> $GITHUB_STEP_SUMMARY
119+
echo "" >> $GITHUB_STEP_SUMMARY
120+
echo "Week ์„ค์ •: **$week_value**" >> $GITHUB_STEP_SUMMARY
121+
echo "โœ… Week ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!"
122+
env:
123+
GH_TOKEN: ${{ steps.app-token.outputs.token }}

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

Lines changed: 3 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"

0 commit comments

Comments
ย (0)