깃허브에 PR 올려두고 깜빡하시는 분들께 필요할걸요..?!

안녕하세요, 신입 백엔드 개발자 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

GitHub - EeeasyCode/github-slack-bot: 쌓여있는 PR을 Github-Action + Slack 으로 알림받자! (feat. 개발 생산성 증가)

GitHub

GitHub - EeeasyCode/github-slack-bot: 쌓여있는 PR을 Github-Action + Slack 으로 알림받자! (feat. 개발 생산성 증가)

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 2월 9일 오후 12:37

 • 

조회 319

댓글 0

    함께 읽은 게시물

    개발자는 개발만 잘하면 될까

    최근에 친구가 추천해준 데일 카네기의 인간관계론을 읽던 중 고액 연봉을 받는 엔지니어들의 특징에 대한 흥미로운 내용이 있었다.

    ... 더 보기

     • 

    저장 14 • 조회 2,661


    < 쿠팡의 창업자를 직접 보며 배운 것: 리더의 크기가 전부다 >

    1

    ... 더 보기

     • 

    댓글 1 • 저장 22 • 조회 1,727


    5년만에 최저치를 기록한 SW 개발자 채용

    ... 더 보기

    5년만에 최저치를 기록한 SW 개발자 채용 공고

    개발자 취업 비법

    5년만에 최저치를 기록한 SW 개발자 채용 공고

    defer, 에러 핸들링과 비동기에서 어떻게 활용할까?

    d

    ... 더 보기

    defer (async throwing contexts)

    iOYES

    defer (async throwing contexts)

    Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

    ... 더 보기

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

    product.kyobobook.co.kr

    쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

     • 

    저장 14 • 조회 1,346


    서버엔지니어의 시대적 고민

    ... 더 보기