이 액션은 다른 Github에서 발생되는 PR, Reviewer, Comment 등의 이벤트를 Slack으로 전송합니다.
Slack으로 전송될 때, Reviewer나 PR owner의 경우 Github의 Profile name이랑 Mapping 시켜서 맨션을 걸도록 했습니다.
Channel은 해당 Github user가 속해있는 Github member기준으로 나눠서 Slack channel과 Mapping 시켜서 전송하도록 했습니다.
Handler code의 GITHUB_TEAM_SLUGS
, SLACK_CHANNEL
을 기준으로 Mapping 시킵니다.
사용하실 때 aitrics-bot을 적용할 repo에 맴버로 등록해줘야 합니다. Github token을 aitrics-bot을 사용하고 있기 때문입니다.
- Node version : 20
- Lint : ESLint (airbnb-base)
- 해당 기능은 한국시간 오전 9시에 한번 트리거 됩니다.
- 트리거 되면 현재 리뷰중인 PR이 Slack 으로 전송됩니다.
- 해당 Noti는 Reviewer가 맨션되도록 되어있습니다.
- 해당 기능은 PR이 Approve 되었을 때 트리거 됩니다.
- 해당 기능은 PR에 Comment가 달렸을 때 트리거 됩니다.
- Comment가 달리면 해당 PR의 owner혹은 Reviewer에게 Slack으로 전송됩니다.
- 마찬가지로 맨션되도록 되어있습니다.
- 대댓글이 달려도 Noti를 보냅니다.
- 해당 기능은 PR에 Reviewer가 추가되었을 때 트리거 됩니다.
- Reviewer가 추가되면 해당 Reviewer에게 Slack으로 전송됩니다.
- 마찬가지로 맨션되도록 되어있습니다.
- Reviewer가 PR을 보고 changes requested를 하면 해당 PR의 owner에게 Slack으로 전송됩니다.
- 해당 기능은
workflow_call
로 트리거 할 수 있습니다. - Gitaction을 통한 Deploy가 완료되면 Slack으로 전송됩니다.
- 채널은
#1_rnd-git-deploy
로 고정되어 있습니다. - 성공/실패 여부, 얼마나 걸렸는지, 어느 EC2에 배포되었는지 등이 메시지로 전달됩니다.
SLACK_TOKEN GITHUB_TOKEN ACTION_TYPE
위 3가지는 필수 요소 입니다. (Required)
ACTION_TYPE에는 Function에서 설명한 기능들이 들어가야 합니다.
schedule approve comment review_requested changes_requested
cron:
runs-on: ubuntu-latest
if: github.event_name == 'schedule'
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'schedule'
approval-job:
runs-on: ubuntu-latest
if: github.event.review.state == 'approved'
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'approve'
issue_comment:
if: github.event.issue.pull_request != null || github.event_name == 'pull_request_review_comment'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'comment'
reviewer-requested-job:
runs-on: ubuntu-latest
if: github.event.action == 'review_requested'
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'review_requested'
request-changes-job:
runs-on: ubuntu-latest
if: github.event.review.state == 'changes_requested'
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'changes_requested'
on:
workflow_call:
inputs:
ec2_name:
type: string
image_tag:
type: string
deploy:
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch'
steps:
- uses: actions/checkout@v4
- uses: aitrics/slack@v2
with:
SLACK_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
GITHUB_TOKEN: ${{ secrets.BOT_SECRET_KEY }}
ACTION_TYPE: 'deploy'
EC2_NAME: ${{ inputs.ec2_name }}
IMAGE_TAG: ${{ inputs.image_tag || github.sha }}
JOB_STATUS: ${{ needs.echo-job.result || 'failure' }} //Job 상태를 확인할 수 있는 것이 필요.
- 현재
GITHUB_TEAM_SLUGS
,SLACK_CHANNEL
는 하드코딩 되어 있습니다.
지금은 Dev team에서만 사용하지만, 사용 범위가 점차 확장된다면 Input으로 받는 걸 고려 해야 합니다.
새로운 기능 개발, 개선, 버그 수정 등은 언제든지 환영입니다.
편하게 PR 날려주세요.