PR Review Slack Notification #1
Workflow file for this run
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: PR Review Slack Notification | |
on: | |
pull_request_review: | |
types: [submitted] | |
jobs: | |
notify_pr_author: | |
runs-on: ubuntu-latest | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_PR_REVIEW_WEBHOOK_URL }} | |
SLACK_IDS: ${{ secrets.SLACK_IDS }} | |
steps: | |
- name: PR 리뷰 시 Slack 알림 보내기 | |
run: | | |
PR_TITLE="${{ github.event.pull_request.title }}" | |
PR_URL="${{ github.event.pull_request.html_url }}" | |
PR_AUTHOR="${{ github.event.pull_request.user.login }}" | |
REVIEW_STATE="${{ github.event.review.state }}" | |
REVIEWER="${{ github.event.review.user.login }}" | |
SLACK_IDS_JSON=$(echo "$SLACK_IDS" | jq -R 'fromjson') | |
if [ $? -ne 0 ]; then | |
echo "Error parsing SLACK_IDS JSON" | |
exit 1 | |
fi | |
get_slack_id() { | |
echo "$SLACK_IDS_JSON" | jq -r --arg github_user "$1" '.[$github_user] // empty' | |
} | |
author_slack_id=$(get_slack_id "$PR_AUTHOR") | |
reviewer_slack_id=$(get_slack_id "$REVIEWER") | |
author_mention="${author_slack_id:+<@$author_slack_id>}" | |
reviewer_mention="${reviewer_slack_id:+<@$reviewer_slack_id>}" | |
author_mention="${author_mention:-$PR_AUTHOR}" | |
reviewer_mention="${reviewer_mention:-$REVIEWER}" | |
case "$REVIEW_STATE" in | |
"changes_requested") | |
message="$author_mention님, $reviewer_mention님이 PR에 변경을 요청했습니다: <$PR_URL|$PR_TITLE>" | |
;; | |
"commented") | |
message="$author_mention님, $reviewer_mention님이 PR에 댓글을 달았습니다: <$PR_URL|$PR_TITLE>" | |
;; | |
"approved") | |
message="$author_mention님, 축하합니다! $reviewer_mention님이 PR을 승인했습니다: <$PR_URL|$PR_TITLE>" | |
;; | |
esac | |
if [ ! -z "$message" ]; then | |
response=$(curl -s -o /dev/null -w "%{http_code}" -X POST -H 'Content-type: application/json' \ | |
--data "{\"text\":\"$message\"}" \ | |
"$SLACK_WEBHOOK_URL") | |
if [ "$response" != "200" ]; then | |
echo "Error sending Slack notification. HTTP status code: $response" | |
exit 1 | |
fi | |
fi |