fix: Auto Releaseがタグの重複で失敗する問題を修正 - #216
Conversation
連続してマージされた際に Auto Release が並走し、どちらも --target main で その時点の先端へタグを打った結果、1つのコミット(5c861f2)に v1.0.27 と v1.0.28 の両方が付いた。 git describe --tags --abbrev=0 はコミット距離が最も近いタグを返すため、 この状態では v1.0.27 が返り、次版を v1.0.28 と算出して 「Release.tag_name already exists」(HTTP 422)で失敗していた。 - 最新タグの判定を git describe から、バージョン番号での並べ替え (git tag --sort=-v:refname)へ変更 - 算出したタグが既にある場合は、空いている番号まで繰り上げる - concurrency でワークフローを直列化し、並走そのものを防ぐ - タグの付与先を --target main から push されたコミットへ変更 - PR番号の取得を gh pr list からマージコミットのメッセージ経由へ変更 (連続マージ時に別のPRを拾わないようにする) - リリースノートの組み立てで、PRタイトルなどを環境変数経由で渡すよう変更
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Included review availability: Your plan includes up to 1 review per rolling hour; 0 remain after this review. 📝 WalkthroughWalkthroughThe release workflow now serializes runs, selects an unused patch version from sorted tags, derives pull request metadata from the triggering commit, and creates the release against that commit SHA. ChangesRelease workflow
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to The workflow changes address duplicate release tags and target the correct commit for automatic releases; no actionable merge-blocking risk remains beyond normal checks and review. Sequence Diagram(s)sequenceDiagram
participant ReleaseWorkflow
participant GitTags
participant TriggeringCommit
participant GitHubPullRequestAPI
participant GitHubReleaseAPI
ReleaseWorkflow->>GitTags: Select highest version-sorted v* tag
GitTags-->>ReleaseWorkflow: Return latest and unused new version
ReleaseWorkflow->>TriggeringCommit: Read commit message and SHA
TriggeringCommit-->>ReleaseWorkflow: Return PR reference or commit message
ReleaseWorkflow->>GitHubPullRequestAPI: Retrieve PR title
GitHubPullRequestAPI-->>ReleaseWorkflow: Return PR metadata
ReleaseWorkflow->>GitHubReleaseAPI: Create release at triggering commit SHA
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
概要
Auto ReleaseワークフローがRelease.tag_name already exists(HTTP 422)で失敗していた問題を修正しました。ワークフローの削除ではなく、原因を取り除く形で対応しています。原因
1つのコミットに2つのタグが付いていた
#213 と #214 が相次いでマージされたことで Auto Release が並走し、どちらも
--target mainを指定していたため、その時点の先端だった5c861f2にv1.0.27とv1.0.28の両方が付きました。git describeは最大バージョンを返さないgit describe --tags --abbrev=0が返すのはコミット距離が最も近いタグです。同じコミットに複数のタグがあると、どれが返るかはバージョンの大小と無関係になります。その結果 #215 のマージ時には
v1.0.27を起点にv1.0.28を算出し、既存のタグと衝突して422で落ちていました。修正内容
git describeからgit tag --list 'v*' --sort=-v:refname | head -n 1へconcurrency: auto-releaseを追加(cancel-in-progress: false)--target mainから--target ${{ github.sha }}へgh pr list --state merged --limit 1からマージコミットのメッセージ経由へenv:経由で渡すよう変更"や$が含まれてもスクリプトが壊れない検証
修正後のバージョン算出ロジックをローカルで実行し、期待どおりの結果になることを確認しました。
PR番号の抽出も確認しています。
squashマージの
title (#215)形式でも同じく抽出できます。PR番号が取れない場合(rebaseマージなど)は、従来どおりコミットメッセージをリリースノートに使います。ワークフロー3ファイルのYAML構文も検証済みです。
補足
既に作られてしまった重複タグ(
5c861f2のv1.0.27/v1.0.28)はそのままにしています。修正後は最大バージョンを起点にするため、次回はv1.0.29が作られ、重複タグがあっても支障はありません。整理をご希望であれば別途対応します。Summary by CodeRabbit