はじめに
Gitのタグ付けを毎回手動でしていたが、塵も積もれば山となるで時間削減のため自動化しました。どのCIサービスを使っても実装は可能でしたが、GitHub Actionsを使ったらよくありがちな環境変数の設定無しに簡単に導入できたので紹介します。同様の記事も既にありますが、個人メモとして残すためご了承ください。
実現したいこと
- Pull Requestをマージしたらリリースタグを打ちたい
- マージせずに閉じた場合は何もしない
- タグ名は
release-%Y%m%d%H%M
の書式としたい。この辺はお好みで。- もちろん日本時間で!
設定方法
対象のGitHubリポジトリで以下内容のファイルを .github/workflows/release_tag.yml
に配置してコミットして終わりです!
name: Release Tag
on:
pull_request:
branches:
- master
types: [closed]
jobs:
build:
name: Create Release
runs-on: ubuntu-latest
if: github.event.pull_request.merged == true
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set current date
id: current_date
env:
TZ: 'Asia/Tokyo'
run: echo "current_date=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: release-${{ env.current_date }}
release_name: release-${{ env.current_date }}
draft: false
prerelease: false
以降は Pull Request がマージされると以下のようにタグ付けされます!
補足
ワークフロートリガーの設定
以下により「masterブランチに対する Pull Requestを閉じたら実行する」が設定されます。 types
でアクティビティタイプ(何をトリガーで発火するか)が選択できるのですが、 closed
を設定することで「Pull Requestを閉じたら(マージを含む)」になります。本当はここで merged
が選択でいるといいですけど、なぜかないんですよねぇ。
on:
pull_request:
branches:
- master
types: [closed]
Pull Requestをマージした時だけ発火させる
types: [closed]
だけだとマージせずに閉じただけでも発火してしまうので、以下を設定することで Pull Request をマージした時のみジョブが実行されるようにします。
if: github.event.pull_request.merged == true
日時を含むリリースタグ名を作成する
release-202102192100
みたいに日時を含むリリースタグ名を以下で作成し環境変数に登録しています。ポイントは タイムゾーン設定です。これが無いと UTC となってしまうのでお忘れなく〜! (最初は気づかず素通りしてました...
- name: Set current date
id: current_date
env:
TZ: 'Asia/Tokyo'
run: echo "current_date=$(date +'%Y%m%d%H%M')" >> $GITHUB_ENV
リリースタグを登録されるようにする
公式から提供されている actions/create-release@v1
アクションを利用すれば簡単です。tag_name
, release_name
でお好みのタグ名・リリース名を設定するだけ!
- name: Create release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: release-${{ env.current_date }}
release_name: release-${{ env.current_date }}
draft: false
prerelease: false