流れ
1. PR を作る、ラベルで major, minor, patch のいずれをつける
2. master へマージする。
3. CircleCI がラベルを見て新しいタグをプッシュする
CircleCI
GHE 環境なのでところどころ読み直してください。
雰囲気で伝わってほしい。
push_tag: <<: *build steps: - checkout - add_ssh_keys - run: name: push new version tag command: | PR_NUMBER=$( git log ${CIRCLE_SHA1} --oneline -1 | awk '{print $5}' | sed -s 's/#//' ) label=$( curl -s -u u:p https://hoge/pulls/${PR_NUMBER} | jq -r '.labels[0].name' ) latest_version=$( curl -s -u u:p https://hoge/tags | jq -r '.[0].name' ) new_version=$( bash .circleci/push_tag.sh "${label}" "${latest_version}" ) git tag ${new_version} git push --tags
push_tag.sh
新しいタグ(バージョン)を作って、GHE にプッシュする
#!/usr/bin/env bash set -eu readonly semantic_version="${1}" readonly latest_version="${2}" # v2.15.1 -> 2.15.1 version=$( echo "${latest_version}" | sed -e 's/v//g' ) # 2.15.1 -> [ 2, 15, 1 ] version_split=( ${version//./ } ) new_major_version="${version_split[0]}" new_minor_version="${version_split[1]}" new_patch_version="${version_split[2]}" case "${semantic_version}" in "major" ) new_major_version=$(( new_major_version + 1 )) ;; "minor" ) new_minor_version=$(( new_minor_version + 1 )) ;; "patch" ) new_patch_version=$(( new_patch_version + 1 )) ;; * ) echo "please add a label 'major', 'minor', 'patch'" exit 1 ;; esac new_version=$( echo "v${new_major_version}.${new_minor_version}.${new_patch_version}" ) echo "${new_version}"
luis@ubuntu ~selected/.circleci (fix/datadog●●)$ bash push_tag.sh patch v2.15.1 v2.15.2 luis@ubuntu ~selected/.circleci (fix/datadog●●)$ bash push_tag.sh minor v2.15.1 v2.16.1 luis@ubuntu ~selected/.circleci (fix/datadog●●)$ bash push_tag.sh major v2.15.1 v3.15.1
問題点
- 複数のラベルがあって、最初に major, minor, patch がないとエラーになる。
- patch を2つ上げたいけど、1つしか上げられない
気が向いたら直す。
これでタグのプッシュのし忘れとか無くなって(・∀・)イイネ!!