Check Open PRs and Notify Slack #594
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: | |
# 매 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" |