Skip to content

GitHub アクション

Mac、Xcode、または Android Studio をインストールする必要がなくても、チームの誰もが iOS と Android のビルドを直接 GitHub リポジトリから自動化できます。ワークフロー ファイル 1 つとリポジトリのシークレットの少数を使用すると、プッシュ、タグ、または手動トリガーごとに、署名済みのストア用アプリが生成されます。

手動作業なしのリリース

Git でのリリースタグを付与すると、自動的に TestFlight と Play Store に署名済みの iOS と Android バイナリが送信されます。

ローカル設定なし

Windows または Linux のコントリビューターが iOS ビルドをトリガーできます。Xcode、プロビジョニングのハッスル、共有署名証明書がラップトップに漂う必要はありません。

スコープされたシークレット

GitHub リポジトリのシークレットにクレデンシャルが保存され、ワークフロー ランナーにのみ表示されます。 回転が簡単、監査も簡単です。

並列ビルド

iOS と Android を同時にビルドするマトリックス ジョブで、通常のリリースは 10 分未満で完了します。

Capgo のアカウントと有効なサブスクリプション、および

  • A Capgo account with an active subscription and a Capgo API key
  • Your app registered in Capgo (bunx @capgo/cli@latest app add ローカルにビルド用クレデンシャルが設定されている
  • — ここに参照してください bunx @capgo/cli@latest build init __CAPGO_KEEP_0__ 資格情報の管理 ワイザードウォークスルー用に
  • 成功したローカルビルド (bunx @capgo/cli@latest build request com.example.app --platform android --build-mode debug) — CIは最初のビルドをデバッグする場所ではありません
  • 資格情報 GitHub CLI (gh) インストール済みで認証済み (gh auth login)

Capgo CLI は、ローカル認証情報を使用可能なファイルとしてエクスポートできます。 .env __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ と組み合わせると、CI/CD セットアップ全体を 3 つのコマンドに変換できます — マニュアルの base64 エンコード、JSON の操作、秘密のコピーとペーストは必要ありません。 gh secret set -f__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ キーをリポジトリシークレットとして追加してください

  1. Add your Capgo API key as a repository secret

    The API key isn’t part of the per-app credential store, so add it once manually:

    コピーする
    gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"

    __CAPGO_KEEP_0__ ダッシュボードでキーの生成 Capgo ダッシュボードでキーの生成 __CAPGO_KEEP_0__ ダッシュボードでキーの生成 __CAPGO_KEEP_0__ ダッシュボードでキーの生成 __CAPGO_KEEP_0__ 以上の権限が必要です。

  2. __CAPGO_KEEP_0__ をファイルにエクスポートしてください。 .env ファイル

    インタラクティブな __CAPGO_KEEP_0__ マネージャーを実行してください。

    ターミナル画面
    bunx @capgo/cli@latest build credentials manage --appId com.example.app

    TUI で ファイルにエクスポートしてください。. The CLI writes .env.capgo.<appId> __CAPGO_KEEP_0__ は 0600 __CAPGO_KEEP_0__ のモード .env.capgo.com.example.app例えば、__CAPGO_KEEP_0__ です。 # === IOS ===# === ANDROID === セクション ヘッダー。 iOS と Android の環境変数名は分離されているため、組み合わせることは競合しない。

  3. ファイルを __CAPGO_KEEP_0__ Actions secrets にアップロードしてください。 .env file to GitHub Actions secrets

    ターミナルウィンドウ gh secret set -f クリップボードにコピー KEY=value すべてのシークレットが __CAPGO_KEEP_0__ にアップロードされたので、完了です。

    .envファイルをコミットしないでください。
    gh secret set -f .env.capgo.com.example.app

    これには、平文の署名材料が含まれています。 .envファイルを GitHub にアップロードした後、 gh secret list.

  4. ワークフロー ファイルを作成

    追加 .github/workflows/capgo-build.yml リポジトリに追加してください。 3 つのトリガー パターンのいずれかを選択して、ビルドを実行する方法に応じて、ビルドをトリガーします。

何が秘密のセクションに表示されるか

参考として

これらのリポジトリのシークレットを作成します (ワークフロー YAML はこれらの正確な名前で参照します): gh secret set -f プラットフォーム

作成されるシークレットコピー
iOSBUILD_CERTIFICATE_BASE64, P12_PASSWORD, CAPGO_IOS_PROVISIONING_MAP_BASE64, APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_KEY_CONTENT, APP_STORE_CONNECT_TEAM_ID
AndroidANDROID_KEYSTORE_FILE, KEYSTORE_KEY_ALIAS, KEYSTORE_KEY_PASSWORD, KEYSTORE_STORE_PASSWORD, PLAY_CONFIG_JSON
(added manually)CAPGO_TOKEN

必要ありません。これらのワークフロー例は、以下に示すように、すべてのステップを参照しています。

3 つの例は、最も一般的なパターンをカバーしています。すべて同じ形を使用します: リポジトリを確認、依存関係をインストール、Web アセットをビルド、ネイティブに同步、次に Capgo をビルドして、環境変数としてクレデンシャルを渡します。

誰でも書き込みアクセス権を持つ人は、__CAPGO_KEEP_0__ の「アクション」タブから、プラットフォームを選択してビルドを実行できます。アドホックのテストビルドや、リリースを要求するために使用します。 Actions tab in GitHub with a platform dropdown. Useful for ad-hoc test builds or kicking off a release on demand.

/github/ワークフロー/capgo-ビルドマニュアル.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 }}

置換 com.example.app __CAPGO_KEEP_0__をあなたのアプリIDに置き換えます。コミットすると、 アクション → Capgo ビルド (マニュアル) → ワークフロー実行 を実行してください。

両方のプラットフォームを並行してビルドし、タグのバージョンをプッシュすると同時に、 v1.4.0これは最も一般的なプロダクション設定です — git tag v1.4.0 && git push --tags リリースコマンドになります。

/github/ワークフロー/capgo-ビルドリリース.yml
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ビルドはキャンセルされません (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。

ネイティブビルドのリグレッションを早期にキャッチするために、毎回メインブランチにプッシュしたときにデバッグAndroidビルドを生成します。 main. 安全で高速な反 hồi、Playストアのアップロードをスキップして、純粋にSmokeテストとして実行できます。

.github/workflows/capgo-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-upload

The paths フィルタはドキュメントのみの変更でワークフローを実行しないようにします。 --no-playstore-upload Playストアの提出をスキップ (必要ありません)、および PLAY_CONFIG_JSON 結果のAPKのダウンロードURLを生成して、テストデバイスにインストールできます。 --output-upload 共通パターン

セクション「Playストア / テストフライトのアップロードをスキップ」

filter ensures the workflow doesn’t run on doc-only changes.

For test builds, skip store submission: Android uses __CAPGO_KEEP_0__、iOSはアドホックモードでビルドします。__CAPGO_KEEP_1__を使用すると、ダウンロードURLが取得できます。 --no-playstore-uploadSection titled “Submit the store release for review” --ios-distribution ad_hoc CIリリースの場合、__CAPGO_KEEP_0__を使用すると、Google Playのリリースが自動的に提出されます。 --output-upload Android uses your __CAPGO_KEEP_0__サービスアカウントを使用して、Google Playのリリースを提出します。

Add __CAPGO_KEEP_1__とオプションの__CAPGO_KEEP_2__を使用すると、Playリリースにタグとローカライズされた変更履歴を付与できます。

Copy to clipboard

For test builds, skip store submission: Android uses __CAPGO_KEEP_0__、iOSはアドホックモードでビルドします。__CAPGO_KEEP_1__を使用すると、ダウンロードURLが取得できます。 --submit-to-store-review.

Submit the store release for review PLAY_CONFIG_JSON By default, release builds upload the signed artifact and leave the final store action under your control. For CI releases that should move directly into the store review flow, add __CAPGO_KEEP_0__ --store-release-name, --store-release-notesAndroid uses your __CAPGO_KEEP_0__ service account and submits the Google Play release instead of leaving it inactive. Add __CAPGO_KEEP_1__ and optional __CAPGO_KEEP_2__ entries when you want the Play release to carry the same tag and localized changelogs as CI: --store-release-notes-locale Combine either with __CAPGO_KEEP_1__ to get a time-limited download URL for the binary.

- name: Submit Android release for review
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 }}
PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}
run: |
npx @capgo/cli@latest build request com.example.app \
--platform android \
--build-mode release \
--submit-to-store-review \
--store-release-name "${GITHUB_REF_NAME}" \
--store-release-notes "Release ${GITHUB_REF_NAME}" \
--store-release-notes-locale "en-US=Release ${GITHUB_REF_NAME}"

iOSはApp Store ConnectのAPIキーパスを使用し、処理されたTestFlightビルドをApp Storeレビューに提出します。必要なのは app_store 配布 --ios-testflight-groups 外部ベータ配布用にオプションであり、App Storeレビューには必要ありません:

- name: Submit iOS build to App Store review
env:
CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }}
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 }}
run: |
npx @capgo/cli@latest build request com.example.app \
--platform ios \
--build-mode release \
--ios-distribution app_store \
--submit-to-store-review \
--store-release-name "${GITHUB_REF_NAME}" \
--store-release-notes "Release ${GITHUB_REF_NAME}" \
--store-release-notes-locale "en-US=Release ${GITHUB_REF_NAME}" \
--no-ios-automatic-release

ビルド出力URLとQRコードcodeを読み取ってください。

「ビルド出力URLとQRコードcodeを読み取ってください。」というセクション

パス --output-record <path> ビルドアーティファクトURLとQRコードcodeをディスクに永続化し、ビルドが成功した場合に後続のステップで読み戻すには 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 __CAPGO_KEEP_0__のJSONレコード (括弧と jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) とPNG QR codeの横に /tmp/build.json.qr.png. build last-output を読み返します:

  • --field outputUrl ダウンロードURLだけを出力します (改行区切り; __CAPGO_KEEP_0__のURLを安全に使用できます。 URL=$(...)).
  • --field qrCodePngPath PNGパスの出力ができます。PRの添付ファイルとしてアップロードできます。
  • --qr Markdown codeの枠内にQRを配置します。

ビルド番号の増加をスキップ

ビルド番号の増加をスキップ

デフォルトでは、各リリースビルドはビルド番号をインクリメントします。指定した値 (たとえば、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-bump

キャッシュ依存関係

ビルド番号の増加をスキップ

bun install is already fast enough that a JS-deps cache rarely pays off, but Capacitor’s native dependencies (CocoaPods, Gradle) are worth caching for larger projects:

- 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 IDThe provisioning map points at a different bundle ID than the one Xcode is signing. Re-run build init to refresh the profile, then re-export with build credentials manage
Credentials changed locally but CI still failsCapgoで再エクスポートして再プッシュしてください: bunx @capgo/cli@latest build credentials managegh secret set -f .env.capgo.<appId>
Manager refuses to write the combined fileCapgoの共有設定キーはプラットフォーム間で異なります — マネージャーは警告を表示し、確認を求めます。確認してオーバーライトするか、プラットフォームごとに再エクスポートしてください: --platform ios / --platform android
build last-output prints an empty URLCapgoのビルドは失敗しました --output-uploadThe build did not pass outputUrl or it failed before producing an artifact. null Capgoの結果は [ -n "$URL" ] in the record. Branch on
build last-output エラーが Unsupported record schemaVersionランナーは、レコードを書いたものよりも古いCLIにあります。プロデューサーとリーダーを同じ明示的なバージョン (例えば bunx @capgo/cli@7.104.0 … 両方の側面) に固定するのではなくて @latest、ジョブ間で浮動し、漂うことができる

プラットフォーム固有のビルドエラーについては、 トラブルシューティングガイド.