Skip to content

Commit fa26f04

Browse files
committed
use GitHub App
1 parent e1adcc7 commit fa26f04

File tree

2 files changed

+217
-0
lines changed

2 files changed

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