Skip to content

Commit 0fe473d

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

File tree

2 files changed

+127
-5
lines changed

2 files changed

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