[GitHub Actions] Push時にタグ名を取得する方法
はじめに
GitHub Actionsにて、「タグpush時」をトリガーにしたCIで、様々な過程で「成果物のファイルなど諸々の情報にバージョン情報をタグ名と同期するように埋め込みたい・設定したい」ということがあると思います。
この記事では、GitHub Actionsで何らかの既存のActionsを使わず、プッシュした際のタグを取得・設定する方法を調査しましたので、ubuntu-latest
のようなBashを使うイメージとwindows-latest
イメージのようなPowerShellを使う時とで、双方の書き方をTipsとして共有します。
前提条件
例えば、次のようなymlのトリガーでタグpushした場合を想定しています。
on:
push:
tags:
- "v*"
github.ref_name
でタグ名が取れる
結論ですが、github.ref_nameを使えば簡単にタグ名だけ抽出できます。
例えば、v1.0.0
という名前でタグをリモートリポジトリにpushした際の例を以下に示します。
# expected: v1.0.0
echo ${{ github.ref_name }}
step, jobでの値の共有
$GITHUB_ENV
または$GITHUB_OUTPUT
を使うことで、stepないし後続のjobでの値の共有が出来ますので、それを利用することを考えます。この際の記載の仕方を説明します。
なお、格納した値の取得の仕方は公式ドキュメントを見れば分かるかと思いますので、割愛します。以下のGitHub Actions公式ドキュメントリンクを参考にしてください。
Bash (Ubuntu)
公式マニュアルの事例通り、基本的にリダイレクトの変数名は二重引用符でくくることが良いと思います。
上手く値が格納されなかったりすることがありました。
echo "TAG=${{ github.ref_name }}" >> "$GITHUB_ENV"
$GITHUB_OUTPUT
は以下のようになります。
echo "TAG=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"
PowerShell (Windows)
windows-latest
のようなWindowsイメージを利用する場合、PowerShellの記法になります。
PowerShellでは環境変数は$env:FOO
のように、$env:
をつけます。PowerShellに手慣れていない方はその部分を注意してください。環境変数は取得時も$env:FOO
のようにします。
基本的にPowerShellは二重引用符なしで通用しますが、あればあったで問題ないので、ここでもおまじないでつけておくと良いかもしれません。
echo "TAG=${{ github.ref_name }}" >> "$env:GITHUB_ENV"
$GITHUB_OUTPUT
へは$env:GITHUB_OUTPUT
とします。
echo "TAG=${{ github.ref_name }}" >> "$env:GITHUB_OUTPUT"
vのプレフィクスを取り除く
例えば、タグ名はv1.0.0
にしたいが、成果物のバイナリビルドでバージョン情報を埋め込む際、1.0.0
など、v
のプレフィクスは避けたい、なんてことがあるかと思います。
シェル芸の書き方は色々あると思いますが、ここでは${{ github.ref_name }}
の値からVERSION
という名称で設定を行い、v
のプレフィクスを取り除き、$GITHUB_ENV
にリダイレクト格納する例を以下に示します。
Bash (Ubuntu)
echo ${{ github.ref_name }} | sed -e 's/^v//' | xargs -I {} echo "VERSION={}" >> "$GITHUB_ENV"
PowerShell (Windows)
Write-Output ("VERSION=" + ("${{ github.ref_name }}" -replace 'v', '')) >> "$env:GITHUB_ENV"
おわりに
以上、ちょっとしたTipsですが、ご参考になれば幸いです。
Discussion