📈
セマンティックバージョンを上げるワークフロー [GitHub Actions]
概要
npm で管理されているパッケージ(GitHub Actions の JavaScript アクション等)のバージョンを上げる際の自動化の一部。
ワークフロー
自作 JavaScript アクションに実装したものを紹介します。
.github/workflows/version.yml
name: Version
on:
workflow_dispatch:
inputs:
semantic:
description: Semantic versioning
required: true
default: patch
type: choice
options:
- major
- minor
- patch
jobs:
version-up:
runs-on: ubuntu-20.04
timeout-minutes: 1
steps:
- uses: actions/checkout@v3
- name: Version up
id: version
run: |
set -x
version=$(npm --no-git-tag-version version $SEMANTIC)
echo "::set-output name=version::${version}"
sed -i -e "s|${GITHUB_REPOSITORY}@v[.0-9]\+|${GITHUB_REPOSITORY}@${version}|g" README.md
git diff
env:
SEMANTIC: ${{ github.event.inputs.semantic }}
- name: Commit & PR
run: |
set -x
branch="release/${VERSION}"
git config user.name github-actions[bot]
git config user.email 41898282+github-actions[bot]@users.noreply.github.com
git switch -c ${branch}
git add .
git commit -m "${VERSION}"
git push origin ${branch}
gh pr create --base ${GITHUB_REF_NAME} --head ${branch} --assignee ${GITHUB_ACTOR} --title ${VERSION} --body ''
env:
VERSION: ${{ steps.version.outputs.version }}
GH_TOKEN: ${{ github.token }}
解説
トリガー
選択肢には type: choice
が使用できます。
トリガーは on: milestone.closed
等にしても良いと思うのですがどのバージョンを上げるか決める仕組みが別途必要なので今回はシンプルに on: workflow_dispatch
で選ぶようにしています。
どのバージョンを上げるか決める仕組みの参考
バージョンアップ
npm version
で package.json および package-lock.json のバージョンを上げることができます。
そのまま実行するとコミットとタグが作成されてしまうので --no-git-tag-version
を付けています。
sed -i
で README.md に書かれているバージョンも更新します。
PR 作成
このリポジトリではブランチを保護しているので main ブランチへは push できません。
PR の作成までを自動で行い内容を確認したのち手動でマージします。
コミットや gh
コマンドについてはこちらを参考に。
リリース作成
手動で作成します。
gh release create
で自動化もできると思いますが今回は割愛。
Discussion