> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 自動アップデートとリリースチャネル

署名済みアップデートフィード、stable/beta チャネル、同梱のリリースワークフロー。

## アップデーターのキーペアを一度だけ生成

アップデーターはダウンロードしたアーティファクトの minisign 署名を検証します。Tauri の署名ツールでキーペアを生成し、秘密鍵は TAURI_SIGNING_PRIVATE_KEY に、パスワードは TAURI_SIGNING_PRIVATE_KEY_PASSWORD に入れて、両方ともシークレットストアに保管してください — リポジトリには入れません。アップデーターアーティファクトを作るビルドは各インストーラーの隣に .sig サイドカーを出力します。公開鍵はクライアントに渡し、秘密鍵は CI に残します。

```
corepack pnpm --filter @supastack/desktop exec tauri signer generate -w ~/.tauri/product.key
```


## ビルド時にアップデーターを設定

tauri.conf.json には空の endpoints と pubkey を持つセンチネルのアップデーターブロックが同梱されています — キーがなければアップデータープラグインを初期化できないため、そのまま残してください。実際の値はビルド時に --config JSON オーバーレイまたは TAURI_CONFIG 環境変数でディープマージされます。SUPASTACK_UPDATER_ENDPOINT と SUPASTACK_UPDATER_PUBKEY を設定すると、check:release-config が貼り付けるべき正確なオーバーレイを出力します。

両方設定するか、両方とも設定しないでください。endpoints だけのオーバーレイでは pubkey が空のままになり、チェックは動いているように見えてすべてのインストールが署名検証に失敗します。エンドポイント URL は {{target}}、{{arch}}、{{current_version}} のプレースホルダーを持ち — バージョンのスロットは必須です — さらにリリースチャネルを有効にする任意の {{channel}} パスセグメントを含められます。

```
# check:release-config prints this overlay for tauri build --config:
# {"plugins":{"updater":{"endpoints":["https://releases.example.com/{{channel}}/{{target}}/{{arch}}/{{current_version}}"],"pubkey":"<base64 public key>"}}}
# SUPASTACK_UPDATER_ENDPOINT=
# SUPASTACK_UPDATER_PUBKEY=
```


## latest.json フィードを公開

各エンドポイントは latest.json マニフェストを返します — version、notes、pub_date、そして darwin-aarch64、darwin-x86_64、windows-x86_64、windows-aarch64、linux-x86_64、linux-aarch64 をカバーする platforms マップで、各エントリーはインストーラー URL とその署名をペアにします。

release:manifest スクリプトで作成します。バンドルディレクトリを走査して .app.tar.gz、-setup.exe(.msi より優先)、.AppImage のアーティファクトを探し — それぞれに .sig が隣接している必要があります — マニフェストを書き出すかマージします。フラグは --version、--base-url、--platform と組み合わせる --bundle-dir、実行をまたいでプラットフォームを蓄積する --merge、--notes、--pub-date、--out をカバーします。

```
corepack pnpm --filter @supastack/desktop release:manifest -- \
  --version 1.2.0 \
  --base-url https://releases.example.com/stable \
  --bundle-dir src-tauri/target/release/bundle \
  --platform windows-x86_64 \
  --merge latest.json
```


## stable と beta チャネル

エンドポイントに {{channel}} プレースホルダーが含まれる場合、アプリメニューで Beta Updates チェックボックスが有効になり、フィードを stable と beta で切り替えられます。選択はアプリ設定の隣の update-channel ファイルに永続化され、SUPASTACK_UPDATE_CHANNEL が実行ごとに上書きします — 認識できない値は警告付きで無視されます — デフォルトは stable です。プレースホルダーがなければトグルは無効のままで、stable フィードのみがチェックされます。


## アップデートがチェックされるタイミング

起動時に 1 回、静かなバックグラウンドチェックが実行され、アップデートがある場合のみダイアログを表示します。Check for Updates… メニュー項目はすべての結果を報告します。チェックは直列化され、同時に来た 2 件目のリクエストは捨てられます。利用可能なアップデートは Install and Restart を提示し、ダウンロード、インストール、アプリの再起動を行います。未設定のビルドはアップデートが設定されていないと応答し、失敗はリトライではなくダイアログとして表面化します。


## 同梱のリリースワークフロー

.github/workflows/desktop-release.yml は、desktop-v* タグ、またはバージョンとチャネルを指定した手動ディスパッチで、マトリクス — 両アーキテクチャの macOS、Windows、Ubuntu — をビルドします。タグからマニフェストのバージョンを刻印し(これを省略したリリースは永遠に自分自身をアップデートとして提示します)、プラットフォームごとのマニフェストをマージし、latest.json とすべてのインストーラーおよび署名を載せたドラフトの GitHub リリースを作成します — beta チャネルでは prerelease としてマークされます。

リポジトリ変数として SUPASTACK_APP_URL と SUPASTACK_UPDATER_ENDPOINT、シークレットとして SUPASTACK_UPDATER_PUBKEY と署名用秘密鍵およびそのパスワードが必要です。Apple の署名資格情報は任意の追加項目です。完全なランブックはリポジトリ内の `docs/desktop-updates.md` にあります。


## 検証とトラブルシューティング

ビルドをインストールし、新しいマニフェストをテストフィードに公開して、次のチェックでアップデートダイアログが届き、アプリが新しいバージョンに再起動することを確認してください。その後 beta に切り替えて、チャネルフィードの応答が変わることを確認します。

[バンドルとリリース](https://supastack.dev/ja/docs/desktop/release.md)

[コード署名](https://supastack.dev/ja/docs/desktop/signing.md)


## 次へ

[デスクトップシェルの内部](https://supastack.dev/ja/docs/desktop/internals.md)
