# バッチ設計書 13-release.yml

## 概要

本ドキュメントは、GitHub Actionsによるリリースワークフロー `.github/workflows/release.yml` のバッチ設計書である。vタグのpush時にテスト実行後、npmへのパッケージパブリッシュとGitHubリリース作成を行う。

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

Vueパッケージの正式リリースプロセスを自動化するGitHub Actionsワークフローである。`v*` パターンに一致するタグがpushされた際にトリガーされ、テストの実行、npmへのパッケージパブリッシュ、GitHubリリースの作成を順次実行する。

**業務上の目的・背景**：Vueの新バージョンリリース時に、テスト検証からnpmパブリッシュ、GitHubリリース作成までの一連のプロセスを自動化する。手動作業によるリリースミスを防止し、リリースプロセスの一貫性と信頼性を確保する。Release環境のデプロイメント保護により、不正なリリースを防止する。

**バッチの実行タイミング**：`v*` パターンに一致するGitタグ（例: v3.4.0, v3.5.0-beta.1）がpushされた時に自動実行される。

**主要な処理内容**：
1. テストジョブ（test）：test.ymlワークフローを呼び出し、全テストスイートを実行する
2. リリースジョブ（release）：テスト成功後、ビルド・npmパブリッシュ・GitHubリリース作成を実行する
3. pnpm release --publishOnly でnpmへパッケージを公開する
4. yyx990803/release-tag アクションでGitHubリリースを作成し、CHANGELOGへのリンクを本文に含める

**前後の処理との関連**：本ワークフローの前提として、`scripts/release.js` によるバージョン更新とタグ作成が完了している必要がある。テストジョブは `test.yml` を再利用可能ワークフローとして呼び出す。リリースジョブはテストジョブの成功に依存する（`needs: [test]`）。

**影響範囲**：npmレジストリ上のVueパッケージ（全パッケージ）、GitHubリリースページに影響する。vuejs/coreリポジトリでのみ実行される。provenance対応によりサプライチェーンセキュリティが担保される。

## バッチ種別

CI/CD（リリース自動化）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動（vタグpush時） |
| 実行時刻 | 指定なし（タグpush時） |
| 実行曜日 | 指定なし |
| 実行日 | 指定なし |
| トリガー | push（tags: 'v*'） |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHub Actionsランナー | ubuntu-latestが利用可能であること |
| Release環境 | GitHubのRelease環境のデプロイメント保護が設定されていること |
| GITHUB_TOKEN | リリース作成に必要な権限が付与されていること |
| npmレジストリ認証 | npmパブリッシュに必要な認証情報が設定されていること |

### 実行可否判定

- リリースジョブは `github.repository == 'vuejs/core'` の場合のみ実行される（fork上でのリリースを防止）
- リリースジョブはテストジョブの成功に依存する（`needs: [test]`）

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | ワークフロー入力パラメータなし（タグ名から自動取得） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| Gitタグ | Git ref | v* パターンのタグ名 |
| ソースコード | Git | リポジトリの全ソースコード |
| .node-version | テキスト | Node.jsバージョン指定ファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| npmレジストリ | npmパッケージ | パブリッシュされたVueパッケージ群 |
| GitHubリリース | GitHubリリース | タグに対応するリリースページ（CHANGELOGへのリンク含む） |

### 出力ファイル仕様

直接的なファイル出力はなし。npmレジストリへのパッケージ公開とGitHubリリースの作成が行われる。

## 処理フロー

### 処理シーケンス

```
1. テストジョブ（test）
   └─ test.ymlワークフローを呼び出し（ユニットテスト、E2Eテスト、lint、型宣言テスト）
2. リリースジョブ（release）※テストジョブ成功後に実行
   ├─ 2.1 チェックアウト（actions/checkout@v6）
   ├─ 2.2 pnpmインストール（pnpm/action-setup@v4）
   ├─ 2.3 Node.jsセットアップ（actions/setup-node@v6）
   ├─ 2.4 依存関係インストール（pnpm install）
   ├─ 2.5 npm最新版への更新（npm i -g npm@latest）
   ├─ 2.6 ビルドとパブリッシュ（pnpm release --publishOnly）
   └─ 2.7 GitHubリリース作成（yyx990803/release-tag@master）
```

### フローチャート

```mermaid
flowchart TD
    A[vタグ push] --> B[テストジョブ]
    B --> C{テスト成功?}
    C -->|Yes| D{vuejs/core リポジトリ?}
    C -->|No| E[ワークフロー失敗]
    D -->|Yes| F[Release環境チェック]
    D -->|No| G[スキップ]
    F --> H[チェックアウト / セットアップ]
    H --> I[依存関係インストール]
    I --> J[npm最新版更新]
    J --> K[pnpm release --publishOnly]
    K --> L[GitHubリリース作成]
    L --> M[ワークフロー完了]
    E --> M
    G --> M
```

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

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

データベース操作なし。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | テスト失敗 | テストスイートのいずれかが失敗した場合 | コードを修正し再度タグをpushする |
| - | パブリッシュ失敗 | npm publish が失敗した場合 | npmレジストリの状態・認証情報を確認する |
| - | リリース作成失敗 | GitHubリリース作成が失敗した場合 | GITHUB_TOKENの権限を確認する |

### リトライ仕様

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

### 障害時対応

リリースが途中で失敗した場合、npmへのパブリッシュ状態を確認し、必要に応じて手動で `pnpm release --publishOnly` を実行する。GitHubリリースが作成されなかった場合は手動で作成する。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | なし（npmパブリッシュとGitHubリリースは独立） |
| コミットタイミング | - |
| ロールバック条件 | - |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1ワークフロー実行あたり2ジョブ |
| 目標処理時間 | GitHub Actionsの実行時間制限内（6時間） |
| メモリ使用量上限 | GitHub Actionsランナーのデフォルトリソースに依存 |

## 排他制御

Release環境のデプロイメント保護により、同時に複数のリリースが実行されることを防止する。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| ジョブログ | 各ステップ実行時 | GitHub Actions標準のステップ実行ログ |
| パブリッシュログ | パブリッシュ実行時 | pnpm release --publishOnlyの出力 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー実行結果 | 失敗時 | GitHubリポジトリの通知設定に依存 |

## 備考

- `permissions` で `contents: write` と `id-token: write` が設定されており、GitHubリリース作成とprovenance対応に必要な権限が付与されている
- Release環境（`environment: Release`）のデプロイメント保護ルールにより、承認プロセスを経てリリースが実行される
- GitHubリリースの本文にはCHANGELOG.mdへのリンクが含まれ、安定版はmainブランチ、プレリリースはminorブランチのCHANGELOGを参照する
- npm最新版への更新ステップ（`npm i -g npm@latest`）はprovenance対応のために必要
