はじめに
以前に以下の記事で、git hookを使用してコミットをトリガーにpyproject.tomlとgit tagを更新するスクリプトについて紹介しました。
7rikazhexde-techlog.hatenablog.com
これは、pythonで作成したプロジェクトのバージョン情報として使用される、pyproject.tomlのversionキーとgit tagのバージョンを揃えて更新したいという目的があり、git hook(pre-commit/post-commit)を使用することで作成しました。
しかし、しばらく運用する中で以下の使いづらさを感じていました。
major,minor,patchの値に対して、バージョンを上げる場合には999にする必要があることgit commit時にコミットキャンセルした場合はpyproject.tomlのバージョン更新用に使用するpre-commitは正常終了しているため、一度値を戻さないといけないこと- 毎回手動でコミットが必要なこと
基本的にpyproject.tomlのversionキーの更新とgit tagの実行はセットであり、バージョンを上げるときは取り消す処理は不要であるべきだと思いました。
そこで別の方法がないか考えたところ、github actionsでワークフローとして対応可能であることがわかりました。本記事はそのワークフローの紹介記事になります。
作成したもの
注意事項
本記事に記載された内容やコードによって生じたいかなる損害についても責任を負いません。使用する際は自己責任でお願いします。
本ワークフローではrepo権限追記のPATの設定が必要です。
token: ${{ secrets.PAT_FOR_PUSHES }}
詳細は下記ドキュメントを確認ください。
YMLファイルについて
内部の処理はワークフローのコードを参照してください。
処理の流れとしてコメントで記載していますが、ポイントとしては、
pyproject.tomlのversionキーを更新して、そのバージョンと同じ値でgit tagを実行します。これはpre-commitによる方法と同じですが、更新対象をワークフローのトリガー条件であるworkflow_dispatchから手動実行します。
さらに、git tag後は、action-gh-releaseアクションを使用してreleaseを作成します。
releaseでは、git logコマンドにより、バージョン間のコミットタイトルをreleaseノートとして出力するために、bodyに指定します。
このワークフローは、プルリクエストのマージやドキュメント更新後に最終的にプロジェクトのバージョンを更新してreleaseを作成するという運用イメージを想定しています。
まとめ
【Pythonバージョン管理】git hookを使用してコミットをトリガーにpyproject.tomlとgit tagを更新するスクリプトについて - 7rikazhexde’s tech logの改善として、GitHub Actionsによるワークフローを作成しました。
このワークフローにより、git hookで発生した使いづらさを改善しました。
個人的には満足していますが、releaseノートの内容など改善点はあります。
今後、改善する場合はgistの方を都度更新していきます。
以上です。