[FE-Fix] 마감기한을 잘못 계산하던 문제, 다가오는일정 세부 타임라인 화면에서 실제보다 달이 1 적게 출력되던 문제 수정 #314
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 Slack Notification | |
on: | |
pull_request: | |
types: [opened, review_requested] | |
concurrency: | |
group: slack-notification-${{ github.event.pull_request.number }} | |
cancel-in-progress: true | |
jobs: | |
notify_slack: | |
name: Send PR Notification to Reviewers | |
runs-on: ubuntu-latest | |
steps: | |
# 1) 캐시에서 reviewer list 복원 | |
- name: Restore reviewer cache | |
id: cache_restore | |
uses: actions/cache@v3 | |
with: | |
path: ./.reviewer-state # 캐시 저장 경로 | |
key: pr-reviewers-${{ github.event.pull_request.number }} | |
# 2) 이전 reviewer list를 Load | |
- name: Read old reviewer list | |
id: read_old | |
run: | | |
mkdir -p .reviewer-state | |
if [ -f .reviewer-state/old_reviewers.txt ]; then | |
OLD_REVIEWERS=$(cat .reviewer-state/old_reviewers.txt) | |
else | |
OLD_REVIEWERS="" | |
fi | |
echo "old_reviewers=$OLD_REVIEWERS" >> $GITHUB_OUTPUT | |
# 3) 새로운 reviewer list 생성 | |
- name: Prepare new reviewer list | |
id: prepare_new | |
run: | | |
# "requested_reviewers": [{ "login": "kwon204" }, ...] | |
NEW_REVIEWERS=$(jq -r '.pull_request.requested_reviewers | map(.login) | sort | join(",")' $GITHUB_EVENT_PATH) | |
echo "new_reviewers=$NEW_REVIEWERS" | |
echo "new_reviewers=$NEW_REVIEWERS" >> $GITHUB_OUTPUT | |
# 4) reviewer list의 중복 여부 판별 | |
- name: Check if same as old | |
id: check_diff | |
run: | | |
if [ "${{ steps.read_old.outputs.old_reviewers }}" = "${{ steps.prepare_new.outputs.new_reviewers }}" ]; then | |
echo "⚠️ Same reviewer set -> skip notification" | |
echo "skip=true" >> $GITHUB_OUTPUT | |
exit 0 | |
fi | |
echo "✅ New/different reviewer set -> proceed" | |
echo "skip=false" >> $GITHUB_OUTPUT | |
# 5) github - slack 아이디 매핑을 Load | |
- name: Load Slack User Mapping | |
if: ${{ steps.check_diff.outputs.skip == 'false' }} | |
id: load_mapping | |
env: | |
SLACK_USER_MAPPING: ${{ secrets.SLACK_USER_MAPPING }} | |
run: | | |
declare -A USER_MAP | |
while IFS="," read -r key value; do | |
USER_MAP[$key]=$(echo $value | tr -d '"') | |
done < <(echo "$SLACK_USER_MAPPING" | jq -r 'to_entries | map("\(.key),\(.value)") | .[]') | |
REVIEWERS=$(jq -r '.pull_request.requested_reviewers | map(.login) | join(", ")' $GITHUB_EVENT_PATH) | |
MENTION_LIST="" | |
for reviewer in ${REVIEWERS//,/ }; do | |
if [[ -n "${USER_MAP[$reviewer]}" ]]; then | |
MENTION_LIST+="<@${USER_MAP[$reviewer]}> " | |
fi | |
done | |
echo "mention_list=$MENTION_LIST" >> $GITHUB_ENV | |
# 6) Slack 알림 전송 | |
- name: Send Slack Notification | |
if: ${{ steps.check_diff.outputs.skip == 'false' }} | |
env: | |
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | |
PR_TITLE: ${{ github.event.pull_request.title }} | |
PR_URL: ${{ github.event.pull_request.html_url }} | |
PR_CREATOR: ${{ github.event.pull_request.user.login }} | |
PR_REVIEWERS: ${{ env.mention_list }} | |
run: | | |
if [ -z "$PR_REVIEWERS" ]; then | |
echo "No reviewers, skipping Slack notification." | |
exit 0 | |
fi | |
PAYLOAD=$(jq -n \ | |
--arg prCreator "$PR_CREATOR" \ | |
--arg prTitle "$PR_TITLE" \ | |
--arg prUrl "$PR_URL" \ | |
--arg prReviewers "$PR_REVIEWERS" \ | |
'{ | |
text: "📢 *PR 리뷰 요청*\n👤 *작성자*: \($prCreator)\n🔗 *PR*: <\($prUrl)|\($prTitle)>\n🔍 *리뷰어*: \($prReviewers)" | |
}' | |
) | |
curl -X POST -H 'Content-type: application/json' --data "$PAYLOAD" "$SLACK_WEBHOOK_URL" | |
# 7) 새 reviewer list를 임시 파일로 생성 및 캐시에 업데이트 | |
- name: Save new reviewer list | |
if: ${{ steps.check_diff.outputs.skip == 'false' }} | |
run: | | |
mkdir -p .reviewer-state | |
echo "${{ steps.prepare_new.outputs.new_reviewers }}" > .reviewer-state/old_reviewers.txt | |
- name: Save cache | |
if: ${{ steps.check_diff.outputs.skip == 'false' }} | |
uses: actions/cache@v3 | |
with: | |
path: ./.reviewer-state | |
key: pr-reviewers-${{ github.event.pull_request.number }} |