diff --git a/.github/workflows/discord-issue.yml b/.github/workflows/discord-issue.yml new file mode 100644 index 000000000..73f8b749b --- /dev/null +++ b/.github/workflows/discord-issue.yml @@ -0,0 +1,61 @@ +name: 깃허브 이슈 생성 시, 디스코드 알림 + +on: + issues: + types: [opened, reopened] + +env: + hwinkr: "@해리" + Yoonkyoungme: "@빙봉" + hw0603: "@페드로" + ikjo39: "@다온" + ehBeak: "@배키" + seokmyungham: "@재즈" + Largopie: "@낙타" + seunghye218: "@마크" + +jobs: + notify_issue: + runs-on: ubuntu-latest + + steps: + - name: 전체 이슈가 등록되면 FE, BE 두 채널 모두 디스코드 알림을 보낸다. + if: github.event.issue && contains(github.event.issue.title, '[ALL]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + LABELS=$(jq -r '.issue.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_LINKS=$(jq -r '.issue.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_MENTIONS=$(jq -r '.issue.assignees | map(env[.login] // .login) | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_MENTION_LINKS=$(jq -r '.issue.assignees | map("[\((env[.login] // .login))](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🍀 **새로운 전체 이슈가 등록되었어요!** 🧚: ${{ github.event.issue.html_url }}\n📂 **제목**: ${{ github.event.issue.title }}\n🕺 **담당 크루**: ${ASSIGNEE_MENTION_LINKS}\n🗝️ **업무 키워드**: ${LABELS}\"}" \ + $FE_DISCORD_WEBHOOK_URL + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🍀 **새로운 전체 이슈가 등록되었어요!** 🧚: ${{ github.event.issue.html_url }}\n📂 **제목**: ${{ github.event.issue.title }}\n🕺 **담당 크루**: ${ASSIGNEE_MENTION_LINKS}\n🗝️ **업무 키워드**: ${LABELS}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + - name: 새로운 프론트엔드 이슈가 등록되면 프론트엔드 채널에 디스코드 알림을 보낸다. + if: github.event.issue && contains(github.event.issue.title, '[FE]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + run: | + LABELS=$(jq -r '.issue.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_LINKS=$(jq -r '.issue.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_MENTIONS=$(jq -r '.issue.assignees | map(env[.login] // .login) | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_MENTION_LINKS=$(jq -r '.issue.assignees | map("[\((env[.login] // .login))](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🍀 **새로운 이슈가 등록되었어요!** 🧚: ${{ github.event.issue.html_url }}\n📂 **제목**: ${{ github.event.issue.title }}\n🕺 **담당 크루**: ${ASSIGNEE_MENTION_LINKS}\n🗝️ **업무 키워드**: ${LABELS}\"}" \ + $FE_DISCORD_WEBHOOK_URL + + - name: 새로운 백엔드 이슈가 등록되면 백엔드 채널에 디스코드 알림을 보낸다. + if: github.event.issue && contains(github.event.issue.title, '[BE]') + env: + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + LABELS=$(jq -r '.issue.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + ASSIGNEE_LINKS=$(jq -r '.issue.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🍀 **새로운 이슈가 등록되었어요!** 🧚: ${{ github.event.issue.html_url }}\n📂 **제목**: ${{ github.event.issue.title }}\n🕺 **담당 크루**: ${ASSIGNEE_LINKS}\n🗝️ **업무 키워드**: ${LABELS}\"}" \ + $BE_DISCORD_WEBHOOK_URL diff --git a/.github/workflows/discord-pull-request.yml b/.github/workflows/discord-pull-request.yml new file mode 100644 index 000000000..d71d664de --- /dev/null +++ b/.github/workflows/discord-pull-request.yml @@ -0,0 +1,76 @@ +name: 깃허브 PR 생성 시, 디스코드 알림 + +on: + pull_request: + types: [opened, reopened, closed] + +env: + hwinkr: "@해리" + Yoonkyoungme: "@빙봉" + hw0603: "@페드로" + ikjo39: "@다온" + ehBeak: "@배키" + seokmyungham: "@재즈" + Largopie: "@낙타" + seunghye218: "@마크" + +jobs: + notify_pr: + runs-on: ubuntu-latest + + steps: + - name: 모든 팀원이 확인해야 하는 PR이 등록되면 FE, BE 두 채널 모두 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request' && github.event.action == 'opened' && contains(github.event.pull_request.title, '[ALL]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + ASSIGNEES=$(jq -r '.pull_request.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🚀 **새로운 전체 PR이 등록되었어요!** 리뷰하러 가볼까요~?\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $FE_DISCORD_WEBHOOK_URL + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🚀 **새로운 전체 PR이 등록되었어요!** 리뷰하러 가볼까요~?\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + - name: 새로운 프론트엔드 PR이 등록되면 프론트엔드 채널에 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request' && github.event.action == 'opened' && contains(github.event.pull_request.title, '[FE]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + run: | + ASSIGNEES=$(jq -r '.pull_request.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🚀 **새로운 프론트엔드 PR이 등록되었어요!** 리뷰하러 가볼까요~?\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $FE_DISCORD_WEBHOOK_URL + + - name: 새로운 백엔드 PR이 등록되면 프론트엔드 채널에 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request' && github.event.action == 'opened' && contains(github.event.pull_request.title, '[BE]') + env: + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + ASSIGNEES=$(jq -r '.pull_request.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"🚀 **새로운 백엔드 PR이 등록되었어요!** 리뷰하러 가볼까요~?\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + notify_merge: + runs-on: ubuntu-latest + + steps: + - name: PR이 머지되면 FE, BE 두 채널 모두 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request' && github.event.action == 'closed' && github.event.pull_request.merged == true + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + ASSIGNEES=$(jq -r '.pull_request.assignees | map("[\(.login)](https://github.com/\(.login))") | join(", ")' < $GITHUB_EVENT_PATH) + LABELS=$(jq -r '.pull_request.labels | map(.name) | join(", ")' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"✅ **PR이 머지되었어요!** 축하합니다~ 👏\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n📜 🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $FE_DISCORD_WEBHOOK_URL + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"✅ **PR이 머지되었어요!** 축하합니다~ 👏\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\n📜 🕺 **담당 크루**: ${ASSIGNEES}\n🔑 **업무 키워드**: ${LABELS}\"}" \ + $BE_DISCORD_WEBHOOK_URL diff --git a/.github/workflows/discord-review.yml b/.github/workflows/discord-review.yml new file mode 100644 index 000000000..22812c4e7 --- /dev/null +++ b/.github/workflows/discord-review.yml @@ -0,0 +1,127 @@ +name: 리뷰 생성 시, 디스코드 알림 + +on: + pull_request_review: + types: [submitted] + issue_comment: + types: [created] + +env: + hwinkr: "@해리" + Yoonkyoungme: "@빙봉" + hw0603: "@페드로" + ikjo39: "@다온" + ehBeak: "@배키" + seokmyungham: "@재즈" + Largopie: "@낙타" + seunghye218: "@마크" + +jobs: + notify_review: + runs-on: ubuntu-latest + + steps: + - name: 모든 팀원이 확인해야 하는 PR에 리뷰가 등록되면 FE, BE 두 채널 모두 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request_review' && contains(github.event.pull_request.title, '[ALL]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + REVIEWER=$(jq -r '.review.user.login' < $GITHUB_EVENT_PATH) + REVIEWER_MENTION=$(printenv $REVIEWER) + if [ -z "$REVIEWER_MENTION" ]; then + REVIEWER_MENTION=$REVIEWER + fi + REVIEWER_LINK="[${REVIEWER_MENTION}](https://github.com/${REVIEWER})" + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${REVIEWER_LINK}님이 새로운 리뷰를 남겼어요! 리뷰를 반영해 주세요.\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\"}" \ + $FE_DISCORD_WEBHOOK_URL + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${REVIEWER_LINK}님이 새로운 리뷰를 남겼어요! 리뷰를 반영해 주세요.\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + - name: 새로운 프론트엔드 리뷰가 등록되면 프론트엔드 채널에 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request_review' && contains(github.event.pull_request.title, '[FE]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + run: | + REVIEWER=$(jq -r '.review.user.login' < $GITHUB_EVENT_PATH) + REVIEWER_MENTION=$(printenv $REVIEWER) + if [ -z "$REVIEWER_MENTION" ]; then + REVIEWER_MENTION=$REVIEWER + fi + REVIEWER_LINK="[${REVIEWER_MENTION}](https://github.com/${REVIEWER})" + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${REVIEWER_LINK}님이 새로운 리뷰를 남겼어요! 리뷰를 반영해 주세요.\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\"}" \ + $FE_DISCORD_WEBHOOK_URL + + - name: 새로운 백엔드 리뷰가 등록되면 백엔드 채널에 디스코드 알림을 보낸다. + if: github.event_name == 'pull_request_review' && contains(github.event.pull_request.title, '[BE]') + env: + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + REVIEWER=$(jq -r '.review.user.login' < $GITHUB_EVENT_PATH) + REVIEWER_MENTION=$(printenv $REVIEWER) + if [ -z "$REVIEWER_MENTION" ]; then + REVIEWER_MENTION=$REVIEWER + fi + REVIEWER_LINK="[${REVIEWER_MENTION}](https://github.com/${REVIEWER})" + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${REVIEWER_LINK}님이 새로운 리뷰를 남겼어요! 리뷰를 반영해 주세요.\n\n🔗 [PR 링크](${{ github.event.pull_request.html_url }})\n📄 **제목**: ${{ github.event.pull_request.title }}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + notify_comment: + runs-on: ubuntu-latest + + steps: + - name: 모든 팀원이 확인해야 하는 PR에 코멘트가 등록되면 FE, BE 두 채널 모두 디스코드 알림을 보낸다. + if: github.event.issue.pull_request && contains(github.event.issue.title, '[ALL]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + COMMENTER=$(jq -r '.comment.user.login' < $GITHUB_EVENT_PATH) + COMMENTER_MENTION=$(printenv $COMMENTER) + if [ -z "$COMMENTER_MENTION" ]; then + COMMENTER_MENTION=$COMMENTER + fi + COMMENTER_LINK="[${COMMENTER_MENTION}](https://github.com/${COMMENTER})" + COMMENT=$(jq -r '.comment.body' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${COMMENTER_LINK}님이 새로운 코멘트를 남겼어요!\n\n🔗 [PR 링크](${{ github.event.issue.pull_request.html_url }})\n📄 **제목**: ${{ github.event.issue.title }}\n🗣️ **코멘트 내용**: ${COMMENT}\"}" \ + $FE_DISCORD_WEBHOOK_URL + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${COMMENTER_LINK}님이 새로운 코멘트를 남겼어요!\n\n🔗 [PR 링크](${{ github.event.issue.pull_request.html_url }})\n📄 **제목**: ${{ github.event.issue.title }}\n🗣️ **코멘트 내용**: ${COMMENT}\"}" \ + $BE_DISCORD_WEBHOOK_URL + + - name: 프론트엔드 PR에 코멘트가 등록되면 디스코드 프론트엔드 채널에 알림을 보낸다. + if: github.event.issue.pull_request && contains(github.event.issue.title, '[FE]') + env: + FE_DISCORD_WEBHOOK_URL: ${{ secrets.FE_DISCORD_WEBHOOK_URL }} + run: | + COMMENTER=$(jq -r '.comment.user.login' < $GITHUB_EVENT_PATH) + COMMENTER_MENTION=$(printenv $COMMENTER) + if [ -z "$COMMENTER_MENTION" ]; then + COMMENTER_MENTION=$COMMENTER + fi + COMMENTER_LINK="[${COMMENTER_MENTION}](https://github.com/${COMMENTER})" + COMMENT=$(jq -r '.comment.body' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${COMMENTER_LINK}님이 새로운 코멘트를 남겼어요!\n\n🔗 [PR 링크](${{ github.event.issue.pull_request.html_url }})\n📄 **제목**: ${{ github.event.issue.title }}\n🗣️ **코멘트 내용**: ${COMMENT}\"}" \ + $FE_DISCORD_WEBHOOK_URL + + - name: 백엔드 PR에 코멘트가 등록되면 디스코드 백엔드 채널에 알림을 보낸다. + if: github.event.issue.pull_request && contains(github.event.issue.title, '[BE]') + env: + BE_DISCORD_WEBHOOK_URL: ${{ secrets.BE_DISCORD_WEBHOOK_URL }} + run: | + COMMENTER=$(jq -r '.comment.user.login' < $GITHUB_EVENT_PATH) + COMMENTER_MENTION=$(printenv $COMMENTER) + if [ -z "$COMMENTER_MENTION" ]; then + COMMENTER_MENTION=$COMMENTER + fi + COMMENTER_LINK="[${COMMENTER_MENTION}](https://github.com/${COMMENTER})" + COMMENT=$(jq -r '.comment.body' < $GITHUB_EVENT_PATH) + curl -H "Content-Type: application/json" \ + -d "{\"content\": \"💬 ${COMMENTER_LINK}님이 새로운 코멘트를 남겼어요!\n\n🔗 [PR 링크](${{ github.event.issue.pull_request.html_url }})\n📄 **제목**: ${{ github.event.issue.title }}\n🗣️ **코멘트 내용**: ${COMMENT}\"}" \ + $BE_DISCORD_WEBHOOK_URL