# バッチ設計書 33-release-git-version

## 概要

本ドキュメントは、リリースプロセスにおいてGitタグとコミットを作成するバッチ「release-git-version」の設計仕様を定義するものである。

### 本バッチの処理概要

本バッチは、Babelのリリースプロセスにおいて、新しいバージョンのGitタグとコミットを作成し、一時的なリリースブランチにプッシュする処理を実行する。

**業務上の目的・背景**：ソフトウェアリリースにおいて、バージョン管理とリリース追跡は不可欠である。本バッチはバージョンバンプ、タグ作成、一時ブランチへのプッシュを自動化することで、リリースプロセスの一貫性と信頼性を確保する。Babel Botとしてコミットすることで、自動化プロセスであることを明示する。

**バッチの実行タイミング**：workflow_dispatchによる手動実行時のみ実行される。タグpushトリガーの場合はスキップされる（if: github.event_name == 'workflow_dispatch'）。ensure-npm-packages-existジョブ完了後に実行される。

**主要な処理内容**：
1. リポジトリをチェックアウト（fetch-depth: 0で全履歴取得）
2. Git設定でBabel Botをコミッターとして設定
3. make new-version-checklistでリリース前チェックを実行
4. yarn release-tool version -f @babel/standalone --all --yes で全パッケージのバージョンを更新
5. 一時ブランチ名を生成（release/temp/v{version}形式）
6. 作成したコミットとタグを一時ブランチにプッシュ

**前後の処理との関連**：ensure-npm-packages-existジョブの完了を待って実行される。完了後はnpm-release、github-releaseジョブがこのジョブの出力（branchパラメータ）を使用して一時ブランチをチェックアウトする。

**影響範囲**：Gitリポジトリに新しいコミット、タグ、一時ブランチが作成される。バージョン情報が更新されたpackage.jsonファイルが含まれる。

## バッチ種別

リリース処理 / バージョン管理

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動 |
| 実行時刻 | 該当なし（手動実行時） |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | workflow_dispatch（手動実行のみ） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| 手動トリガー | github.event_name == 'workflow_dispatch' であること |
| ensure-npm-packages-exist成功 | 前提ジョブが正常完了していること |
| contents: write権限 | Gitプッシュに必要な権限があること |
| GITHUB_TOKEN | リポジトリへのプッシュに必要なトークン |

### 実行可否判定

github.event_name == 'workflow_dispatch' の場合のみ実行される。タグpushの場合はスキップ。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| version | choice | Yes | prerelease | リリースバージョン（prerelease / 8.0.0-beta.4 / 8.0.0-rc.1） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| Git履歴 | Git | 全コミット履歴（タグ情報を含む） |
| package.json | JSON | 各パッケージの現在のバージョン情報 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| Gitコミット | Git | バージョン更新コミット |
| Gitタグ | Git | v{version}形式のタグ |
| 一時ブランチ | Git | release/temp/v{version}形式のブランチ |
| outputs.branch | 文字列 | 後続ジョブで使用するブランチ名 |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | package.json（各パッケージ） |
| 出力先 | Gitリポジトリ |
| 文字コード | UTF-8 |
| 区切り文字 | 該当なし（JSON形式） |

## 処理フロー

### 処理シーケンス

```
1. リポジトリチェックアウト
   └─ actions/checkout@v4 (fetch-depth: 0)
2. コミッター設定
   └─ git config user.name "Babel Bot"
   └─ git config user.email "babel-bot@users.noreply.github.com"
3. リリース前チェック実行
   └─ make new-version-checklist
4. バージョン更新
   └─ yarn release-tool version -f @babel/standalone --all --yes $version
5. 一時ブランチ名生成
   └─ branch="release/temp/$(git describe --abbrev=0)"
6. GitHubにプッシュ
   └─ git push HEAD:$branch --follow-tags
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B{workflow_dispatch?}
    B -->|No| C[スキップ]
    B -->|Yes| D[リポジトリチェックアウト]
    D --> E[Babel Botとしてgit config設定]
    E --> F[make new-version-checklist]
    F --> G[release-tool version実行]
    G --> H[バージョンタグ取得]
    H --> I[一時ブランチ名生成]
    I --> J[GitHubにプッシュ]
    J --> K[outputs.branch出力]
    K --> L[バッチ終了]
    C --> L
```

## データベース操作仕様

### 操作別データベース影響一覧

本バッチはデータベース操作を行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 1 | チェックアウト失敗 | リポジトリアクセスエラー | ネットワーク・権限を確認 |
| 1 | new-version-checklist失敗 | リリース前チェックでエラー | チェック項目を手動確認 |
| 1 | release-tool失敗 | バージョン更新エラー | パッケージ状態を確認 |
| 1 | git push失敗 | 認証・権限エラー | GITHUB_TOKEN権限を確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

1. GitHub Actionsログでエラー内容を確認
2. 一時ブランチが作成されていれば削除：`git push origin :release/temp/v{version}`
3. タグが作成されていれば削除：`git push origin :refs/tags/v{version}`
4. 問題を修正後、ワークフローを再実行

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 一連のGit操作全体 |
| コミットタイミング | git push実行時 |
| ロールバック条件 | プッシュ前にエラーが発生した場合 |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1リリース |
| 目標処理時間 | 5分以内 |
| メモリ使用量上限 | 該当なし（CI環境依存） |

## 排他制御

- needs: ensure-npm-packages-exist により、前提ジョブ完了まで待機
- 同時に複数のリリースワークフローが実行された場合、一時ブランチ名の競合が発生する可能性あり

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | チェックアウト時 | リポジトリ情報 |
| 進捗ログ | 各ステップ実行時 | コマンド実行結果 |
| 終了ログ | バッチ終了時 | 作成されたブランチ名、タグ |
| エラーログ | エラー発生時 | エラー詳細 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ジョブ失敗 | 1回 | GitHub Actions UI |
| 実行時間 | 10分 | GitHub Actions UI |

## 備考

- コミッターは常に「Babel Bot」として設定され、自動化プロセスであることが明示される
- -f @babel/standalone フラグにより、babel-standaloneのバージョンも強制的に更新される
- --all フラグにより、すべての公開可能なパッケージが対象となる
- --yes フラグにより、対話的な確認をスキップする
- 一時ブランチはgithub-pushジョブで最終的にmainにマージされた後、削除される
