# バッチ設計書 38-update-parser-tests

## 概要

本ドキュメントは、test262パーサーテストを定期的に更新するバッチ「update-parser-tests」の設計仕様を定義するものである。

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

本バッチは、tc39/test262リポジトリから最新のテストスイートを取得し、Babelパーサーのテスト許可リストを更新するための自動化処理を実行する。

**業務上の目的・背景**：test262はECMAScript仕様の公式テストスイートであり、Babelパーサーの仕様準拠度を検証するために使用される。tc39/test262は継続的に更新されるため、Babelも定期的にこのテストスイートを取り込み、パーサーの互換性を維持する必要がある。本バッチはこの更新プロセスを自動化する。

**バッチの実行タイミング**：毎週金曜日の午前0時（UTC）にスケジュール実行される。また、workflow_dispatchによる手動実行も可能。

**主要な処理内容**：
1. Babelリポジトリとtc39/test262リポジトリをチェックアウト
2. test262の最新バージョン（コミットSHA）を取得
3. MakefileのTEST262_COMMIT定数を更新
4. Babelパーサーをビルド（yarn gulp build-rollup）
5. test262許可リストを更新（make test-test262-update-allowlist）
6. 変更をコミットしてupdate-test262-parserブランチにプッシュ
7. Pull Requestを自動作成

**前後の処理との関連**：独立した定期実行バッチであり、他のジョブとの依存関係はない。作成されたPull Requestは人間によるレビュー後にマージされる。

**影響範囲**：Babelパーサーのtest262テスト許可リストが更新される。これはパーサーのテスト結果に影響する。

## バッチ種別

データ連携 / 定期更新

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 週次 |
| 実行時刻 | 00:00 UTC |
| 実行曜日 | 金曜日 |
| 実行日 | 該当なし |
| トリガー | cron (0 0 * * 5) / workflow_dispatch |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| tc39/test262アクセス | 外部リポジトリへのアクセスが可能であること |
| contents: write権限 | ブランチ作成・プッシュに必要な権限 |
| BOT_TOKEN | Pull Request作成に必要なトークン |

### 実行可否判定

スケジュールまたは手動トリガーで自動的に実行される。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | スケジュール実行のため入力パラメータなし |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| tc39/test262 | Git | 外部リポジトリ（ECMAScript公式テストスイート） |
| Makefile | Make | 現在のTEST262_COMMIT設定 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| update-test262-parserブランチ | Git | 更新されたテスト許可リスト |
| Pull Request | GitHub | レビュー用のPull Request |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | Makefile, パーサーテスト許可リスト |
| 出力先 | リポジトリルートおよびパーサーテストディレクトリ |
| 文字コード | UTF-8 |
| 区切り文字 | テキスト形式 |

## 処理フロー

### 処理シーケンス

```
1. Babelリポジトリチェックアウト
   └─ actions/checkout@v4
2. test262リポジトリチェックアウト
   └─ tc39/test262 を build/test262 にクローン
3. Node.js最新版セットアップ
   └─ actions/setup-node@v4 (node-version: "*")
4. 最新test262バージョン取得
   └─ get-test262-version.sh を実行
5. TEST262_COMMIT更新
   └─ bump-test262-version.sh を実行
6. Babelパーサービルド
   └─ yarn install --immutable --mode=skip-build
   └─ yarn gulp build-rollup
7. test262許可リスト更新
   └─ make test-test262-update-allowlist
8. 変更をコミット
   └─ git commit -am "chore: update test262 to $sha1"
9. ブランチにプッシュ
   └─ git push --force origin update-test262-parser
10. Pull Request作成
    └─ babel/actions/create-pull-request@v2
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B[リポジトリチェックアウト]
    B --> C[test262クローン]
    C --> D[Node.jsセットアップ]
    D --> E[最新test262バージョン取得]
    E --> F[TEST262_COMMIT更新]
    F --> G[yarn install]
    G --> H[gulp build-rollup]
    H --> I[test262許可リスト更新]
    I --> J[変更をコミット]
    J --> K[ブランチにプッシュ]
    K --> L[Pull Request作成]
    L --> M[バッチ終了]
```

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

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

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

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| 1 | test262クローン失敗 | ネットワークエラー | ネットワーク接続を確認 |
| 1 | パーサービルド失敗 | gulp build-rollupエラー | ビルドスクリプトを確認 |
| 1 | 許可リスト更新失敗 | make実行エラー | Makefileを確認 |
| 1 | PR作成失敗 | BOT_TOKEN権限不足 | トークン権限を確認 |

### リトライ仕様

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

### 障害時対応

1. GitHub Actionsログでエラー内容を確認
2. tc39/test262リポジトリへのアクセスを確認
3. 必要に応じて手動でtest262を更新
4. ワークフローを再実行

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

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

## パフォーマンス要件

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

## 排他制御

- 週次スケジュール実行のため、通常は競合なし
- --force プッシュにより、既存のupdate-test262-parserブランチを上書き

## ログ出力

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

## 監視・アラート

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

## 備考

- YARN_ENABLE_SCRIPTS: false 環境変数により、post-installスクリプトを無効化
- yarn install --immutable --mode=skip-build により、lockファイルの変更なしでインストール
- gulp build-rollupはパーサーのバンドルビルドのみを実行（フルビルドは不要）
- Pull Requestには「area: test262」および「repo automation :robot:」ラベルが付与される
- get-test262-version.shはGIT_DIRを設定してtest262リポジトリのHEADを取得
