概要
.github/workflows/ の 3 ワークフローで CI / リリース / ドキュメントを自動化します。環境構築は .github/actions/setup に、リリース手順の実体は scripts/pipeline.ts (mise run pipeline:*、詳細は Pipeline) に切り出しています。
| ワークフロー | トリガー | 役割 |
|---|---|---|
| ci.yml | push: main / pull_request: main |
lint / build / test / android-test |
| release.yml | workflow_dispatch (手動) |
APK + MSI ビルド、リリース作成、update.json デプロイ |
| docs.yml | push: main (site/**) / 手動 |
ドキュメントサイトを Pages の /docs/ へデプロイ |
scripts/release.ps1 (SDK_URL を使い捨て secret として登録) → release.yml (pipeline:* 経由でビルド・署名・リリース作成) → secret 削除手元の再現は mise run pipeline:<cmd> で行えます。
releaseとdocsはconcurrency.group: github-pagesを共有し、Pages デプロイを直列化します (cancel-in-progress: false)。CI のみ PR ごとに古い実行をキャンセルします。- 権限は CI が
contents: read、release / docs がcontents: writeです。 - 署名用 Secrets が無い環境では署名済み成果物は作れません (開発用の
dev実行には影響しません)。
| Secret | 用途 |
|---|---|
TAURI_SIGNING_PRIVATE_KEY (+ _PASSWORD) |
MSI ビルドと updater 署名 |
ANDROID_KEYSTORE_BASE64 / KEYSTORE_PASSWORD / KEY_ALIAS / KEY_PASSWORD |
APK のリリース署名 (pipeline:keystore が復元) |
SDK_URL |
Social SDK の期限付き URL。release.ps1 が登録 → 実行後に削除する使い捨て |
| ジョブ | runner | 内容 |
|---|---|---|
test |
windows-latest |
deps → generate-licenses → docs-deps → lint → pnpm tauri build (署名鍵あり) → test |
android-test |
ubuntu-latest |
Linux 依存の導入 → pipeline:codegen → android-test → Gradle daemon 停止 |
docs-depsは type-aware lint がsite/の tsconfig まで解決するために必要です。android-testの前にはmise run pipeline:codegenが必須です (生成 Kotlin・gradle 設定・rustls-platform-verifier.aarは git 管理外)。setupにはrust: 'true'/android: 'true'を渡し、Rust・Gradle キャッシュを有効化しています。
Actions タブからの単体起動には使い捨て secret が無いため失敗します。必ず pwsh scripts/release.ps1 を使ってください。
- ポータルで Social SDK のダウンロード URL を生成する (約 1 時間で失効)
pwsh scripts/release.ps1を実行し、version(例0.4.0→ そのままタグ名)・channel(release/beta、空はrelease) を入力し、期限付き URL をクリップボードに入れて Enter を押す (貼り付け不要、引数・履歴・ログに残らない。gh auth login済みであること)- ワークフローが
pipeline:*経由で実行する: バージョン同期 → SDK 取得 (libs/discord_partner_sdk.aar) → APK (aarch64) + MSI ビルド → リリース本文生成 → チェックサム →update.jsonデプロイ → リリース作成 (betaはプレリリース・latestにしない)
Social SDK の取り扱い:
- 公開リポジトリに SDK バイナリをコミットしない。 単体での公開は再配布に該当します (アプリへの同梱のみ許諾)。期限付き URL も恒久保管しない (private repo 等への永続化は迂回行為)。
- 毎回ポータルで新規生成し、取得 → 即ビルド → 同梱して公開します。SDK は Discord CDN → CI → 配布アプリ のみを通ります。
- URL は平文の入力欄では渡しません (実行画面・ログに残るため)。
その他:
CHANGELOG.mdを手書きで維持し、該当## [version]節をリリース本文に使います (GitHub UI での記入不要)。- 成果物は Windows が MSI +
.sig+.sha256、Android が APK (aarch64のみ) +apk-signing-fingerprint.txt(アプリの概要画面と照合して真正性を確認)。 - Android ビルドは
ubuntu-latestで先に実行します (1 時間 URL の失効対策)。ANDROID_HOMEはmise.tomlのNDK_VERSIONから解決し、Rust ターゲットは tauri CLI が追加します。
ドキュメント
Section titled “ドキュメント”トリガー: push: main (paths: site/**、workflow 自身) / workflow_dispatch。
.github/actions/setup (js: 'false') → docs-deps → docs-build (BASE_PATH=/WSA_RPC_Bridge/docs/ で site/dist にビルド) → site/dist を destination_dir: docs にデプロイ (keep_files: true のため Pages ルートの update.json 系は残ります)。
共通セットアップ
Section titled “共通セットアップ”setup は mise の用意とキャッシュ復元のみを行う composite action です。
| input | 既定 | 用途 |
|---|---|---|
js |
'true' |
pnpm store キャッシュ + mise run deps |
rust |
'false' |
Swatinem/rust-cache (shared-key でジョブ横断共有) |
android |
'false' |
Gradle キャッシュ (~/.gradle/caches、~/.gradle/wrapper) |
JDK / SDK / NDK 自体は runner image と mise env (mise.toml の NDK_VERSION / SDK_ROOT) から解決し、ここでは入れません。