📘

GitHub Actionsでincrementなタグを作成する

2024/05/03に公開

GitHub Actionsでバージョニングを行う

Gitのタグでのバージョニングに対しGitHub Actionsでの自動化を行う。

前提

既にGitHubのタグで、x.x.xのセマンティックバージョニングを行っていること。

フロー

設定

以下のようなGitHub Actionsの設定を行う。

{前略}
        - uses: actions/setup-python@v2
          with:
            python-version: ${{ matrix.python-version }}
{中略}
        - name: tag
          id: get_tag
          run: |
            gh pr view ${{ github.event.pull_request.number }} --json labels --jq '[.labels[].name]' &> tmp
            if [ -e tmp ]; then
                label=$(cat tmp)
                rm tmp
            else
                label=""
            fi

            git fetch --tags
            latest_tag=$(git tag | sort -V | tail -n 1)

            python3 ./.github/workflows/create_tag.py "$latest_tag" "$label" &> tmp2
            new_tag=$(cat tmp2)
            rm tmp2
            git tag $new_tag
            git push origin $new_tag
{後略}

pythonのスクリプトはprint()で標準出力を行い、tmp2に保存することで後続のステップで利用できるようにしている。

import sys
import ast

args = sys.argv

latest = args[1]
labels = []
if len(args) == 3:
    labels = ast.literal_eval(args[2])

version_list = latest.split(".")

if len(version_list) != 3:
    print(f"invalid arguments:{args}")
    sys.exit(1)


major = version_list[0]
minor = version_list[1]
patch = version_list[2]

if "majorUpdate" in labels:
    major = int(major) + 1
    minor = 0
    patch = 0
elif "minorUpdate" in labels:
    minor = int(minor) + 1
    patch = 0
else:
    patch = int(patch) + 1

new_version = f"{major}.{minor}.{patch}"

print(new_version)

おわり。

Discussion