📘
GitHub Actionsでincrementなタグを作成する
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