Skip to content

Commit d681c92

Browse files
committed
use GitHub App
1 parent e1adcc7 commit d681c92

File tree

2 files changed

+219
-0
lines changed

2 files changed

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