# バッチ設計書 8-CI（test）

## 概要

本ドキュメントは、InvenTreeモバイルアプリのプルリクエスト・マスターブランチへのプッシュ時に自動実行されるCI/CDワークフロー「CI（test）」の設計仕様を記載します。

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

本バッチは、GitHub Actionsを使用して、コードの品質を担保するための自動テストパイプラインを実行します。翻訳ファイルの収集、静的解析、Flutterユニットテスト、コードカバレッジのCoveralls連携を行います。

**業務上の目的・背景**：ソフトウェア開発において、コードの品質を継続的に担保することは重要です。本CIパイプラインは、プルリクエストやマスターブランチへの変更時に自動的にテストを実行し、コードの品質問題を早期に検出します。これにより、バグの混入を防ぎ、コードベースの健全性を維持します。

**バッチの実行タイミング**：masterブランチへのプッシュ時、またはmasterブランチへのプルリクエスト作成・更新時に自動実行されます。

**主要な処理内容**：
1. リポジトリのチェックアウト（サブモジュール含む）
2. Python、Java、Flutter環境のセットアップ
3. 翻訳ファイルの収集（collect_translations.py）
4. 静的解析テスト（dart analyze、dart format）
5. InvenTreeサーバーの起動（テスト用）
6. Flutterユニットテスト実行
7. Coverallsへのカバレッジレポート送信

**前後の処理との関連**：本ワークフローは独立して実行されます。他のワークフロー（android.yaml、ios.yaml）とは別に、コード品質の検証に特化しています。

**影響範囲**：ソースコードの変更がテストに合格しない場合、プルリクエストのマージがブロックされます。

## バッチ種別

CI/CDワークフロー（自動テスト・品質検証）

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | イベント駆動 |
| 実行時刻 | なし（イベント発生時） |
| 実行曜日 | なし |
| 実行日 | なし |
| トリガー | masterブランチへのpush / masterブランチへのpull_request |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| GitHubリポジトリ | GitHub上でホストされていること |
| GitHub Actions有効 | リポジトリでGitHub Actionsが有効であること |
| GITHUB_TOKEN | シークレットにGITHUB_TOKENが設定されていること |

### 実行可否判定

masterブランチへのpushイベント、またはmasterブランチへのpull_requestイベントで自動的に実行されます。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| なし | - | - | - | イベント駆動のため明示的なパラメータなし |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ソースコード | Git | リポジトリ全体（サブモジュール含む） |
| .github/workflows/ci.yaml | YAML | ワークフロー定義ファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| GitHub Actions | ログ | テスト実行結果・ログ |
| Coveralls | レポート | コードカバレッジレポート |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | coverage/lcov.info（一時ファイル） |
| 出力先 | ワークフロー実行環境内 |
| 文字コード | UTF-8 |
| 区切り文字 | LCOV形式 |

## 処理フロー

### 処理シーケンス

```
1. ワークフロー開始
   └─ push/pull_requestイベントでトリガー
2. 環境セットアップ
   └─ checkout（サブモジュール含む）
   └─ Python 3.11セットアップ
   └─ Java 11（temurin）セットアップ
   └─ Flutter/FVMセットアップ
3. 翻訳ファイル収集
   └─ cd lib/l10n && python collect_translations.py
4. 静的解析テスト
   └─ find_dart_files.py実行
   └─ fvm install
   └─ fvm flutter pub get
   └─ fvm flutter analyze
   └─ dart format --output=none --set-exit-if-changed .
5. InvenTreeサーバー起動
   └─ inventreeリポジトリをクローン
   └─ invoke install/migrate/dev.import-fixtures
   └─ invoke dev.server起動
6. ユニットテスト実行
   └─ fvm flutter test --coverage
7. Coveralls連携
   └─ coverallsapp/github-action実行
```

### フローチャート

```mermaid
flowchart TD
    A[イベント発生] --> B[Checkout]
    B --> C[Python/Java/Flutter セットアップ]
    C --> D[翻訳ファイル収集]
    D --> E[静的解析テスト]
    E --> F{解析成功?}
    F -->|成功| G[InvenTree サーバー起動]
    F -->|失敗| H[ワークフロー失敗]
    G --> I[ユニットテスト実行]
    I --> J{テスト成功?}
    J -->|成功| K[Coveralls レポート送信]
    J -->|失敗| H
    K --> L[ワークフロー成功]
    H --> M[終了]
    L --> M
```

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

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

| 処理 | 対象テーブル | 操作種別 | 概要 |
|-----|-------------|---------|------|
| テスト用DB作成 | SQLite | CREATE | テスト用の一時データベース作成 |
| フィクスチャ投入 | 各テーブル | INSERT | テストデータの投入 |

### テーブル別操作詳細

テスト用の一時SQLiteデータベースが作成され、テスト完了後に削除されます。本番環境には影響しません。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | 静的解析エラー | コードに問題がある | flutter analyzeの結果を確認し修正 |
| - | フォーマットエラー | コードスタイルが不正 | dart formatを実行 |
| - | テスト失敗 | ユニットテストが失敗 | 失敗したテストを確認し修正 |
| - | サーバー起動失敗 | InvenTreeサーバーが起動しない | サーバー設定を確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（手動で再実行） |
| リトライ間隔 | - |
| リトライ対象エラー | - |

### 障害時対応

ワークフローが失敗した場合、GitHub Actionsのログを確認し、該当する問題を修正後にコミットを更新してください。

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | テスト用データベースのみ |
| コミットタイミング | 各テスト完了時 |
| ロールバック条件 | テスト失敗時（DBは一時的なため実質不要） |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1回のワークフロー実行 |
| 目標処理時間 | 10〜20分 |
| メモリ使用量上限 | GitHub Actions実行環境による |

## 排他制御

同時に複数のワークフローが実行される可能性がありますが、それぞれ独立した環境で実行されるため競合しません。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| GitHub Actions | 各ステップ実行時 | コマンド出力・結果 |
| テストログ | テスト実行時 | テスト結果詳細 |
| カバレッジ | テスト完了時 | コードカバレッジ情報 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー失敗 | 失敗時 | GitHubリポジトリ（PR/コミットステータス） |

## 備考

- 環境変数でInvenTreeサーバーの設定が定義されています（INVENTREE_SITE_URL等）
- テスト用データベースはSQLiteを使用
- FVM（Flutter Version Manager）を使用してFlutterバージョンを管理
- Coverallsでコードカバレッジを継続的に追跡
- InvenTreeサーバーはテスト実行のためにバックグラウンドで起動され、30秒待機後にテストが開始されます
