手動作業なしのリリース
Gitでリリースをタグし、自動的にTestFlightとPlay Storeに署名されたiOSおよびAndroidバイナリを送信します。
__CAPGO_KEEP_0__のインストール手順とフルマークダウンガイドのセットアッププロンプトをコピーする。
iOSおよびAndroidのビルドを直接GitHubリポジトリから自動化できます。ワークフローファイルとリポジトリシークレットの数少ないセットで、チームの誰もMac、Xcode、またはAndroid Studioをインストールする必要なく、プッシュ、タグ、または手動トリガーごとに署名された、ストアに準備されたアプリを生成できます。
手動作業なしのリリース
Gitでリリースをタグし、自動的にTestFlightとPlay Storeに署名されたiOSおよびAndroidバイナリを送信します。
ローカルセットアップなし
WindowsまたはLinuxのコントリビューターはiOSビルドをトリガーできます。Xcode、プロビジョニングのハッスル、ローカルに保管されている共有署名証明書はありません。
スコープされたシークレット
シークレットはGitHubリポジトリのシークレットに保存され、スコープがリポジトリに限定され、ワークフロー実行者にのみ表示されます。簡単に回転し、簡単に検証できます。
並列ビルド
ワークフローでマトリックスジョブを使用して、iOSとAndroidを同時にビルドできます。通常のリリースは10分以内に完了します。
ワークフローを設定する前に、以下の条件を確認してください。
bunx @capgo/cli@latest app add 必要に応じて)bunx @capgo/cli@latest build init — Managing Credentials を参照してくださいbunx @capgo/cli@latest build request com.example.app --platform android --build-mode debug — CI は最初のビルドをデバッグする場所ではありませんgh) インストール済みかつ認証済み (gh auth login)Capgo CLI はローカル資格情報を使用可能なファイルとしてエクスポートできます。ファイルと .env ファイルと gh secret set -f、CI/CDの設定を3つのコマンドで完了する — 手動のbase64エンコード、JSONの操作、秘密のコピー・ペーストなし。
Capgo API キーをリポジトリシークレットとして追加してください。
API キーはアプリごとのクレデンシャルストアの一部ではないので、手動で1度追加してください。
gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"__CAPGO_KEEP_0__ キーを生成する Capgo ダッシュボード アップロード __CAPGO_KEEP_0__ キーを生成するには、ダッシュボードにアクセスする必要があります。 __CAPGO_KEEP_0__ ダッシュボードにアクセスするには、ダッシュボードのアップロード機能または上位の権限が必要です。
クレデンシャルをファイルにエクスポートしてください。 .env ファイル
インタラクティブな資格情報マネージャーを実行します:
bunx @capgo/cli@latest build credentials manage --appId com.example.appTUIで選択 .envにエクスポートCLIは .env.capgo.<appId> 現在のディレクトリに 0600 (オーナーが読み取り専用の) — 例えば .env.capgo.com.example.app両方のiOSとAndroidが設定されている場合、両方のプラットフォームのシークレットは # === IOS === と # === ANDROID === セクションヘッダー下に同じファイルに保存されます。iOSとAndroidのenv-var名は互いに異なるため、組み合わせることは競合が生じない。
__CAPGO_KEEP_0__ Actions シークレットに .env file to GitHub Actions secrets
コマンドは、.envファイルを読み取り、1行ごとにリポジトリシークレットを作成します。 gh secret set -f ターミナルウィンドウ KEY=value クリップボードにコピー
gh secret set -f .env.capgo.com.example.appThat’s it — every secret your workflow needs is now in GitHub. Verify with gh secret list.
ワークフロー ファイルを作成する
追加 .github/workflows/capgo-build.yml リポジトリに追加します。 3 つのトリガー パターンから 1 つを選択して、ビルドを実行する方法に応じてください。
参考として gh secret set -f これらのリポジトリ シークレット (ワークフロー YAML はこれらの正確な名前で参照します) を作成します:
| プラットフォーム | 作成されたシークレット |
|---|---|
| iOS | BUILD_CERTIFICATE_BASE64, P12_PASSWORD, CAPGO_IOS_PROVISIONING_MAP_BASE64, APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_KEY_CONTENT, APP_STORE_CONNECT_TEAM_ID |
| Android | ANDROID_KEYSTORE_FILE, KEYSTORE_KEY_ALIAS, KEYSTORE_KEY_PASSWORD, KEYSTORE_STORE_PASSWORD, PLAY_CONFIG_JSON |
| (手動で追加) | CAPGO_TOKEN |
これらのワークフロー例は、必要なすべてのものを参照しているので、覚える必要はありません。
以下の3つの例は、最も一般的なパターンをカバーしています。すべて同じ形を使用しています: リポジトリをチェックアウト、依存関係をインストール、Webアセットをビルド、ネイティブに同期し、Capgo ではビルドを実行し、環境変数としてクレデンシャルを渡します。
誰でも書き込み権限がある人は、__CAPGO_KEEP_0__ の「アクション」タブからプラットフォームを選択してビルドを実行できる。 アクション GitHub/workflows/__CAPGO_KEEP_1__-build-manual.yml
name: Capgo Build (Manual)
on: workflow_dispatch: inputs: platform: description: 'Platform to build' required: true default: 'android' type: choice options: [ios, android, both] mode: description: 'Build mode' required: true default: 'debug' type: choice options: [debug, release]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync
- name: Trigger Capgo Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform ${{ inputs.platform }} \ --build-mode ${{ inputs.mode }}Copy to clipboard com.example.app アプリ ID とともに。コミットすると、 アクション → Capgo ビルド (手動) → ワークフロー実行 を実行してください。
両方のプラットフォームを並行してビルドし、タグのバージョンをプッシュすると同時に配信します。 v1.4.0これは最も一般的なプロダクション設定です — git tag v1.4.0 && git push --tags リリースコマンドになります。
name: Capgo Build (Release)
on: push: tags: - 'v*'
jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: [ios, android] steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync ${{ matrix.platform }}
- name: Build ${{ matrix.platform }} env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # iOS BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} # Android ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform ${{ matrix.platform }} \ --build-mode releaseマトリックスはiOSとAndroidを別々のランナーで並行して実行します。設定 fail-fast: false iOSビルドが失敗しても、進行中のAndroidビルドをキャンセルしない (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。
コストが低く、フィードバックが速く、プレイストアのアップロードをスキップして純粋にSmokeテストとして使用できます。 main__CAPGO_KEEP_0__/workflows/__CAPGO_KEEP_1__-build-main.yml
name: Capgo Build (Main)
on: push: branches: [main] paths: - 'src/**' - 'android/**' - 'ios/**' - 'package.json' - 'capacitor.config.*'
jobs: smoke-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync android
- name: Smoke build (Android debug) env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform android \ --build-mode debug \ --no-playstore-upload \ --output-uploadfilterはワークフローがドキュメントのみの変更で実行されないようにする paths Play Storeの提出をスキップ (必要ない)、および --no-playstore-upload 結果のAPKのダウンロードURLを生成して、テストデバイスにインストールできるようにします。 PLAY_CONFIG_JSON Common Patterns --output-upload セクション「Common Patterns」
どちらかを組み合わせてください --no-playstore-upload__CAPGO_KEEP_0__ --ios-distribution ad_hoc __CAPGO_KEEP_1__ --output-upload 時間制限のダウンロードURLを取得する。
パス --output-record <path> to persist the build artifact URL and QR code to disk when the build succeeds, then read it back in subsequent steps with build last-outputログスクラピングなし、正規表現なし。
- name: Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # ...credentials... run: | bunx @capgo/cli@latest build request com.example.app \ --platform android --build-mode debug \ --output-upload --output-retention 1d \ --output-record /tmp/build.json
- name: Comment on PR with build URL env: GH_TOKEN: ${{ github.token }} run: | URL=$(bunx @capgo/cli@latest build last-output --path /tmp/build.json --field outputUrl) if [ -n "$URL" ]; then gh pr comment ${{ github.event.pull_request.number }} \ --body "Debug build ready: $URL" fi--output-record /tmp/build.json JSONレコード( jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) and a PNG QR code alongside at /tmp/build.json.qr.png. build last-output それを読み戻します。
--field outputUrl ダウンロードURLのみを出力(改行区切り;安全な URL=$(...)).--field qrCodePngPath PNGパスを出力して、PRアタッチメントとしてアップロードできます。--qr ASCII QR をレンダリングし、プルリクエストコメントのインラインスキャナビリティのためにマークダウン code フェンス内にドロップします。デフォルトでは、各リリースビルドはビルド番号をインクリメントします。制御する値 (たとえば、Git タグ) に固定したい場合は、 --skip-build-number-bump:
- name: Set version from tag run: | VERSION="${GITHUB_REF#refs/tags/v}" # Update package.json or your version source here bun pm version "$VERSION" --no-git-tag-version
- name: Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # ...credentials... run: | bunx @capgo/cli@latest build request com.example.app \ --platform ios --build-mode release \ --skip-build-number-bumpbun install はすでに高速化されており、JS依存関係キャッシュが稀に有効になることはほとんどありませんが、Capacitorのネイティブ依存関係(CocoaPods、Gradle)は大規模プロジェクトではキャッシュする価値があります:
- uses: actions/cache@v4 with: path: | ~/.bun/install/cache ios/App/Pods android/.gradle key: ${{ runner.os }}-capgo-${{ hashFiles('**/bun.lock', '**/Podfile.lock') }}| 症状 | 原因 |
|---|---|
CAPGO_TOKEN is not set | シークレットが追加されていません、またはジョブにアクセスできません(環境/ブランチ保護を確認してください) |
| iOS / Android 認証情報が欠落しているエラー | gh secret set -f 実行されていません、または異なるリポジトリに対して実行されました。確認してください: gh secret list |
cap sync CIで失敗しますが、ローカルでは正常に動作します | ネイティブ プラグインが package.json、または忘れていました bun install 前 cap sync |
| ビルドは成功しましたが、App Store Connectにアプリが表示されません | 間違ったチームID、またはApp Store Connectにアプリのレコードがまだ存在していません。ローカルで確認してください。 bunx @capgo/cli@latest build credentials manage |
| ビルドが「プロジェクトのアップロード」でハングします | プロジェクトのアーカイブが通常より大きい場合、確認してください。 node_modules アップロードされていないはずなので、デフォルトではアップロードされていないはずです。 |
Provisioning profile doesn't match bundle ID | プロビジョニングマップはXcodeが署名しているbundle IDと異なるbundle IDを指しています。プロファイルを再読み込みし、再エクスポートしてください。 build init ローカルでクレデンシャルが変更されたが、CIは失敗します build credentials manage |
| 再エクスポートして再プッシュしてください: | マネージャーは組み合わせられたファイルを書き込むことを拒否します bunx @capgo/cli@latest build credentials manage → gh secret set -f .env.capgo.<appId> |
| プラットフォーム間で共有設定キーが異なります。マネージャーは警告を出し、確認を求めています。確認してオーバーライトする、またはプラットフォームごとに再エクスポートしてください。 | Shared config keys differ between platforms — the manager warns and asks for confirmation. Either confirm to overwrite-one-wins, or re-export per-platform with --platform ios / --platform android |
build last-output 空のURLを出力します。 | ビルドは失敗しました --output-uploadアーティファクトを生成する前に失敗したかもしれません。 outputUrl は記録に含まれます。 null ブランチは [ -n "$URL" ] 使用する前に |
build last-output エラー Unsupported record schemaVersion | レコーダーが記録を作成したものよりも古いCLIで実行されている場合、プロデューサーとリーダーを同じ明示的なバージョン (例えば bunx @capgo/cli@7.104.0 … 両方の側面) に固定するのではなく、 @latestジョブ間で漂うことができるため、 |
プラットフォーム固有のビルドエラーについては、 トラブルシューティングガイド.