Skip to content

PR์—์„œ ํ”„๋กœ์ ํŠธ Week ์„ค์ • ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ CI ์„ค์ • #7

PR์—์„œ ํ”„๋กœ์ ํŠธ Week ์„ค์ • ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ CI ์„ค์ •

PR์—์„œ ํ”„๋กœ์ ํŠธ Week ์„ค์ • ๋ˆ„๋ฝ์„ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•œ CI ์„ค์ • #7

name: Check Project Week ๐Ÿ—“๏ธ
on:
pull_request:
types: [opened, reopened, synchronize, edited, labeled, unlabeled]
workflow_dispatch: # ์ˆ˜๋™ ์‹คํ–‰
inputs:
pr_number:
description: 'PR ๋ฒˆํ˜ธ'
required: true
type: number
issue_comment: # PR ๋Œ“๊ธ€๋กœ ์žฌ์‹คํ–‰
types: [created]
jobs:
check-project:
runs-on: ubuntu-latest
# issue_comment ์ด๋ฒคํŠธ๋Š” /check-week ๋ช…๋ น์–ด๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰
if: |
github.event_name != 'issue_comment' ||
(github.event.issue.pull_request && contains(github.event.comment.body, '/check-week'))
permissions:
contents: read
pull-requests: read
steps:
# PR ๋ฒˆํ˜ธ ๊ฒฐ์ •
- name: Determine PR number
id: pr-info
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
pr_number="${{ inputs.pr_number }}"
elif [ "${{ github.event_name }}" = "issue_comment" ]; then
pr_number="${{ github.event.issue.number }}"
else
pr_number="${{ github.event.pull_request.number }}"
fi
echo "pr_number=$pr_number" >> $GITHUB_OUTPUT
echo "๐Ÿ” PR ๋ฒˆํ˜ธ: $pr_number"
# PR ๋ผ๋ฒจ ํ™•์ธ
- name: Get PR labels
id: pr-labels
run: |
pr_number="${{ steps.pr-info.outputs.pr_number }}"
repo="${{ github.repository }}"
echo "๐Ÿ“‹ PR ๋ผ๋ฒจ ์กฐํšŒ ์ค‘..."
labels_json=$(gh pr view $pr_number --repo $repo --json labels -q '.labels[].name')
echo "ํ™•์ธ๋œ ๋ผ๋ฒจ: $labels_json"
if [ -n "$labels_json" ]; then
has_maintenance=$(echo $labels_json | grep -q 'maintenance' && echo 'true' || echo 'false')
echo "maintenance ๋ผ๋ฒจ ํฌํ•จ ์—ฌ๋ถ€: $has_maintenance"
echo "has_maintenance=$has_maintenance" >> $GITHUB_OUTPUT
else
echo "maintenance ๋ผ๋ฒจ์ด ์—†๋Š” PR์ž…๋‹ˆ๋‹ค. Week ์„ค์ •์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค."
echo "has_maintenance=false" >> $GITHUB_OUTPUT
fi
env:
GH_TOKEN: ${{ github.token }}
# Week ์„ค์ • ํ™•์ธ (Cloudflare Worker ํ˜ธ์ถœ)
- name: Check Week setting in project
if: ${{ steps.pr-labels.outputs.has_maintenance != 'true' }}
run: |
echo "๐Ÿ” Week ์„ค์ • ๊ฒ€์‚ฌ ์‹œ์ž‘"
pr_number="${{ steps.pr-info.outputs.pr_number }}"
repo_owner="${{ github.repository_owner }}"
repo_name="${{ github.event.repository.name }}"
WORKER_URL="https://dalestudy.daleseo.workers.dev"
echo "๐Ÿ“‹ Cloudflare Worker๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ์ •๋ณด ์กฐํšŒ ์ค‘..."
response=$(curl -s -X POST "$WORKER_URL" \
-H "Content-Type: application/json" \
-d "{\"pr_number\": $pr_number, \"repo_owner\": \"$repo_owner\", \"repo_name\": \"$repo_name\"}")
echo "์‘๋‹ต: $response"
# ์—๋Ÿฌ ์ฒดํฌ
if echo "$response" | jq -e '.error' > /dev/null; then
error_msg=$(echo "$response" | jq -r '.error')
echo "โš ๏ธ Worker ์—๋Ÿฌ: $error_msg"
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "ํ”„๋กœ์ ํŠธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค: $error_msg" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
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
exit 1
fi
# Week ๊ฐ’ ์ถ”์ถœ
week_value=$(echo "$response" | jq -r '.week')
project_found=$(echo "$response" | jq -r '.project_found')
echo "์ถ”์ถœ๋œ Week ๊ฐ’: '$week_value'"
echo "ํ”„๋กœ์ ํŠธ ๋ฐœ๊ฒฌ ์—ฌ๋ถ€: $project_found"
if [ "$week_value" = "null" ] || [ -z "$week_value" ]; then
echo "## โŒ Week ์„ค์ • ๊ฒ€์ฆ ์‹คํŒจ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "โš ๏ธ **PR์— Week ์„ค์ •์ด ๋ˆ„๋ฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!**" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### ์„ค์ • ๋ฐฉ๋ฒ•" >> $GITHUB_STEP_SUMMARY
echo "1. PR ์šฐ์ธก์˜ \`Projects\` ์„น์…˜์—์„œ \`๋ฆฌํŠธ์ฝ”๋“œ ์Šคํ„ฐ๋””\` ์˜† ๋“œ๋กญ๋‹ค์šด(โ–ผ) ํด๋ฆญ" >> $GITHUB_STEP_SUMMARY
echo "2. ํ˜„์žฌ ์ฃผ์ฐจ๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š” (์˜ˆ: \`Week 14(current)\` ๋˜๋Š” \`Week 14\`)" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
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
exit 1
fi
echo "## โœ… Week ์„ค์ • ๊ฒ€์ฆ ์„ฑ๊ณต" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "Week ์„ค์ •: **$week_value**" >> $GITHUB_STEP_SUMMARY
echo "โœ… Week ์„ค์ •์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค!"