Skip to content

Management ๐Ÿ”ง #13

Management ๐Ÿ”ง

Management ๐Ÿ”ง #13

Workflow file for this run

name: Management ๐Ÿ”ง
on:
workflow_dispatch:
inputs:
action:
description: "Action to perform"
required: true
type: choice
default: "approve-prs"
options:
- approve-prs
- merge-prs
week:
description: 'Week number to filter (optional, e.g., "1")'
required: false
type: string
default: ""
exclude_prs:
description: 'PR numbers to exclude (comma-separated, e.g., "1972,1973")'
required: false
type: string
default: ""
jobs:
approve-prs:
name: Approve Open PRs ๐Ÿ‘
runs-on: ubuntu-latest
if: ${{ inputs.action == 'approve-prs' }}
permissions:
contents: read
steps:
- name: Approve PRs via GitHub App
id: approve
run: |
echo "๐Ÿ‘ GitHub App์„ ํ†ตํ•ด ๋ชจ๋“  Open PR ์Šน์ธ ์ค‘..."
# Parse exclude_prs input into JSON array
exclude_input="${{ inputs.exclude_prs }}"
if [ -z "$exclude_input" ]; then
excludes="[]"
else
# Convert "1972,1973" to [1972,1973]
excludes="[$(echo "$exclude_input" | sed 's/,/, /g')]"
fi
# Build request payload
week_input="${{ inputs.week }}"
if [ -z "$week_input" ]; then
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"excludes\": $excludes}"
else
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"week\": \"Week $week_input\", \"excludes\": $excludes}"
fi
echo "์ฃผ์ฐจ ํ•„ํ„ฐ: ${week_input:-์ „์ฒด}"
echo "์ œ์™ธํ•  PR: $excludes"
response=$(curl -s -X POST "https://github.dalestudy.com/approve-prs" \
-H "Content-Type: application/json" \
-d "$payload")
echo "response=$response" >> $GITHUB_OUTPUT
echo "$response" | jq '.'
- name: Summary
run: |
response='${{ steps.approve.outputs.response }}'
success=$(echo "$response" | jq -r '.success // false')
total=$(echo "$response" | jq -r '.total_open_prs // 0')
week_filter=$(echo "$response" | jq -r '.week_filter // null')
week_matched=$(echo "$response" | jq -r '.week_matched // 0')
week_mismatched=$(echo "$response" | jq -r '.week_mismatched // 0')
solving_excluded=$(echo "$response" | jq -r '.solving_excluded // 0')
processed=$(echo "$response" | jq -r '.processed // 0')
approved=$(echo "$response" | jq -r '.approved // 0')
skipped=$(echo "$response" | jq -r '.skipped // 0')
echo "## ๐Ÿ‘ PR ์Šน์ธ ์™„๋ฃŒ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "$success" = "true" ]; then
echo "โœ… **์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค**" >> $GITHUB_STEP_SUMMARY
else
echo "โŒ **์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค**" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
if [ "$week_filter" != "null" ]; then
echo "- ๐Ÿ—“๏ธ ์ฃผ์ฐจ ํ•„ํ„ฐ: **$week_filter**" >> $GITHUB_STEP_SUMMARY
fi
echo "- ๐Ÿ“‹ ์ „์ฒด Open PR: **$total**๊ฐœ" >> $GITHUB_STEP_SUMMARY
if [ "$week_filter" != "null" ]; then
echo "- โœ… $week_filter ๋งค์นญ: **$week_matched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โŒ Week ๋ถˆ์ผ์น˜: **$week_mismatched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- ๐Ÿ”„ Solving ์ƒํƒœ ์ œ์™ธ: **$solving_excluded**๊ฐœ" >> $GITHUB_STEP_SUMMARY
fi
echo "- ๐Ÿ” ๊ฒ€์‚ฌํ•œ PR: **$processed**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โœ… ์Šน์ธํ•œ PR: **$approved**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โญ๏ธ ๊ฑด๋„ˆ๋›ด PR: **$skipped**๊ฐœ" >> $GITHUB_STEP_SUMMARY
# Show detailed results if available
result_count=$(echo "$response" | jq -r '.results | length')
if [ "$result_count" -gt 0 ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "### ๐Ÿ“ ์ƒ์„ธ ๊ฒฐ๊ณผ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "$response" | jq -c '.results[]' | while read -r item; do
pr=$(echo "$item" | jq -r '.pr')
title=$(echo "$item" | jq -r '.title')
skipped=$(echo "$item" | jq -r '.skipped // false')
approved=$(echo "$item" | jq -r '.approved // false')
reason=$(echo "$item" | jq -r '.reason // ""')
error=$(echo "$item" | jq -r '.error // ""')
if [ "$skipped" = "true" ]; then
echo "- PR #$pr [$title]: โญ๏ธ skipped ($reason)" >> $GITHUB_STEP_SUMMARY
elif [ "$approved" = "true" ]; then
echo "- PR #$pr [$title]: โœ… approved" >> $GITHUB_STEP_SUMMARY
else
echo "- PR #$pr [$title]: โŒ failed (${error:-unknown})" >> $GITHUB_STEP_SUMMARY
fi
done
fi
merge-prs:
name: Merge Open PRs ๐Ÿš€
runs-on: ubuntu-latest
if: ${{ inputs.action == 'merge-prs' }}
permissions:
contents: read
steps:
- name: Merge PRs via GitHub App
id: merge
run: |
echo "๐Ÿš€ GitHub App์„ ํ†ตํ•ด ๋ชจ๋“  ์Šน์ธ๋œ PR ๋จธ์ง€ ์ค‘..."
# Parse exclude_prs input into JSON array
exclude_input="${{ inputs.exclude_prs }}"
if [ -z "$exclude_input" ]; then
excludes="[]"
else
# Convert "1972,1973" to [1972,1973]
excludes="[$(echo "$exclude_input" | sed 's/,/, /g')]"
fi
# Build request payload
week_input="${{ inputs.week }}"
merge_method="merge"
if [ -z "$week_input" ]; then
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"merge_method\": \"$merge_method\", \"excludes\": $excludes}"
else
payload="{\"repo_name\": \"${{ github.event.repository.name }}\", \"merge_method\": \"$merge_method\", \"week\": \"Week $week_input\", \"excludes\": $excludes}"
fi
echo "๋จธ์ง€ ๋ฐฉ์‹: $merge_method"
echo "์ฃผ์ฐจ ํ•„ํ„ฐ: ${week_input:-์ „์ฒด}"
echo "์ œ์™ธํ•  PR: $excludes"
response=$(curl -s -X POST "https://github.dalestudy.com/merge-prs" \
-H "Content-Type: application/json" \
-d "$payload")
echo "response=$response" >> $GITHUB_OUTPUT
echo "$response" | jq '.'
- name: Summary
run: |
response='${{ steps.merge.outputs.response }}'
success=$(echo "$response" | jq -r '.success // false')
total=$(echo "$response" | jq -r '.total_open_prs // 0')
week_filter=$(echo "$response" | jq -r '.week_filter // null')
week_matched=$(echo "$response" | jq -r '.week_matched // 0')
week_mismatched=$(echo "$response" | jq -r '.week_mismatched // 0')
solving_excluded=$(echo "$response" | jq -r '.solving_excluded // 0')
processed=$(echo "$response" | jq -r '.processed // 0')
merged=$(echo "$response" | jq -r '.merged // 0')
skipped=$(echo "$response" | jq -r '.skipped // 0')
merge_method=$(echo "$response" | jq -r '.merge_method // "unknown"')
echo "## ๐Ÿš€ PR ๋จธ์ง€ ์™„๋ฃŒ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "$success" = "true" ]; then
echo "โœ… **์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค**" >> $GITHUB_STEP_SUMMARY
else
echo "โŒ **์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค**" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "- ๐Ÿ”ง ๋จธ์ง€ ๋ฐฉ์‹: **$merge_method**" >> $GITHUB_STEP_SUMMARY
if [ "$week_filter" != "null" ]; then
echo "- ๐Ÿ—“๏ธ ์ฃผ์ฐจ ํ•„ํ„ฐ: **$week_filter**" >> $GITHUB_STEP_SUMMARY
fi
echo "- ๐Ÿ“‹ ์ „์ฒด Open PR: **$total**๊ฐœ" >> $GITHUB_STEP_SUMMARY
if [ "$week_filter" != "null" ]; then
echo "- โœ… $week_filter ๋งค์นญ: **$week_matched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โŒ Week ๋ถˆ์ผ์น˜: **$week_mismatched**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- ๐Ÿ”„ Solving ์ƒํƒœ ์ œ์™ธ: **$solving_excluded**๊ฐœ" >> $GITHUB_STEP_SUMMARY
fi
echo "- ๐Ÿ” ๊ฒ€์‚ฌํ•œ PR: **$processed**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โœ… ๋จธ์ง€ํ•œ PR: **$merged**๊ฐœ" >> $GITHUB_STEP_SUMMARY
echo "- โญ๏ธ ๊ฑด๋„ˆ๋›ด PR: **$skipped**๊ฐœ" >> $GITHUB_STEP_SUMMARY
# Show detailed results if available
result_count=$(echo "$response" | jq -r '.results | length')
if [ "$result_count" -gt 0 ]; then
echo "" >> $GITHUB_STEP_SUMMARY
echo "### ๐Ÿ“ ์ƒ์„ธ ๊ฒฐ๊ณผ" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "$response" | jq -c '.results[]' | while read -r item; do
pr=$(echo "$item" | jq -r '.pr')
title=$(echo "$item" | jq -r '.title')
skipped=$(echo "$item" | jq -r '.skipped // false')
merged=$(echo "$item" | jq -r '.merged // false')
reason=$(echo "$item" | jq -r '.reason // ""')
error=$(echo "$item" | jq -r '.error // ""')
if [ "$skipped" = "true" ]; then
echo "- PR #$pr [$title]: โญ๏ธ skipped ($reason)" >> $GITHUB_STEP_SUMMARY
elif [ "$merged" = "true" ]; then
echo "- PR #$pr [$title]: โœ… merged" >> $GITHUB_STEP_SUMMARY
else
echo "- PR #$pr [$title]: โŒ failed (${error:-unknown})" >> $GITHUB_STEP_SUMMARY
fi
done
fi