Check Open PRs and Notify Slack #3
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" | |
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 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
echo "Fetching open PRs with reviewers..." | |
# gh CLI를 사용해 PR 목록 가져오기 | |
prs=$(gh pr list --json number,title,url,reviewRequests --jq '.[] | select(.reviewRequests | length > 0)') | |
if [ -z "$prs" ]; then | |
echo "No PRs with reviewers found." | |
echo "prs_output=" > $GITHUB_ENV | |
exit 0 | |
fi | |
echo "Found PRs: $prs" | |
echo "prs_output=$prs" >> $GITHUB_ENV | |
# 3. Slack 알림 전송 | |
- name: Notify Slack | |
if: env.PRS_OUTPUT != '' | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
PRS_OUTPUT: ${{ env.PRS_OUTPUT }} | |
run: | | |
echo "Preparing Slack notification..." | |
if [ -z "$PRS_OUTPUT" ]; then | |
echo "No PRs to notify about." | |
exit 0 | |
fi | |
# Slack 메시지 작성 | |
message=":warning: *Open Pull Requests with Reviewers:*" | |
echo "$PRS_OUTPUT" | jq -c '.' | while read -r pr; do | |
title=$(echo $pr | jq -r '.title') | |
url=$(echo $pr | jq -r '.url') | |
reviewers=$(echo $pr | jq -r '.reviewRequests | map(.login) | join(", ")') | |
message+="\n- <$url|$title> (Reviewers: $reviewers)" | |
done | |
# Slack 메시지 전송 | |
curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"$message\"}" $SLACK_WEBHOOK_URL |