- 이번 시간에는 병합된 PR의 라벨에 따라 버전을 올리고 release note를 작성해보자!
- 이 작업을 위해, 자동 라벨링을 해주는 labeler-action과 릴리즈 노트를 작성해주는 release drafter 쓴다.
- 대략적인 컨셉은 아래와 같다.
- pull_request가 opened됐을 때
labeler-action
을 사용해 라벨링을 한다. - 이때, pull_request 제목에
feat
가 들어갔다면enhancement
라는 라벨을 지정해준다. - pull_request가 main에 merge되었을 때 release drafter을 사용해 릴리즈 노트를 작성하도록 한다.
- 기본적으로 patch 버전을 올리며, 만약 라벨이
enhancement
인 경우 minor 버전을 올린다.
- pull_request가 opened됐을 때
1. labeler-action 사용하기
🏃 labeler-action을 사용해 각 PR에 대한 라벨링을 한다.
1) 폴더 구조
- 프로젝트에는 아래와 같은 폴더구조로 생성하면 된다.
- workflows/labeler.yml: labeler-action에 대한 workflows를 작성한다. (어떤 조건일 때 실행하자)
- .github/labeler.yml: 어떤 기준으로 라벨링을 하는지 작성한다.
2) workflows/labeler.yml
pull_request가 opened됐을 때 라벨링을 하도록 한다.
(1) 전체 코드보기
name: auto labeling
on:
pull_request:
types: [opened]
branches:
- main
jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
- uses: jimschubert/labeler-action@v1
with:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
(2) 코드 상세보기
- 해당 workflows의 이름을 작성한다.
name: auto labeling
- main을 분기로 pull_request가 opened되었을 때 이 워크 플로우를 실행한다.
name: auto labeling
on:
pull_request: # this
types: [opened]
branches:
- main
- jobs는 step(실행 커멘트)의 잡합으로 작업 제목과 구동 환경을 설정할 수 있다.
- jobs은 병렬적으로 실행되며, 모든 jobs는 job_id를 가진다.
- 아래 코드는 labeler-action 모듈을 실행한다는 내용이다.
jobs:
update_release_draft: # 작업 제목
runs-on: ubuntu-latest # 구동 환경
steps:
- uses: jimschubert/labeler-action@v1 # 사용할 모듈
with:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} # 환경 변수 (토큰은 자동 생성됨)
3) .github/labeler.yml
라벨링에 대한 설정 파일이다.
- 아래 코드는 pull_request 제목에
feat
가 들어갔을 때,enhancement
라는 라벨을 붙인다는 의미이다.
labels:
"enhancement":
- '\bfeat\b'
4) 작동 모습
- main을 분기로 한 PR이 open이 된다.
- 그러면 auto labeling이 작동하는데, 이때 PR제목에 feat가 들어갔으므로 라벨은 enhancement가 된다.
- 만약 PR 제목에 feat가 들어가있지 않다면, 라벨은 추가되지 않는다.
2. Release drafter 사용하기
🏃 Release drafter는 master(혹은 main)에 PR이 병합되었을 때 릴리즈 노트 초안을 작성해준다.
1) 폴더 구조
- 프로젝트에는 아래와 같은 폴더 구조로 생성하면 된다.
- draft-release.yml: release drafter에 대한 workflows를 작성한다. (어떤 조건일 때 실행하자)
- config.yml: 릴리즈 노트 형식과 버전 업 기준에 대한 설정을 작성한다.
2) draft-release.yml
main에 merge되었을 때 릴리즈 노트를 작성하게 하자
(1) 전체 코드보기
# projectName > .github > workflows/draft-release.yml
name: draft-release
on:
pull_request:
types: [closed]
jobs:
draft-release:
runs-on: ubuntu-18.04
if: github.event.pull_request.merged == true && github.base_ref == 'main'
steps:
- name: Release drafter
uses: release-drafter/release-drafter@v5
with:
config-name: config.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
(2) 코드 상세보기
- 해당 workflows의 이름을 작성한다.
name: draft-release # this
- pull_request가 closed되었을 때 이 워크 플로우를 실행한다.
name: draft-release
on: # this
pull_request:
types: [closed]
- 작업(jobs)의 이름은 draft-release이며, 구동환경은 우분투 18.04버전이다.
jobs:
draft-release: # jobs 제목
runs-on: ubuntu-18.04 # 구동 환경
- jobs에서 if를 사용해 특정 조건을 만족했을 때 steps를 실행하도록 할 수 있다.
- 아래 코드는 pull_request가 main에 병합되었을 때 steps를 실행하겠다는 의미이다. ([github 변수 보기])
jobs:
draft-release:
runs-on: ubuntu-18.04
if: github.event.pull_request.merged == true && github.base_ref == 'main' # this
- steps에 있는 내용은 Release drafter을 사용하기 위해 기본적으로 추가해야할 값이다.
jobs:
draft-release:
runs-on: ubuntu-18.04
if: github.event.pull_request.merged == true && github.base_ref == 'main'
steps:
- name: Release drafter # steps 이름
uses: release-drafter/release-drafter@v5 # 사용할 모듈
with:
config-name: config.yml # config 파일 이름
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # 자동 생성되는 환경 변수
3) config.yml
🏃 릴리즈 노트 작성 템플릿과 버전 업에 대한 설정 파일이다.
(1) 전체 코드보기
# projectName/.github/config.yml
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
template: |
## Changes
$CHANGES
version-resolver:
minor:
labels:
- "enhancement"
default: patch
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
(2) 코드 상세보기
Major.minor.patch
중 어떤 버전을 올릴지 정의한다.
변수 | 설명 |
---|---|
v$NEXT_PATCH_VERSION | Major.minor.patch에서 patch버전을 올린다. (v12.1.2 → v12.1.3) |
v$NEXT_MINOR_VERSION | Major.minor.patch에서 minor버전을 올린다. (v12.1.2 → v12.2.2) |
v$NEXT_MAJOR_VERSION | Major.minor.patch에서 major버전을 올린다. (v12.1.2 → v13.1.2) |
v$RESOLVED_VERSION | version-resolver에 정의한 labels에 따라 버전을 올린다. |
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
- template는 릴리즈 노트 형식을 정의한다.
template: |
## Changes
$CHANGES
- version-resolver을 정의하면, 라벨에 따라 버전을 올릴 수 있다.
- 아래 코드는
enhancement
라벨인 경우minor
버전을 올리고, 그 이외엔patch
버전을 올린다는 말이다.
version-resolver:
minor:
labels:
- "enhancement"
default: patch
- change-template는 병합된 각 PR에 대한 설명 형식이다.
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
4) 작동 모습
- main을 기반으로 PR을 올린 상태이다.
- 커밋 제목에 feat가 들어가므로 enhancement라벨이 적용되었다. (1)
- 릴리즈 노트 작성이 잘 되는 지 보기 위해 (2)를 눌러 병합을 하자.
- 레파지토리 메인을 가면 오른쪽에 Release가 보인다.
- 추가된 릴리즈 노트를 보기 위해 (3)을 누르자
- 들어가보면 새로 작성된 릴리즈 노트가 보인다.
- (5)를 클릭해서 릴리즈 노트를 출시하러 가보자.
- publish release를 누르면 정식 출시가 된다.
- 이 과정을 거치면 릴리즈 완료이다!
그런데 이 과정을 거쳐 릴리즈를 했지만 package.json 버전을 올리지 못했다 json 파일의 버전은 어떻게 올려야할까? 다음 시간에 알아보자!
반응형
'이번엔 이 공부 끝내겠다 시리즈 > github actions' 카테고리의 다른 글
CI/CD는 무엇일까 (with. github actions) (0) | 2021.11.09 |
---|
댓글