Management π§ #8
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 |