상세 컨텐츠

본문 제목

[Github-actions] PR(Pull Request) 자동으로 생성해보자

Git 캐기

by Atlas 2023. 2. 10. 23:46

본문

728x90
반응형

시나리오 :

이전 포스팅으로 작성한

2023.02.07 - [Git 캐기] - [Github-actions] Reviewers & Assignees 자동으로 지정하기

"매번 PR(Pull Request)를 날릴 때마다 Reviewers와 Assignees를 할당하는 반복적인 행동"을 자동화시켜놓고 보니 풀리퀘스트를 생성하는 클릭 몇 번이 귀찮아지기 시작함.. 이 클릭 몇 번도 자동화가 되면 즉, Push 할 때마다 자동으로 Pull Request가 생성하도록 시켜 클릭을 몇  번 더 하는 시간과 비용을 아끼고 싶어서 다시 딥 다이브! 

 

 

 

via GIPHY

 

 

Marketplace에 편하게 쓸 수 있도록 만들어져 있는 라이브러리 Toolkit을 검색해보았다. 

 

서드파티를 사용함에 있어서 고려해야할 것들이 있는데 

1. 많은 사람들이 사용하고 있는가? 

  -> 많은 사람들이 사용한다는 것은 많은 사람들이 미리 사용하고 불편한 점들이 개선되어 있을 가능성이 높다. 

2. 최신 업데이트 한 날짜가 언제인가?

  -> 소프트웨어의 업데이트에 맞춰 해당 기능을 지원하고 개선하고 있다는 것을 알 수 있다. 

 

만약에 사람들이 많이 사용하지도 않고, 새롭게 나오는 소프트웨어에 대한 지원등을 하지 않고 있다면 사용하지 않는 것이 좋다. (고려하지 않고 라이브러리가 편하다고 사용하다 보면 나중에 프로젝트를 엎고 새로 진행해야 할 수도 있다)

 

 

Simple is the best

 

내가 선호하는 학습 방법 중 하나로, 복잡해 보일 수록 조각조각단위로 접근하기 위해 최대한 심플하게 구현해 보면서 전반적인 흐름을 이해하고 그다음 세세하게 뜯고 맛보며 즐겨보는 것이다. 

 

손 가라을 튕겨 쭈-욱 내리다가 "Just Create A Pull  Request"가 오! 사용하기 심플해 보인다!라고 생각해서 자세히 한번 보았다.

 

 

 

그래도 습관처럼 확인을 스-윽 해보니 작년 10월(2022년)이 마지막이지만 대응도 잘해주고 있고, 최신 릴리즈가 작년 12월이면 합격! 

 

 

바로 사용해보자.

 

 

Secrets에 토큰을 등록하는 방법은 다른 포스팅으로 자세히 한번 정리해야겠다.

간단히 정리하면 Settings -> 좌측 Security -> Secrets and variables -> Actions 클릭! 

 

 

우측 상단에 New repository secret을 통해 생성이 가능합니다 

 

 

Persnal access tokens 생선 하는 방법은 

프로필클릭 -> Settings -> Developer settings -> Persnal access tokens -> 생성! 

 

Fine-grained tokens? 처음 보는 것인데 베타니까 잠시 보류하고 Tokens(classic)으로 생성해서 사용하면 된다. 

키 생성 시 필요한 권한을 잘 판단해서 체크체크! 하도록 하자.

 

 

이런 과정들을 통해 생성한 키를 등록하면 이렇게 등록된 화면을 확인할 수 있고, workflow에서 secrets.PAT_CREATE_PULL_REQUEST를 통해 해당 값을 가져올 수 있다. 

 

 

 

워크플로우를 생성해 보자. 

name: "Create PR"    ## 워크플로우명
on: push             ## 감지할 이벤트 -> Push 이벤트 감지! 

jobs: 							## job 설정
  create-pr-on-push:            ## 실행할 job 아이디 
    runs-on: ubuntu-latest      ## job 가상환경 인스턴스 
    steps:  					## steps 설정
    - uses: actions/checkout@1.0.0 ## uses를 사용해 외부 설정 가져오기 
    - name: Create pull request    ## step 이름 설정
      uses: thomaseizinger/create-pull-request@master
      with: 					   ## Input 데이터 설정 
        GITHUB_TOKEN: ${{ secrets.PAT_CREATE_PULL_REQUEST }}
        head: ${{ github.ref }}
        base: main
        title: "An automatically created PR!"

 

이대로 사용하기에는 커스텀이 필요하다...  그래서 웹에서 pr을 생성하는 페이지를 보면서 무엇이 필요할까? 생각했다. 

 

1. title에는 commit 메시지를 넣어주도록 하고 

2. Push를 하지만 PR을 생성하는 것을 구분하는 무엇인가? 가 있으면 좋겠다. 2가지 정도 

 

github-actions에서 제공하는 속성들을 yml 파일에서 사용하려면  ${{ }}를 통해서 사용하면 된다. 

자세한 내용은 하단의 공홈레퍼런스를 참조해 보길 추천한다. 

 

속성 설명
github.ref_name 액션을 트리거한 브랜치 이름 
github.ref_type 액션을 실행을 트리거한 유형 

 

 

이렇게 하나씩 추가한 것이 커밋메시지에 [BUG, IMP] 문자열이 포함되어 있는 조건과 제목(title)에는 커밋메시지를 넣어서 보여주도록 추가하였다. 

if: ${{ (contains(github.event.head_commit.message, 'BUG')
	|| contains(github.event.head_commit.message, 'IMP')) }}

title: ${{ github.event.head_commit.message }}

 

 

브랜치를 생성할 때도 이런 그라운드 룰을 정해서 하는 편인데 그러다 보니 Merge를 할 때도 타이틀에 포함된 브랜치명이 BUG, IMP가 포함되다 보니 의도하지 않은? 동작이 발생해서 당황했다. (이것도 다 비용이니.. 최대한 아껴 써야지.ㅠㅠ )

 

그래서 github.event.pull_request.merged == false  조건을 추가했다. 

if: ${{ (contains(github.event.head_commit.message, 'BUG')
	|| contains(github.event.head_commit.message, 'IMP')) }}
	&& github.event.pull_request.merged == false

 

그렇게 완성한 워크플로우!! 

name: "Create PR"
on: push

jobs:
  create-pr-on-push:
    if: ${{ (contains(github.event.head_commit.message, 'BUG') || contains(github.event.head_commit.message, 'IMP'))  && github.event.pull_request.merged == false }}
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@1.0.0
    - name: Create pull request
      uses: thomaseizinger/create-pull-request@master
      with:
        GITHUB_TOKEN: ${{ secrets.PAT_CREATE_PULL_REQUEST }}
        head: ${{ github.ref }}
        base: main
        title: ${{ github.event.head_commit.message }}

 

실행해 보니 아주 흡족스럽게 잘되었다. 

 

왼쪽 이미지는 if 조건문에 걸려서 skip 이 된 상황 오른쪽 이미지는 성공적으로 PR이 생성된 경우 이다. 

휴우... 귀차니즘을 해결하기 위해 하얗게 불태웠다... 

 

 

 

마무리 

사실.. 뚝딱뚝딱한 거 같지만 엄청난 시도 횟수와...

 

오늘 하루 업을 바꾸어 엄청난 삽집을 통해서 만들어 낸 결과물이다...

 

 

ps. 삽집의 연속에서 날 꺼내준 Life-saver 라이언 고마워요!!!

 

 

 

ref.

 

https://docs.github.com/en/actions/learn-github-actions/contexts

 

Contexts - GitHub Docs

About contexts Contexts are a way to access information about workflow runs, variables, runner environments, jobs, and steps. Each context is an object that contains properties, which can be strings or other objects. Contexts, objects, and properties will

docs.github.com

 

반응형

'Git 캐기' 카테고리의 다른 글

[Github-actions] Reviewers & Assignees 자동으로 지정하기  (0) 2023.02.07

관련글 더보기

댓글 영역