👋
過去のGitタグからリリースバージョンを自動発行する
バージョン番号を発行するのって、手でやると案外面倒ですよね?みなさん、どうしてるんだろ?
サーバーサイドでバージョンを発行する場合は、CIそれぞれにバージョン番号を発行する仕組みがあるのでそれが利用できます。
ただ、CIのトリガーにバージョンを付与したタグを利用したい場合、どうしているのかな?と。
そこで過去のタグからパッチバージョンをインクリメントして、バージョンを自動発行するPowerShellスクリプトを作成してみました。
どどん!
param(
[string] $Version,
[Parameter(Mandatory)]
[string] $Comment
)
# リリースタグのプレフィックス
$tagPrefix = 'release/WpfApp/'
# タグを最新まで更新する
git pull
if($Version -eq '') {
# バージョンが明示的に指定されていなかった場合、タグから最新バージョンを生成する。
$tag = git tag --sort=taggerdate | Where-Object { $_.StartsWith($tagPrefix) } | Select-Object -Last 1
if($null -eq $tag){
Write-Host "過去にリリースが未実施です。Versionパラメーターを指定してください。"
exit
}
# タグからバージョンを取得し、パッチをインクリメントする
$previous = $tag.Substring($tag.LastIndexOf('/') + 1)
$previousPatch = [int] $previous.Substring($previous.LastIndexOf('.') + 1)
$Version = $previous.Substring(0, $previous.LastIndexOf('.') + 1) + ($previousPatch + 1)
}
else {
# バージョンが明示的に指定されていた場合、指定のバージョンが存在しないか確認する
$tag = git tag | Where-Object { $_ -eq "$tagPrefix$Version" }
if($tag -ne '') {
Write-Host "指定のバージョンはリリース済みです。"
exit
}
}
Write-Host "バージョン: $Version コメント: $Comment"
git tag -a "$tagPrefix$Version" -m $Comment
git push --tags
前提としてモノリポジトリで、複数の発行物がある想定のため、リリースタグは「release/WpfApp/1.0.0」みたいなタグを利用します。スラッシュで区切ってるのは、Azure DevOps上でタグが、階層化して見られるからです。
また初回や、パッチ以外のバージョンを指定したい場合(例:1.0.0 -> 1.1.0)は手動でVersionパラメーターを指定してください。こんな感じで。
Publish.ps1 -Version 1.1.0 -Comment "発行時コメント"
Discussion