Skip to content

Check Open PRs and Notify Slack #579

Check Open PRs and Notify Slack

Check Open PRs and Notify Slack #579

name: Check Open PRs and Notify Slack
on:
schedule:
# 매 1시간마다 실행
- cron: '0 * * * *'
workflow_dispatch: # 수동 실행을 위한 트리거
inputs:
force_notify:
description: 'Force Slack notification'
type: boolean
default: false
jobs:
notify_open_prs:
runs-on: ubuntu-latest
steps:
# 1. GitHub 리포지토리 체크아웃
- name: Checkout repository
uses: actions/checkout@v3
# 2. PR 데이터 수집
- name: Fetch Open PRs with Reviewers
id: fetch_prs
run: |
# 모든 열린 PR 가져오기
prs=$(gh pr list --json number,title,url,reviewRequests --jq '.[] | select(.reviewRequests | length > 0)')
# PR 데이터 출력 (디버깅용)
echo "Found PRs: $prs"
# GITHUB_OUTPUT에 PR 데이터를 저장
echo "prs=$prs" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 3. Slack 알림 전송
- name: Notify Slack
if: steps.fetch_prs.outputs.prs != '' # 열린 PR이 있을 때만 실행
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
echo "Preparing Slack notification..."
# JSON 데이터를 변수에 저장
prs_json='${{ steps.fetch_prs.outputs.prs }}'
# PR 데이터가 비어 있는지 확인
if [ -z "$prs_json" ]; then
echo "No PRs to notify about."
exit 0
fi
# Slack 메시지 작성
message=":rotating_light: *Review가 필요한 Pull Requests 목록*\n\n"
message+=$(echo "$prs_json" | jq -r '"🔹 *<\(.url)|\(.title)>*\n" +
" • 리뷰어: \(.reviewRequests | map(.login) | join(", "))\n\n"')
# Slack 메시지 푸터 추가
message+=$'\n\n'" :point_right: 리뷰를 부탁드립니다!"
# Slack 메시지 확인 (디버깅)
echo "Message to Slack: $message"
# Slack 메시지 전송
curl -X POST \
-H 'Content-type: application/json' \
--data "{\"text\":\"$message\", \"mrkdwn\": true}" \
"$SLACK_WEBHOOK_URL"