Skip to content

Check Open PRs and Notify Slack #6

Check Open PRs and Notify Slack

Check Open PRs and Notify Slack #6

name: Check Open PRs and Notify Slack
on:
schedule:
- cron: '0 * * * *' # 매 1시간마다 실행
workflow_dispatch: # 수동 실행을 위한 트리거
inputs:
force_notify:
description: "Force Slack notification"
type: boolean
default: false
jobs:
notify_open_prs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Fetch Open PRs with Reviewers
id: fetch_prs
run: |
# 더 자세한 PR 정보를 포함하여 가져오기
prs=$(gh pr list --json number,title,url,reviewRequests,author,createdAt,body,additions,deletions,changedFiles --jq '.[] | select(.reviewRequests | length > 0)')
echo "prs=$prs" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Notify Slack
if: steps.fetch_prs.outputs.prs != ''
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
echo "Preparing Slack notification..."
prs_json='${{ steps.fetch_prs.outputs.prs }}'
if [ -z "$prs_json" ]; then
echo "No PRs to notify about."
exit 0
fi
# Slack 메시지 헤더
message=":rotating_light: *Review가 필요한 Pull Requests 목록*\n\n"
# 각 PR에 대한 상세 정보 추가
echo $prs_json | jq -r '.[] | "🔹 *<\(.url)|\(.title)>*\n" +
" • 작성자: \(.author.login)\n" +
" • 생성일: \(.createdAt | fromdate | strftime("%Y-%m-%d %H:%M"))\n" +
" • 변경사항: +\(.additions) -\(.deletions) (\(.changedFiles)개 파일)\n" +
" • 리뷰어: \(.reviewRequests | map(.login) | join(", "))\n" +
if .body then " • 설명: \(.body | split("\n")[0] | if length > 100 then (.[0:100] + "...") else . end)\n" else "" end +
"\n"' | while read -r line; do
message+="$line"
done
# 메시지 푸터 추가
message+="\n:point_right: 리뷰를 부탁드립니다!"
# Slack 메시지 전송
curl -X POST \
-H 'Content-type: application/json' \
--data "{\"text\":\"$message\", \"mrkdwn\": true}" \
$SLACK_WEBHOOK_URL