GitHub - EeeasyCode/github-slack-bot: 쌓여있는 PR을 Github-Action + Slack 으로 알림받자! (feat. 개발 생산성 증가)
GitHub
안녕하세요, 신입 백엔드 개발자 EasyCode입니다! 최근에 취업을 하고 업무 파악을 위해 회사 Github를 둘러보던 중, PR(Pull Request)들이 많이 쌓여있는 것을 보게 되었습니다. 그래서, 업무 파악도 하면서 앞으로 투입될 프로젝트에 도움이 될만한 툴을 만들어 기여하면 어떨까? 라는 생각이 들어 쌓인 PR을 평일 아침에 알림해주는 Slack Bot을 만들어 보았습니다.
(사실 뭐라도 기여해서 좋은 모습을 보여주고 싶었어요..)
# 사용한 스택
Python (3.12)
Github-Action
Slack Bot
# Github-Action
Github-Action의 스케쥴러를 사용하여 main.py의 로직이 지정 시간에 Trigger 될 수 있도록 설정함
name: PR review bot
on:
# 스케쥴러로 실행
schedule:
# utc 기준 9시간을 뺀 값으로 적용해야 함
- cron: "0 0 * * 1-5"
# 직접 action 실행
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
# Python 3.12 환경 설정
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.12
uses: actions/setup-python@v3
with:
python-version: "3.12"
# main.py에 필요한 의존성 설치
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
# env 환경 설정
- name: .env setting
run: |
echo "Git_Token=${{ secrets.GIT_TOKEN }}" >> .env
echo "Git_Repo_Name=${{ secrets.GIT_REPO_NAME }}" >> .env
echo "slack_token=${{ secrets.SLACK_TOKEN }}" >> .env
# python 파일 실행
- name: run main.py
run: |
python main.py
# main.py
PyGithub 라이브러리로 원하는 Github 레포지토리의 PR 항목을 불러온 뒤, Slack을 통해 메시지 전송
from github import Github
import ssl
import certifi
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
from dotenv import load_dotenv
import os
# load .env
load_dotenv()
# using an access token
g = Github(os.environ.get('Git_Token'))
repo = g.get_user().get_repo(os.environ.get('Git_Repo_Name'))
def _get_total_pull_requests():
count = 0
pull_requests_list = []
for pull in repo.get_pulls(
state="open",
sort="updated",
):
pull_requests_list.append(pull)
count += 1
return count, pull_requests_list
count, pulls = _get_total_pull_requests()
ssl_context = ssl.create_default_context(cafile=certifi.where())
slack_token = os.environ.get('slack_token')
client = WebClient(token=slack_token, ssl=ssl_context)
try:
if count > 0:
message = f"<!nest-study> 👋🏻 총 {count}개의 Pull Request가 리뷰를 기다리고 있습니다!\n"
for pull in pulls:
message += pull.title + ' ' + pull.url + '\n'
response = client.chat_postMessage(
channel='#pr-bot',
text=message
)
except SlackApiError as e:
# You will get a SlackApiError if "ok" is False
assert e.response["error"]
ssl, certifi는 github 연결 시, ssl 에러가 발생하여 직접 ssl 설정함
ssl_context = ssl.create_default_context(cafile=certifi.where())
client = WebClient(token=slack_token, ssl=ssl_context)
# 마무리
개발자는 API나 도메인에 관련된 비즈니스 로직을 작성하는 것도 중요하지만, 개발자 경험 개선, 불필요한 업무 자동화 등과 관련된 부분도 다루어 나와 모두의 생산성을 향상시킬 수 있는 부분도 중요하다고 생각합니다. 저는 그래서 이런 환경을 쉽고 간단하게 구축할 수 있는 github-action을 너무너무 좋아합니다.
다음에는 어떤 문제점이나 불편한 부분을 개선시킬 수 있을까요?
https://eeeasycode.tistory.com/7
https://github.com/EeeasyCode/github-slack-bot
다음 내용이 궁금하다면?
이미 회원이신가요?
2024년 2월 9일 오후 12:37
•
조회 319
최근에 친구가 추천해준 데일 카네기의 인간관계론을 읽던 중 고액 연봉을 받는 엔지니어들의 특징에 대한 흥미로운 내용이 있었다.
... 더 보기다
... 더 보기d
최
... 더 보기