# インフラ設計書

## 概要

本ドキュメントはGhosttyプロジェクトのインフラストラクチャ設計を記載したものです。Ghosttyはクロスプラットフォーム対応のターミナルエミュレータであり、macOS、Linux、Windows（開発中）向けにビルド・配布されます。CI/CDパイプラインにはGitHub Actionsを使用し、Nix、Docker、Flatpak、Snapによるビルド・パッケージングをサポートしています。

## システム構成

### 全体構成

Ghosttyはデスクトップアプリケーションであり、サーバーインフラではなく開発・ビルド・配布インフラで構成されています。主要なコンポーネントは以下の通りです:

1. **ソースコード管理**: GitHub (ghostty-org/ghostty)
2. **CI/CDパイプライン**: GitHub Actions
3. **ビルドシステム**: Zig Build System + Nix
4. **配布チャネル**: GitHub Releases, Flatpak (Flathub), Snap Store, Homebrew
5. **バイナリストレージ**: Cloudflare R2 (tip.files.ghostty.org)
6. **キャッシュサービス**: Cachix (ghostty.cachix.org)

### サーバー構成

本プロジェクトはデスクトップアプリケーションのため、常駐サーバーは存在しません。ただし、以下のCI/CDランナーがビルドに使用されます。

| サーバー種別 | 役割 | スペック | 台数 |
| --- | --- | --- | --- |
| namespace-profile-ghostty-xsm | 軽量タスク（スキップ判定、リント等） | Extra Small | 複数 |
| namespace-profile-ghostty-sm | 標準ビルド、テスト | Small | 複数 |
| namespace-profile-ghostty-md | Linux x86_64/ARM64ビルド | Medium | 複数 |
| namespace-profile-ghostty-md-arm64 | Linux ARM64ビルド | Medium (ARM64) | 複数 |
| namespace-profile-ghostty-lg | ベンチマーク、Valgrind | Large | 複数 |
| namespace-profile-ghostty-macos-tahoe | macOSビルド | macOS (Tahoe) | 複数 |
| windows-2022 | Windowsビルド（実験的） | Windows Server 2022 | 1 |

### ネットワーク構成

CI/CDパイプラインは以下のネットワーク接続を使用します:

- **GitHub Actions <-> GitHub**: コード取得、リリース公開
- **GitHub Actions <-> Cachix**: Nixキャッシュの取得・保存
- **GitHub Actions <-> Cloudflare R2**: ビルド成果物のアップロード
- **GitHub Actions <-> Apple Notarization Service**: macOSアプリの公証
- **GitHub Actions <-> Sentry**: クラッシュレポートシンボルのアップロード

## ミドルウェア

| ミドルウェア | バージョン | 用途 |
| --- | --- | --- |
| Zig | 0.15.2 | メインビルドシステム |
| Nix | nixpkgs-unstable | 開発環境・パッケージビルド |
| Docker | 最新 | コンテナベースのビルド（Debian、Doxygen） |
| nginx | alpine | ドキュメントホスティング（lib-c-docs Dockerfile） |
| GTK4 | 4.20+ | Linuxフロントエンド |
| libadwaita | 1.x | Linux UIライブラリ |
| Sparkle | 2.9.0 | macOS自動更新フレームワーク |
| GStreamer | 1.x | メディア再生 |
| Xcode | 26.2 | macOS/iOSビルド |

## 外部サービス連携

| サービス名 | 用途 | 接続方式 |
| --- | --- | --- |
| GitHub | ソース管理、CI/CD、リリース | HTTPS/GitHub API |
| Cachix | Nixバイナリキャッシュ | HTTPS |
| Cloudflare R2 | ビルド成果物ストレージ | S3互換API |
| Apple Notarization | macOSアプリ公証 | notarytool CLI |
| Sentry | クラッシュレポート・デバッグシンボル | sentry-cli |
| Flathub | Flatpak配布 | Flatpak Builder |
| Snap Store | Snap配布 | snapcraft |

## スケーリング設計

本プロジェクトはデスクトップアプリケーションのため、ランタイムスケーリングは適用外です。

### CI/CDスケーリング

- **並列実行**: GitHub Actionsの並列ジョブにより、複数プラットフォームのビルドを同時実行
- **キャッシュ活用**: Nixキャッシュ（Cachix）、Zigキャッシュ（nscloud-cache-action）によりビルド時間を短縮
- **条件付きスキップ**: 変更されたファイルに基づき不要なジョブをスキップ（paths-filter）
- **コンカレンシー制御**: `concurrency`設定により重複ビルドをキャンセル

### ビルドマトリクス

- **Linux**: x86_64, aarch64
- **macOS**: universal (x86_64 + aarch64)
- **Windows**: x86_64（実験的）
- **WebAssembly**: wasm32-freestanding
- **Android**: aarch64, x86_64, arm
- **iOS**: aarch64

## 可用性設計

### CI/CD可用性

- **GitHub Actions**: GitHubのSLAに依存
- **Cachix**: キャッシュミス時はフルビルドにフォールバック
- **Cloudflare R2**: Cloudflareのグローバルインフラによる高可用性

### リリース可用性

- **GitHub Releases**: プライマリ配布チャネル
- **Cloudflare R2 (tip.files.ghostty.org)**: Nightly/Tipリリースのバイナリホスティング
- **複数配布チャネル**: Flatpak、Snap、Homebrewによる冗長配布

## バックアップ設計

| 対象 | 方式 | 頻度 | 保持期間 |
| --- | --- | --- | --- |
| ソースコード | Git（GitHub） | コミットごと | 無期限 |
| ビルド成果物 | GitHub Artifacts | ビルドごと | 90日（デフォルト） |
| Tipリリース | Cloudflare R2 | リリースごと | 無期限（コミットハッシュでバージョニング） |
| Nixキャッシュ | Cachix | ビルドごと | Cachixのポリシーに従う |

## 監視設計

### CI/CD監視

- **GitHub Actions Status**: ワークフロー実行状況の監視
- **Required Checks**: 必須ジョブの成功/失敗を集約
- **Sentry**: クラッシュレポートの収集・監視

### リリース監視

- **Sparkle Appcast**: macOS自動更新のためのフィード管理
- **Tip Release Check**: 既存リリースの重複チェック

## 備考

### ドキュメント生成インフラ

Doxygenを使用したlibghostty APIドキュメントは、Dockerコンテナ（lib-c-docs/Dockerfile）でビルドされ、nginx:alpineでホスティングされます。

### ビルドオプション

ビルドは以下のフラグで制御可能です:
- `-Doptimize`: Debug, ReleaseSafe, ReleaseFast
- `-Dcpu`: baseline, native
- `-Dapp-runtime`: none, gtk
- `-Dgtk-x11`, `-Dgtk-wayland`: Linux GUI バックエンド
- `-Dflatpak`, `-Dsnap`: パッケージング固有設定
- `-Dsentry`: クラッシュレポート有効化
- `-Di18n`: 国際化対応

### セキュリティ

- **コードサイニング**: macOSアプリは Apple Developer証明書で署名
- **Notarization**: macOSアプリは Apple Notarization Service で公証
- **Minisign**: ソースtarballは Minisign で署名
- **シークレット管理**: GitHub Secretsで証明書、APIキー等を管理
