GitHub에서 개발을 하다 보면 아직 완료되지 않은 PR(Pull Request)이 누군가의 선의 혹은 실수로 Merge 되는 경우가 종종 발생합니다. 이런 불상사를 막기 위해 여러 시도들을 해봤는데요, 제목에 WIP를 표시해서 작업 중이라고 표시하기, 리뷰가 완료되지 않은 PR은 메인스트림으로 머지되지 않게 설정하기 등등을 해보지만, 물리적으로 이런 불상사를 막지 못합니다. ( GitLab에는 이런 것을 막는 기능이 있네요. )
GitHub에서 GitHub Action을 이용해서 이런 작업중인 PR이 머지되지 않도록 하는 방법을 알아봤습니다.
1. GitHub Action이란?
GitHub 에서 제공하는 CI/CD를 관리할 수 있는 Workflow를 정의할 수 있는 기능이라고 할 수 있습니다. 즉 빌드, 테스트, 배포 등을 수행할 수 있는 기능입니다. Action이 있기 전까지는 Travis나 CircleCI, Jenkins를 이용해야 했었습니다만, 이제는 간단한 클릭 몇 번 만으로 기능을 넣을 수 있습니다. 물론 빌드 배포를 위한 Workflow를 정의해야 하지만, GitHub 답게 웬만한 Workflow는 Market Place에 있는 것 같습니다.
2. 준비물
작업중인 branch가 Merge 되지 않도록 보호된 브랜치가 필요합니다. 무료 계정의 경우, public 리파지토리에서만 설정 가능합니다. Settings -> Branches -> Branch protection rules -> Add rule을 클릭하고 다음과 같이 설정해 줍니다.
3. GitHub Action 추가하기.
이제 Actions를 클릭하고 Action을 추가해 줍니다. 액션 설정 화면에서 set up a workflow yourself를 클릭합니다.
workflow 작성화면이 나오면 우측 마켓플레이스에서 'wip'를 검색합니다. ( 마켓플레이스가 보이지 않을 경우, 창 크기를 늘려보세요. )
검색된 것 중 첫번째 WIP를 선택하고, View full Marketplace listing 링크를 클릭하여 이동합니다. 이후 나오는 코드를 복사하여 main.yml ( 파일명은 변경하셔도 됩니다. )에 적어 주고 커밋합니다.
name: WIP
on:
pull_request:
types: [ opened, synchronize, reopened, edited ]
jobs:
wip:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: wip/action@v1.0.0
이제 설정은 마쳤으니, PR을 만들어서 확인하면 됩니다.
4. WIP로 PR 해보기
제목에 "[WIP] 라고 표시해 준후 PR을 만들어 줍니다.
PR이 생성되고 나면 잠시 후, 작업 중이기에 Action이 진행되는 것을 확인할 수 있습니다. 그런데 Merge버튼이 그대로 활성화돼있는 것을 확인하고, 다시 Branch Protection Rule을 수정해 줍니다. 아까 생성한 규칙을 수정하려 와보면 WIP선택 옵션이 추가된 것을 보실 수 있고, 모두 선택해 주세요.
이제 다시 PR로 돌아와 보면 짜잔,
이 후에는 WIP가 붙어있는 경우 Merge되지 않습니다. GitHub Action으로 리파지토리에 소스코드를 함부로 머지할 수 없도록 만들었습니다. 손쉽게 기능을 추가할 수 있다는 점이 참 좋은것 같습니다 하지만, 실제 업무에 적용하려면 비용 산정이 필요할 것 같습니다. 당연하게도 일정 양까지만 무료로 제공하기 때문이죠.
끝.