Skip to content

Commit 39f012f

Browse files
committed
use GitHub App
1 parent e1adcc7 commit 39f012f

File tree

2 files changed

+226
-0
lines changed

2 files changed

+226
-0
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
name: Project Week Check (Scheduled) ๐Ÿ””
2+
3+
on:
4+
schedule:
5+
# ๋งค์ผ ์˜ค์ „ 10์‹œ, ์˜คํ›„ 6์‹œ (KST ๊ธฐ์ค€, UTC๋กœ๋Š” 1์‹œ, 9์‹œ)
6+
- cron: '0 1,9 * * *'
7+
workflow_dispatch: # ์ˆ˜๋™ ์‹คํ–‰
8+
9+
jobs:
10+
check-all-prs:
11+
runs-on: ubuntu-latest
12+
permissions:
13+
contents: read
14+
pull-requests: write # ๋Œ“๊ธ€ ์ž‘์„ฑ ๊ถŒํ•œ
15+
16+
steps:
17+
- name: Get all open PRs
18+
id: get-prs
19+
run: |
20+
echo "๐Ÿ“‹ Open PR ๋ชฉ๋ก ์กฐํšŒ ์ค‘..."
21+
prs=$(gh pr list \
22+
--repo ${{ github.repository }} \
23+
--state open \
24+
--json number,labels \
25+
--limit 100)
26+
27+
echo "prs=$prs" >> $GITHUB_OUTPUT
28+
echo "Open PR ์ˆ˜: $(echo $prs | jq 'length')"
29+
env:
30+
GH_TOKEN: ${{ github.token }}
31+
32+
- name: Check Week settings for all PRs
33+
run: |
34+
prs='${{ steps.get-prs.outputs.prs }}'
35+
WORKER_URL="https://dalestudy.daleseo.workers.dev"
36+
repo_owner="${{ github.repository_owner }}"
37+
repo_name="${{ github.event.repository.name }}"
38+
39+
echo "$prs" | jq -c '.[]' | while read -r pr; do
40+
pr_number=$(echo $pr | jq -r '.number')
41+
labels=$(echo $pr | jq -r '.labels[].name' | tr '\n' ',')
42+
43+
# maintenance ๋ผ๋ฒจ์ด ์žˆ์œผ๋ฉด ์Šคํ‚ต
44+
if echo "$labels" | grep -q "maintenance"; then
45+
echo "โญ๏ธ PR #$pr_number: maintenance ๋ผ๋ฒจ - ์Šคํ‚ต"
46+
continue
47+
fi
48+
49+
echo ""
50+
echo "๐Ÿ” PR #$pr_number ๊ฒ€์‚ฌ ์ค‘..."
51+
52+
# GitHub App์œผ๋กœ Week ์„ค์ • ํ™•์ธ
53+
response=$(curl -s -X POST "$WORKER_URL" \
54+
-H "Content-Type: application/json" \
55+
-d "{\"pr_number\": $pr_number, \"repo_owner\": \"$repo_owner\", \"repo_name\": \"$repo_name\"}")
56+
57+
week=$(echo $response | jq -r '.week')
58+
project_found=$(echo $response | jq -r '.project_found')
59+
60+
echo " Week: $week"
61+
echo " Project found: $project_found"
62+
63+
# Week ์„ค์ •์ด ์—†์œผ๋ฉด ๋Œ“๊ธ€ ์ž‘์„ฑ
64+
if [ "$week" = "null" ] || [ -z "$week" ]; then
65+
echo " โš ๏ธ Week ์„ค์ • ๋ˆ„๋ฝ - ๋Œ“๊ธ€ ์ž‘์„ฑ"
66+
67+
# ์ด๋ฏธ ๋ด‡์ด ๋Œ“๊ธ€์„ ๋‹ฌ์•˜๋Š”์ง€ ํ™•์ธ
68+
existing_comment=$(gh pr view $pr_number \
69+
--repo ${{ github.repository }} \
70+
--json comments \
71+
--jq '.comments[] | select(.author.login == "github-actions[bot]") | select(.body | contains("Week ์„ค์ •์ด ๋ˆ„๋ฝ")) | .id' \
72+
| head -n 1)
73+
74+
if [ -z "$existing_comment" ]; then
75+
# ์ƒˆ ๋Œ“๊ธ€ ์ž‘์„ฑ
76+
COMMENT_BODY="## โš ๏ธ Week ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค
77+
78+
ํ”„๋กœ์ ํŠธ์—์„œ Week๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”!
79+
80+
### ์„ค์ • ๋ฐฉ๋ฒ•
81+
1. PR ์šฐ์ธก์˜ \`Projects\` ์„น์…˜์—์„œ \`๋ฆฌํŠธ์ฝ”๋“œ ์Šคํ„ฐ๋””\` ์˜† ๋“œ๋กญ๋‹ค์šด(โ–ผ) ํด๋ฆญ
82+
2. ํ˜„์žฌ ์ฃผ์ฐจ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” (์˜ˆ: \`Week 14(current)\` ๋˜๋Š” \`Week 14\`)
83+
84+
๐Ÿ“š [์ž์„ธํ•œ ๊ฐ€์ด๋“œ ๋ณด๊ธฐ](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)
85+
86+
---
87+
๐Ÿค– ์ด ๋Œ“๊ธ€์€ GitHub App์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค."
88+
89+
gh pr comment $pr_number \
90+
--repo ${{ github.repository }} \
91+
--body "$COMMENT_BODY"
92+
echo " โœ… ๋Œ“๊ธ€ ์ž‘์„ฑ ์™„๋ฃŒ"
93+
else
94+
echo " โ„น๏ธ ์ด๋ฏธ ์•Œ๋ฆผ ๋Œ“๊ธ€์ด ์žˆ์Œ - ์Šคํ‚ต"
95+
fi
96+
else
97+
echo " โœ… Week ์„ค์ • ์ •์ƒ: $week"
98+
fi
99+
done
100+
env:
101+
GH_TOKEN: ${{ github.token }}
102+
103+
- name: Summary
104+
run: |
105+
echo "## ๐ŸŽฏ Week ์„ค์ • ์ฒดํฌ ์™„๋ฃŒ" >> $GITHUB_STEP_SUMMARY
106+
echo "" >> $GITHUB_STEP_SUMMARY
107+
echo "๋ชจ๋“  Open PR์˜ Week ์„ค์ •์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค." >> $GITHUB_STEP_SUMMARY
108+
echo "" >> $GITHUB_STEP_SUMMARY
109+
echo "- Week ์„ค์ •์ด ์—†๋Š” PR์— ์ž๋™์œผ๋กœ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค." >> $GITHUB_STEP_SUMMARY
110+
echo "- ๋‹ค์Œ ์ฒดํฌ: $(date -u -d '+1 hour' +'%Y-%m-%d %H:00 UTC')" >> $GITHUB_STEP_SUMMARY
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
name: Check Project Week ๐Ÿ—“๏ธ
2+
3+
on:
4+
pull_request:
5+
types: [opened, reopened, synchronize, edited, labeled, unlabeled]
6+
workflow_dispatch: # ์ˆ˜๋™ ์‹คํ–‰
7+
inputs:
8+
pr_number:
9+
description: 'PR ๋ฒˆํ˜ธ'
10+
required: true
11+
type: number
12+
issue_comment: # PR ๋Œ“๊ธ€๋กœ ์žฌ์‹คํ–‰
13+
types: [created]
14+
15+
jobs:
16+
check-project:
17+
runs-on: ubuntu-latest
18+
# issue_comment ์ด๋ฒคํŠธ๋Š” /check-week ๋ช…๋ น์–ด๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰
19+
if: |
20+
github.event_name != 'issue_comment' ||
21+
(github.event.issue.pull_request && contains(github.event.comment.body, '/check-week'))
22+
permissions:
23+
contents: read
24+
pull-requests: read
25+
26+
steps:
27+
# PR ๋ฒˆํ˜ธ ๊ฒฐ์ •
28+
- name: Determine PR number
29+
id: pr-info
30+
run: |
31+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
32+
pr_number="${{ inputs.pr_number }}"
33+
elif [ "${{ github.event_name }}" = "issue_comment" ]; then
34+
pr_number="${{ github.event.issue.number }}"
35+
else
36+
pr_number="${{ github.event.pull_request.number }}"
37+
fi
38+
echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
39+
echo "๐Ÿ” PR ๋ฒˆํ˜ธ: $pr_number"
40+
41+
# PR ๋ผ๋ฒจ ํ™•์ธ
42+
- name: Get PR labels
43+
id: pr-labels
44+
run: |
45+
pr_number="${{ steps.pr-info.outputs.pr_number }}"
46+
repo="${{ github.repository }}"
47+
48+
echo "๐Ÿ“‹ PR ๋ผ๋ฒจ ์กฐํšŒ ์ค‘..."
49+
labels_json=$(gh pr view $pr_number --repo $repo --json labels -q '.labels[].name')
50+
echo "ํ™•์ธ๋œ ๋ผ๋ฒจ: $labels_json"
51+
52+
if [ -n "$labels_json" ]; then
53+
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
54+
echo "maintenance ๋ผ๋ฒจ ํฌํ•จ ์—ฌ๋ถ€: $has_maintenance"
55+
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
56+
else
57+
echo "maintenance ๋ผ๋ฒจ์ด ์—†๋Š” PR์ž…๋‹ˆ๋‹ค. Week ์„ค์ •์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค."
58+
echo "has_maintenance=false" >> $GITHUB_OUTPUT
59+
fi
60+
env:
61+
GH_TOKEN: ${{ github.token }}
62+
63+
# Week ์„ค์ • ํ™•์ธ (Cloudflare Worker ํ˜ธ์ถœ)
64+
- name: Check Week setting in project
65+
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
66+
run: |
67+
echo "๐Ÿ” Week ์„ค์ • ๊ฒ€์‚ฌ ์‹œ์ž‘"
68+
pr_number="${{ steps.pr-info.outputs.pr_number }}"
69+
repo_owner="${{ github.repository_owner }}"
70+
repo_name="${{ github.event.repository.name }}"
71+
72+
WORKER_URL="https://dalestudy.daleseo.workers.dev"
73+
74+
echo "๐Ÿ“‹ Cloudflare Worker๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ •๋ณด ์กฐํšŒ ์ค‘..."
75+
response=$(curl -s -X POST "$WORKER_URL" \
76+
-H "Content-Type: application/json" \
77+
-d "{\"pr_number\": $pr_number, \"repo_owner\": \"$repo_owner\", \"repo_name\": \"$repo_name\"}")
78+
79+
echo "์‘๋‹ต: $response"
80+
81+
# ์—๋Ÿฌ ์ฒดํฌ
82+
if echo "$response" | jq -e '.error' > /dev/null; then
83+
error_msg=$(echo "$response" | jq -r '.error')
84+
echo "โš ๏ธ Worker ์—๋Ÿฌ: $error_msg"
85+
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
86+
echo "" >> $GITHUB_STEP_SUMMARY
87+
echo "ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: $error_msg" >> $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+
# Week ๊ฐ’ ์ถ”์ถœ
94+
week_value=$(echo "$response" | jq -r '.week')
95+
project_found=$(echo "$response" | jq -r '.project_found')
96+
97+
echo "์ถ”์ถœ๋œ Week ๊ฐ’: '$week_value'"
98+
echo "ํ”„๋กœ์ ํŠธ ๋ฐœ๊ฒฌ ์—ฌ๋ถ€: $project_found"
99+
100+
if [ "$week_value" = "null" ] || [ -z "$week_value" ]; then
101+
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
102+
echo "" >> $GITHUB_STEP_SUMMARY
103+
echo "โš ๏ธ **PR์— Week ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!**" >> $GITHUB_STEP_SUMMARY
104+
echo "" >> $GITHUB_STEP_SUMMARY
105+
echo "### ์„ค์ • ๋ฐฉ๋ฒ•" >> $GITHUB_STEP_SUMMARY
106+
echo "1. PR ์šฐ์ธก์˜ \`Projects\` ์„น์…˜์—์„œ \`๋ฆฌํŠธ์ฝ”๋“œ ์Šคํ„ฐ๋””\` ์˜† ๋“œ๋กญ๋‹ค์šด(โ–ผ) ํด๋ฆญ" >> $GITHUB_STEP_SUMMARY
107+
echo "2. ํ˜„์žฌ ์ฃผ์ฐจ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” (์˜ˆ: \`Week 14(current)\` ๋˜๋Š” \`Week 14\`)" >> $GITHUB_STEP_SUMMARY
108+
echo "" >> $GITHUB_STEP_SUMMARY
109+
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
110+
exit 1
111+
fi
112+
113+
echo "## โœ… Week ์„ค์ • ๊ฒ€์ฆ ์„ฑ๊ณต" >> $GITHUB_STEP_SUMMARY
114+
echo "" >> $GITHUB_STEP_SUMMARY
115+
echo "Week ์„ค์ •: **$week_value**" >> $GITHUB_STEP_SUMMARY
116+
echo "โœ… Week ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!"

0 commit comments

Comments
ย (0)