Management ๐ง #11
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |