본문 바로가기
나의 공부

깃허브 릴리즈 노트 자동화 하기 - 2

by 이숴 2023. 10. 2.
반응형

이전 게시물

https://suho0303.tistory.com/55

 

깃허브 릴리즈 노트 자동화 하기 - 1 : 버전 업데이트하기

보이십니까? 대충 관리되어지고 있는 릴리즈 노트와 버전을... 물론 릴리즈 노트는 수동으로 생성할 수도, 수정할 수도 있지만, 매번 CI/CD로 배포가 될 때마다 작성을 해야한다면 여간 귀찮은 작

suho0303.tistory.com

 

이번에는 지난 시간에 동기화한 버전에 맞게 자동으로 릴리즈 노트를 생성하도록 해보겠습니다.

 

저는 릴리즈 노트 생성을 Release Drafter로 구축했습니다.

 

제가 구상했던 릴리즈 노트의 생성 흐름은 다음과 같습니다.

 

1. main(운영 브랜치)에 작업들이 push된다.

2. push된 작업들의 내용, PR들을 확인하여 자동적으로 이슈를 추가되어야한다.

3. 이슈들은 PR의 label 별로 정리된다.


main에 push되어서 실행되게 하는 것은 간단하지만.

깃허브의 content을 읽을 수 있는 권한을 얻어야합니다.

이후 또 릴리즈 노트를 생성할 수 있어야하는 권한도 있어야합니다.

name: Release Drafter

on:
  push:
    branches:
      - main

// 깃허브 읽기 권한 획득
permissions:
    contents: read

jobs:
    update_release_draft:
        permissions:
        	// 릴리즈 노트 쓰기 권한 획득
            contents: write
            pull-requests: write
        runs-on: ubuntu-latest
        steps:
            - uses: release-drafter/release-drafter@v5
              env:
                  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

이렇게 구성한다면 읽기 권한과 쓰기 권한을 얻으면서 main 브랜치에 push되었을때 자동적으로 릴리즈 노트를 생성을 시작하게 됩니다.

위 파일은 .github/workflows/ 에 release-drafter.yml 이름으로 생성해야합니다.(위치 꼭 지켜주셔야합니다!)

 

이때 릴리즈 노트의 생성 자동화를 위한 틀을 만들어야하는데요.

name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"

// PR의 라벨과 맞춰주기
categories:
  - title: "🚀 Features"
    labels: 
      - "🚀 Feature"
      - "♻️ Refactor"
  - title: "🐛 Bug Fixes"
    labels: 
      - "🐛 BugFix"
exclude-labels:
  - "✅ Test"
  - "🛠 Setting"
 
// 실제 릴리즈 노트 생성 시 틀
template: |
  ## 📋 변경점
  $CHANGES
  
// 릴리즈 노트 버전은 PR 라벨로 구분
version-resolver:
  major:
    labels:
      - "major"
  minor:
    labels:
      - "minor"
  patch:
    labels:
      - "patch"
  default: patch
change-template: "- $TITLE (#$NUMBER)"

다음은 릴리즈 노트를 생성할 때, 틀로 사용되는 config 파일입니다.

여기서 실제 릴리즈 노트를 생성하는 방식을 임의로 지정할 수 있습니다.

위 파일의 위치는 .github/ 에 release-drafter.yml 이름으로 생성해야합니다.(위치 꼭 맞추셔야합니다!)

 

릴리즈 노트의 버전은 자동으로 증가되게 할 수도 있지만, 저는 main으로 PR을 열때 추가하는 라벨에 따라서 버전을 정하고 싶기 때문에 RESOLVED_VERSION으로 설정을 하였습니다.

$NEXT_MAJOR_VERSION 다음 메이저 버전 (1.0.1 -> 2.0.0)
$NEXT_MINOR_VERSION 다음 마이너 버전 (1.1.1 -> 1.2.0)
$NEXT_PATCH_VERSION 다음 패치 버전 (1.0.1 -> 1.0.2)
$RESOLVED_VERSION PR 라벨을 기반으로 설정된 다음 버전

그럼 여기서 어떻게 임의로 PR 라벨로 버전을 추가할 수 있을까 하는 궁금증이 있으실텐데요.

version-resolver:
  major:
    labels:
      - "major"
  minor:
    labels:
      - "minor"
  patch:
    labels:
      - "patch"
  default: patch

위 코드는 release-drafter에서 지원하는 라벨 버전 명시 코드입니다. 여기서 PR의 라벨을 확인하고 라벨에 따라서 버전을 증가시켜주는 것입니다.

 

이때 PR에 추가할 라벨은 직접 만드셔야합니다.

PR 라벨

 

 

이렇게하고 이제 PR을 열고 라벨을 추가하여 머지를 하게 되면,

라벨추가
릴리즈노트 초안

다음과 같이 릴리즈 노트란에 Draft라는 라벨이 붙어서 릴리즈노트 초안이 생성되었습니다!

 

release-drafter는 저렇게 회색 라벨로 릴리즈 노트의 초안을 만들어주는 것이기 때문에 다음 릴리즈 노트는 공개되어져 있지 않고 태그도 안되어있는 상태입니다.

 

여기서 초안에서 추가하고 싶은 내용이나 수정하고 싶은 내용을 작성하고

추가/수정 후 update

다시 update를 누르시면,

다음과 같이 업데이트된 버전과 릴리즈 노트가 공개적으로 생성되었습니다!

 

후..이제는 관리되어진 릴리즈 노트들을 보면서 힐링좀 해야겠습니다..

 

 

 

 

 

발생했던 오류

지금은 해결했지만, 기존에 발생했던 오류가 있었고, 이 오류로 다른 개발자분들은 고생하지 마시라고 올려드립니다.

 

아까 과정에서 PR을 머지하고 릴리즈 노트를 생성할 때,

라벨추가

 

?????

다음과 같은 오류가 나신 분이 계실 수도 있으십니다.

 

이것때문에 며칠 머리 박고 알게된 원인으로는

다음과 같이 두 파일의 이름을 맞춰주어야한다는 것입니다.

이름이 달라서 config 파일을 찾지 못하고 있던 것입니다.

 

기존에는

릴리즈 노트 생성 yml : release-drafter.yml

릴리즈 노트 틀 yml : release-drafter-config.yml

과 같은 이름으로 생성했었는데요.

 

config-name에 다음 이름을 작성하고 진행하여도 config를 계속 찾지 못했었는데, yml과 같은 이름인 release-drafter.yml로 생성된 config 파일만 찾고 있던 것입니다.

 

로그에도 정확히 저이름으로 작성하라고 이름이 나와있었지만 생각치 못했네요..

 

지금은 readMe가 업데이트가 되어있는지 Release-drafter 깃허브 리포에서는 수정이 되었지만,

옛날 자료를 봤던 것인지 release-drafter-config.yml로 생성하라고 문구가 있었어서 잘못된 정보로 계속 시도를 하고 있었던 겁니다..

 

어찌되었던 해결했지만, 혹시라도 옛날 자료들을 보시다가 저와 같은 실수를 하시고 계신다면 위 과정을 한번 해보시면 될 것같습니다.

 

감사합니다!

 

 

 

반응형

댓글