Release Workflow
LLM主導でバージョン更新とリリースコミットを作成し、ワークフローでタグ・Release・配布を完了する。
Preflight
-
gh auth status が成功すること
-
git status --short が空であること
-
origin/develop を最新化できること
フロー
release (/release) 実行 ↓ ① origin/develop を pull してローカルを最新化 ↓ ② バージョン更新(Cargo.toml, CHANGELOG.md) ↓ ③ chore(release): vX.Y.Z コミット作成 ↓ ④ Closing Issue を収集 ↓ ⑤ develop → main マージ(PR本文に Closing Issues 記載) ↓ ⑥ release.yml がタグ作成 → GitHub Release作成 ↓ ⑦ publish.yml がバイナリビルド → Release にアタッチ
手順
- ローカルを最新化(必須)
git fetch origin git pull origin develop
- バージョン更新
[workspace.package] version = "X.Y.Z"
- CHANGELOG.md 更新
[X.Y.Z] - YYYY-MM-DD
Added
- 新機能の説明
Fixed
- バグ修正の説明
- リリースコミット作成
git add Cargo.toml Cargo.lock CHANGELOG.md git commit -m "chore(release): vX.Y.Z" git push origin develop
- Closing Issue の収集
- 前回タグ〜HEADのコミットからPR番号抽出
LAST_TAG=$(git describe --tags --abbrev=0)
PR_NUMBERS=$(git log ${LAST_TAG}..HEAD --oneline
| grep -oE '(#[0-9]+)|\bMerge pull request #[0-9]+'
| grep -oE '[0-9]+' | sort -u)
- 各PR本文から closing keyword 抽出
CLOSING_ISSUES=""
for pr in $PR_NUMBERS; do
BODY=$(gh pr view "$pr" --json body -q '.body' 2>/dev/null || true)
ISSUES=$(echo "$BODY"
| grep -oiE '(close[sd]?|fix(e[sd])?|resolve[sd]?)\s+#[0-9]+'
| grep -oE '[0-9]+' || true)
CLOSING_ISSUES="$CLOSING_ISSUES $ISSUES"
done
CLOSING_ISSUES=$(echo "$CLOSING_ISSUES" | tr ' ' '\n' | sort -u | grep -v '^$')
- PR番号を除外してIssueのみ残す
REAL_ISSUES=""
for num in $CLOSING_ISSUES; do
IS_PR=$(gh api "repos/{owner}/{repo}/issues/$num"
--jq 'has("pull_request") and .pull_request != null' 2>/dev/null || echo "false")
if [ "$IS_PR" = "false" ]; then
REAL_ISSUES="$REAL_ISSUES $num"
fi
done
- PR本文用に出力
for num in $REAL_ISSUES; do echo "Closes #$num" done
- main へマージ
推奨: 既存スクリプト経由
./scripts/prepare-release.sh
または prepare-release workflow を直接起動
gh workflow run prepare-release.yml
手動PR作成の場合
gh pr create --base main --head develop
--title "chore(release): vX.Y.Z"
- 配布確認
-
gh release view vX.Y.Z
-
gh run list --workflow=publish.yml --limit 3
-
GitHub Releases
注意
-
バージョンは Semantic Versioning に従う
-
chore(release): プレフィックスは必須(release.yml のトリガー条件)
-
gh auth login 済みであること