📈

セマンティックバージョンを上げるワークフロー [GitHub Actions]

2022/03/05に公開

概要

npm で管理されているパッケージ(GitHub Actions の JavaScript アクション等)のバージョンを上げる際の自動化の一部。

ワークフロー

自作 JavaScript アクションに実装したものを紹介します。

https://github.com/snow-actions/unanimously-approved

.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 コマンドについてはこちらを参考に。
https://zenn.dev/snowcait/articles/903d86d668fcb7
https://zenn.dev/snowcait/articles/0e430af5fb1e50

リリース作成

手動で作成します。
gh release create で自動化もできると思いますが今回は割愛。

Discussion