< BACK TO BLOG

Github Action: next-version-proposal-action

πŸ—“οΈ2023-07-16

κ°œμš”

κΉƒν—ˆλΈŒ μ›Œν¬ν”Œλ‘œμš° 쀑 PULL_REQUEST μ΄λ²€νŠΈμ—μ„œ ν™œμš©ν•  수 μžˆλŠ” μ•‘μ…˜μž…λ‹ˆλ‹€.

κΈ°λ³Έ 브랜치둜 병합이 μ§€μ •λœ ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ μ™„λ£Œλ  λ•Œ, κΈ°λ³Έ 브랜치둜 병합이 λ°œμƒν•˜λŠ” 경우 ν’€ λ¦¬ν€˜μŠ€νŠΈμ˜ 라벨에 따라 λ‹€μŒ 버전 이름을 μ œμ•ˆν•©λ‹ˆλ‹€.

λ™μž‘:

κΉƒ νƒœκ·Έ 이름 쀑 SEMVERsember ν˜•μ‹μ˜ νƒœκ·Έ 이름을 κ²€μƒ‰ν•΄μ„œ, μ΅œμ‹  버전에 ν•΄λ‹Ήν•˜λŠ” νƒœκ·Έ 이름을 μ°ΎμŠ΅λ‹ˆλ‹€.

SEMVERsember ν˜•μ‹μ˜ κΉƒ νƒœκ·Έλ₯Ό 찾을 수 μ—†λŠ” 경우 1.0.0 을 μ œμ•ˆν•©λ‹ˆλ‹€.

μ΅œμ‹  버전에 ν•΄λ‹Ήν•˜λŠ” κΉƒ νƒœκ·Έλ₯Ό 찾은 경우, μ§€μ •λœ ν’€ λ¦¬ν€˜μŠ€νŠΈμ— μ§€μ •λ˜μ–΄ μžˆλŠ” 라벨을 κΈ°μ€€μœΌλ‘œ μ£Ό 버전, λΆ€ 버전, 패치 버전을 1 증가 μ‹œν‚¨ 버전 이름을 μ œμ•ˆν•©λ‹ˆλ‹€.

μž…λ ₯κ³Ό 좜λ ₯

μž…λ ₯

Name Required Description
github_token βœ… κΉƒν—ˆλΈŒ 개인 인증 토큰 (PAT); μ €μž₯μ†Œ 읽기 κΆŒν•œμ΄ ν•„μš”ν•©λ‹ˆλ‹€.
pr βœ… ν’€ λ¦¬ν€˜μŠ€νŠΈ 번호; 예) 100
major_labels βœ… μ£Ό 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘; μ‰Όν‘œλ‘œ ꡬ뢄
minor_labels βœ… λΆ€ 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘; μ‰Όν‘œλ‘œ ꡬ뢄
patch_labels βœ… 패치 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘; μ‰Όν‘œλ‘œ ꡬ뢄
next_version_prefix λ‹€μŒ 버전 이름 접두어

ν˜„μž¬ μ›Œν¬ν”Œλ‘œμš°κ°€ μ‹€ν–‰λ˜κ³  μžˆλŠ” μ €μž₯μ†Œμ— λŒ€ν•œ μž‘μ—…μΈ 경우 github_token 에 μž…λ ₯ν•  κΉƒν—ˆλΈŒ 개인 인증 ν† ν°μ˜ 값은 미리 μ •μ˜λœ λ³€μˆ˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • github.token
  • secrets.GITHUB_TOKEN

ν˜„μž¬ μ›Œν¬ν”Œλ‘œμš°κ°€ μ‹€ν–‰λœ 이벀트 νŠΈλ¦¬κ±°κ°€ pull_request 인 경우 pr 에 μž…λ ₯ν•  ν’€ λ¦¬ν€˜μŠ€νŠΈ 번호의 값은 ν˜„μž¬ μ»¨ν…μŠ€νŠΈμ˜ 이벀트 데이터λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • github.event.pull_request.number

좜λ ₯

Name Description
latest_version κΉƒ νƒœκ·Έμ—μ„œ 찾은 μ΅œμ‹  버전 이름
next_version μ œμ•ˆλœ λ‹€μŒ 버전 이름
next_version_major μ œμ•ˆλœ λ‹€μŒ λ²„μ „μ˜ μ£Ό 버전
next_version_minor μ œμ•ˆλœ λ‹€μŒ λ²„μ „μ˜ λΆ€ 버전
next_version_patch μ œμ•ˆλœ λ‹€μŒ λ²„μ „μ˜ 패치 버전

latest_version == '' 인 경우 next_version 의 값은 1.0.0 μž…λ‹ˆλ‹€.

예제

μ•„λž˜ μ›Œν¬ν”Œλ‘œμš°λŠ” 메인 브랜치λ₯Ό 베이슀둜 ν•˜λŠ” ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ λ³‘ν•©μœΌλ‘œ μ™„λ£Œλ˜λ©΄ μ‹€ν–‰λ©λ‹ˆλ‹€.

name: 'create-tag'

on:
    pull_request:
        branches:
            - main
        types:
            - closed

jobs:
    get_next_version:
        runs-on: ubuntu-latest
        if: github.event.pull_request.merged == true # ν’€ λ¦¬ν€˜μŠ€νŠΈκ°€ λ³‘ν•©μœΌλ‘œ μ™„λ£Œλœ μƒνƒœλ₯Ό 확인
        steps:
            - name: Checkout
              uses: actions/checkout@v3

            - name: Get next version
              uses: bbonkr/next-version-proposal-action@v1
              id: next_version_proposal
              with:
                  github_token: ${{ github.token }} # κΉƒν—ˆλΈŒ 개인 인증 토큰
                  pr: ${{ github.event.pull_request.number }} # μ—°κ΄€ ν’€ λ¦¬ν€˜μŠ€νŠΈ 번호
                  major_labels: 'major, next' # μ£Ό 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘
                  minor_labels: 'enhancement, feature' # λΆ€ 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘
                  patch_labels: 'bug, documentation, chore, dependencies' # 패치 버전이 μ¦κ°€ν•˜λŠ” ν’€λ¦¬ν€˜μŠ€νŠΈ 라벨 이름 λͺ©λ‘
                  next_version_prefix: 'v' # 버전 μ΄λ¦„μ˜ 접두어λ₯Ό 지정

            - name: logging
              run: |
                  echo "latest_version=${{ steps.next_version_proposal.outputs.latest_version }}"
                  echo "next_version=${{ steps.next_version_proposal.outputs.next_version }}"
                  echo "next_version_major=${{ steps.next_version_proposal.outputs.next_version_major }}"
                  echo "next_version_minor=${{ steps.next_version_proposal.outputs.next_version_minor }}"
                  echo "next_version_patch=${{ steps.next_version_proposal.outputs.next_version_patch }}"

μ œμ•½μ‚¬ν•­:

  1. SEMVERsember ν˜•μ‹μ„ μ²˜λ¦¬ν•  λ•Œ, μ£Ό 버전 major, λΆ€ 버전 minor, 패치 버전 patch 뢀뢄에 λŒ€ν•œ λ‹€μŒ 버전을 μ œμ•ˆν•©λ‹ˆλ‹€. 미리보기 pre-release, λΉŒλ“œ 번호 build 뢀뢄은 μ²˜λ¦¬ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

κ΄€λ ¨ λ‚΄μš©

GitHub Repository


Profile picture

Pon Cheol Ku (ꡬ본철)

Software developer

Other sites

If does not find interesting topic, you might visit other site on below link.

Β© 2023, Built with Gatsby