Check Open PRs and Notify Slack #6
This file contains 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: 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 |