# バッチ設計書 14-publish.yml

## 概要

本ドキュメントは、メインブランチへのプッシュ時にリリースを実行するGitHub Actionsワークフローの設計書です。CLI、Tauri、npm、Docker、AURのビルドとパブリッシュを行う統合リリースパイプラインです。

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

このバッチは、OpenCodeプロジェクトの主要なリリースワークフローであり、複数のプラットフォーム向けにビルド・配布を自動化します。バージョン管理、CLIビルド、デスクトップアプリビルド、パッケージ公開を一連のジョブで実行します。

**業務上の目的・背景**：OpenCodeはCLI、デスクトップアプリ（Tauri）、npmパッケージ、Dockerイメージ、AURパッケージなど複数の形態で配布されています。これらすべてを手動でリリースするのは非常に手間がかかり、ヒューマンエラーのリスクもあります。このバッチにより、一貫性のある自動リリースプロセスを実現し、開発者の負担軽減と品質担保を両立します。

**バッチの実行タイミング**：ci、dev、beta、snapshot-*ブランチへのプッシュ時、またはworkflow_dispatchによる手動実行時に起動します。

**主要な処理内容**：
1. versionジョブ：バージョン情報の生成、GitHubリリース作成（AIによるchangelog生成を含む）
2. build-cliジョブ：マルチプラットフォーム向けCLIビルド
3. build-tauriジョブ：5プラットフォーム向けデスクトップアプリビルド（macOS x86/ARM、Windows、Linux x86/ARM）
4. publishジョブ：npm公開、Dockerイメージビルド、AURパッケージ更新、GitHubリリースアセットアップロード

**前後の処理との関連**：version.tsスクリプトでバージョン生成、publish.tsスクリプトで最終公開処理を実行。リリース公開後はsync-zed-extension.ymlが起動。

**影響範囲**：GitHub Releases、npm registry、GitHub Container Registry、AUR、各種ダウンロードサイト

## バッチ種別

CI/CD / リリースパイプライン / マルチプラットフォームビルド

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | プッシュ時（随時） |
| 実行時刻 | - |
| 実行曜日 | - |
| 実行日 | - |
| トリガー | push (ci/dev/beta/snapshot-*) / workflow_dispatch |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| リポジトリ | github.repository == 'anomalyco/opencode' |
| OPENCODE_APP_ID | GitHub App ID |
| OPENCODE_APP_SECRET | GitHub App Secret |
| OPENCODE_API_KEY | OpenCode API Key（changelog生成用） |
| APPLE_CERTIFICATE | macOS署名用証明書 |
| TAURI_SIGNING_PRIVATE_KEY | Tauri署名キー |
| AUR_KEY | AURデプロイ用SSHキー |

### 実行可否判定

- リポジトリが `anomalyco/opencode` であること（forkでは実行されない）
- 対象ブランチへのプッシュまたは手動実行

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| inputs.bump | choice | No | - | バージョンバンプ種別（major/minor/patch） |
| inputs.version | string | No | - | バージョン上書き値 |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| Git Repository | Git | ソースコード |
| package.json | JSON | 現在のバージョン情報 |
| コミット履歴 | Git Log | changelog生成用 |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| GitHub Releases | Release | リリースページとアセット |
| npm registry | Package | opencode-aiパッケージ |
| ghcr.io | Docker Image | コンテナイメージ |
| AUR | PKGBUILD | Archパッケージ |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| CLIバイナリ | opencode-{platform}-{arch} |
| デスクトップアプリ | opencode-desktop-{platform}-{arch}.{ext} |
| npmパッケージ | opencode-ai@{version} |
| Dockerイメージ | ghcr.io/anomalyco/opencode:{version} |

## 処理フロー

### 処理シーケンス

```
1. versionジョブ
   └─ バージョン生成、GitHubリリース作成（draft）
2. build-cliジョブ（version完了後）
   └─ マルチプラットフォームCLIビルド
3. build-tauriジョブ（build-cli完了後）
   └─ 5プラットフォーム並列でデスクトップアプリビルド
4. publishジョブ（全ビルド完了後）
   └─ npm公開、Docker公開、AUR更新、リリース公開
```

### フローチャート

```mermaid
flowchart TD
    A[Push/Dispatch] --> B[version]
    B --> C[build-cli]
    C --> D[build-tauri]
    D --> D1[macOS x86]
    D --> D2[macOS ARM]
    D --> D3[Windows]
    D --> D4[Linux x86]
    D --> D5[Linux ARM]
    D1 --> E[publish]
    D2 --> E
    D3 --> E
    D4 --> E
    D5 --> E
    E --> F[npm publish]
    E --> G[Docker build/push]
    E --> H[AUR update]
    E --> I[Release finalize]
```

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

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

本バッチはデータベースを直接操作しません。

| 処理 | 対象 | 操作種別 | 概要 |
|-----|------|---------|------|
| リリース作成 | GitHub Releases | CREATE | ドラフトリリース作成 |
| アセットアップロード | GitHub Release Assets | CREATE | ビルド成果物アップロード |
| パッケージ公開 | npm registry | CREATE | npmパッケージ公開 |
| イメージプッシュ | ghcr.io | CREATE | Dockerイメージ公開 |

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

該当なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | ビルドエラー | コンパイル失敗 | ソースコード修正 |
| - | 署名エラー | 証明書期限切れ | 証明書更新 |
| - | 公開エラー | 認証失敗 | Secrets確認 |
| - | タイムアウト | ビルド時間超過 | リソース確認 |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | 0（fail-fast: false） |
| リトライ間隔 | - |
| リトライ対象エラー | 個別ジョブ再実行 |

### 障害時対応

1. 失敗ジョブのログを確認
2. ドラフトリリースを削除（必要に応じて）
3. 問題修正後、ワークフローを再実行
4. 部分的に成功した公開は手動でロールバック

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

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 各ジョブ単位 |
| コミットタイミング | 各公開完了時 |
| ロールバック条件 | 手動ロールバックのみ |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 1リリース/実行 |
| 目標処理時間 | 60分以内 |
| メモリ使用量上限 | 各ランナー設定に従う |

## 排他制御

```yaml
concurrency: ${{ github.workflow }}-${{ github.ref }}-${{ inputs.version || inputs.bump }}
```

同一ワークフロー・ブランチ・バージョンの組み合わせで排他制御されます。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| 開始ログ | 各ジョブ開始時 | ジョブ名、バージョン |
| 進捗ログ | 各ステップ完了時 | ビルド結果、アップロード状況 |
| 終了ログ | ワークフロー終了時 | リリースURL |
| エラーログ | エラー発生時 | ビルドエラー詳細 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| ワークフロー失敗 | 1回 | GitHub Actions通知 |
| ビルド時間 | 60分超過 | GitHub Actions通知 |

## 備考

- betaブランチの場合はanomalyco/opencode-betaリポジトリにリリース
- Tauriビルドは各プラットフォーム固有のランナーで実行
- macOSビルドにはApple Developer証明書による署名・公証が含まれる
- fail-fast: falseにより、一部プラットフォームの失敗が他に影響しない
- AppImage形式のビルドにはカスタムtauri-cliブランチを使用
