👋

過去のGitタグからリリースバージョンを自動発行する

2022/06/22に公開

バージョン番号を発行するのって、手でやると案外面倒ですよね?みなさん、どうしてるんだろ?

サーバーサイドでバージョンを発行する場合は、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