요새는 Git을 사용하는 사람도 많아졌고, GitHub에서 개발하는 사람도 많아졌습니다. GitHub에서 개발한다는 이야기는 Pull Request(PR)를 이용해서 workflow를 사용한다는 이야기도 될 수 있을 것 같은데요. Pull Request를 이용하다 보면 관리해줘야 할 것이 있습니다. 바로 Merge된 Branch를 삭제해주는 것입니다.
GitHub에서는 Merge될 경우, 브랜치를 쉽게 삭제할 수도록 "Delete Branch" 버튼을 제공합니다.
혼자 관리하는 리파지토리는 잘 눌러서 살아있는(?) 브랜치만 관리합니다. 그런데, 여러명이 협업하는 리파지토리에서는 이 버튼을 잘 눌러지지 않더라구요. 일단 Merge담당자(Reviewer일 수도 있습니다) 입장에서는 함부로 브랜치를 삭제하기 어렵습니다. 내가 만든 브랜치가 아니고, 이 브랜치가 개발자에게 다시 쓰일지도 모르니까요. 그리고 개발자 입장에서는 내가 만든 PR이 merge되었다는 알림을 받지만, 다시 깃헙에 방문해서 버튼을 눌러야 하거나, 커맨드로 삭제하는 명령을 전송해야 불편함이 있습니다. 그래서 이미 merge된 브랜치가 남아있는 경우가 왕왕있습니다. 일정시간동안 변화가 없는 브랜치들을 확인해서, 지우면서 관리하거나, 엄청나게 많은 브랜치들을 남겨두게 됩니다.
그래서 GitHub Action으로 merge된 브랜치 삭제를 자동화하는 것을 만들어봤습니다.
GitHub Action으로 PR가 Merge 될 때, 브랜치를 삭제할려고 했습니다. 그래서 워크 플로우는 다음과 같이 만들었습니다.
name: RMB
on:
pull_request:
types: [closed]
jobs:
remove_merged_branch_job:
runs-on: ubuntu-latest
steps:
- name: trigger_event_type
env:
GITHUB_EVENT: ${{ toJson(github.event.pull_request)}}
run: echo $GITHUB_EVENT
- name: PR merged
if: github.event.pull_request.merged == true
uses: ikaruce/rmb@v4
with:
github_token: ${{ github.token }}
"PR이 클로즈 될때 merge된 경우, 미리 정의된 Action이 수행되면서 브랜치가 삭제된다." 는 워크플로우입니다. 이렇게 해서 거의 완성하고 마무리 하려고 하는데,
이미 GitHub에 기능으로 추가된 것을 알았습니다. 처음 시작하면서 왜 GitHub Action 중, merge된 브랜치를 삭제해 주는 액션이 없는지 의해했는데, 궁금증이 풀렸습니다. PR에서 merge된 브랜치를 삭제하는 것은 "Settings -> Options -> Merge button 밑에 있는 체크박스를 체크해주면 됩니다.
간단하네요....
<덧붙임>
이걸 하면서 알게 된건데, GitHub Action에서는 PR에서 merged 되었을 때만, 실행되는 이벤트가 없습니다. merged는 closed 이벤트와 같이 실행되고, merge 이벤트를 받으려면, 조건을 걸어 merge에서만 실행되도록 해야 합니다. 이게 조건을 추가로 코딩해야 한다는 귀찮음을 차지하더라도, Action 수행 시간을 늘리게 됩니다. Action 수행시간이 다 돈인데 말이죠. 아래 로그를 보면 더 확실히 아실 수 있습니다.
둘다 동일한 PR을 close, merge했을 때의 로그입니다. 단순히 close만 했을 뿐인데 벌써 수행시간이 22초를 사용했습니다. 불필요한 과정 때문에 안써도 될 리소스를 사용하는게 마음에 들지 않는데, 아직까지는 고칠 생각이 별로 없어 보입니다.