Skip to content

GitHub アクション

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

手動作業なしのリリース

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

ローカル設定なし

Windows または Linux のコントリビューターが iOS ビルドをトリガーできます。Xcode、プロビジョニングのハッスル、ローカルに保管されている共有署名証明書など、Mac をインストールする必要はありません。

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

GitHub には、リポジトリシークレットでスコープされた、ワークフロー実行者のみが表示できるクレデンシャルが存在します。簡単に回転し、簡単に監査できます。

並列ビルド

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

Capgoアカウントと有効なサブスクリプション、Capgo __CAPGO_KEEP_1__ キー

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

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

    __CAPGO_KEEP_0__ キーを __CAPGO_KEEP_0__ ダッシュボードで生成してください。
    gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"

    __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ Capgo __CAPGO_KEEP_1__ __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 で ファイルに .env をエクスポートしてください。CLI は .env.capgo.<appId> 現在のディレクトリに (オーナーが読み取れるのみ) — 例えば、 0600 iOS と Android の両方が設定されている場合、両方のプラットフォームのシークレットは同じファイル内に保存されます。 .env.capgo.com.example.app__CAPGO_KEEP_0__ はファイルに書き込まれます。 # === IOS === そして # === ANDROID === セクション ヘッダー。 iOS と Android の環境変数名は分離されているため、組み合わせることは競合しない。

  3. Push the .env ファイルをGitHub Actions secretsにアップロード

    The gh secret set -f コマンドは、.envファイルを読み取り、1行ごとにリポジトリシークレットを作成します。 KEY=value ターミナルウィンドウ

    コピーをクリップボードに
    gh secret set -f .env.capgo.com.example.app

    That’s it — every secret your workflow needs is now in GitHub. Verify with gh secret list.

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

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

セキュリティ上の情報

セキュリティ上の情報の内容

参照用 gh secret set -f これらのリポジトリのシークレットを作成します (ワークフロー YAML は、これらのシークレットの完全な名前を参照します):

プラットフォーム作成されるシークレット
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アセットをビルドしてください、ネイティブにSyncしてください、次に 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ビルドはキャンセルされません (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。

3. メインブランチにプッシュしたときにデバッグビルド

セクションのタイトル「3. メインブランチにプッシュしたときにデバッグビルド」

Catches native build regressions early by producing a debug Android build on every push to main. 安全で高速な実行、迅速なフィードバック、そして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.

テストビルドの場合、ストアの提出をスキップします: Androidは --no-playstore-upload; iOSの場合、 --ios-distribution ad_hoc (これはApp Storeに提出されることはありません)。これらを組み合わせて --output-upload を使用して、バイナリのダウンロードURLを時間制限付きで取得します。

デフォルトでは、リリースビルドは署名済みのアーティファクトをアップロードし、最終的なストアアクションをあなたのコントロールの下に残します。CIリリースがストアのレビューフローに直接移動するようにするには、 --submit-to-store-review.

サービスアカウントを使用し、Google Playのリリースを提出するのではなく、無効にしたままにするのではなく、Androidは PLAY_CONFIG_JSON を追加します。オプションの --store-release-name, --store-release-notesエントリを追加すると、CIと同じタグとローカライズされた変更履歴をPlayリリースに含めることができます。 --store-release-notes-locale コピー

- 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

パス --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 __CAPGO_KEEP_0__のPNGパスを出力して、PRの添付ファイルとしてアップロードすることができます。
  • --qr PRコメント内でスキャンできるように、code内にレンダリングされたASCII 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__CAPGO_KEEP_0__が追加されていません、またはジョブはそれにアクセスできません (環境/ブランチ保護を確認してください)
iOS / Android の資格情報が不足しているためエラーが発生していますgh secret set -f 実行されていません、または別のリポジトリに対して実行されていました。__CAPGO_KEEP_0__を確認してください gh secret list
cap sync CI で失敗しますが、ローカルでは正常に動作しますネイティブ プラグインは__CAPGO_KEEP_0__に含まれていません package.json__CAPGO_KEEP_0__が入力されていません、または入力されていません bun install __CAPGO_KEEP_0__ cap sync
App Store Connect にアプリが表示されないためビルドが成功しましたチーム ID が正しくありません、または App Store Connect にアプリのレコードがまだ存在していません。ローカルで__CAPGO_KEEP_0__を確認してください bunx @capgo/cli@latest build credentials manage
アップロードプロセスが終了した後、ビルドがハングアップしていますプロジェクトアーカイブが通常より大きい場合、__CAPGO_KEEP_0__を確認してください node_modules __CAPGO_KEEP_0__がアップロードされていないことを確認してください (デフォルトではアップロードされないはずです)
Provisioning profile doesn't match bundle IDXcodeが署名している別のバンドルIDに指しているプロビジョニングマップがあります。再実行してプロファイルを更新し、再エクスポートしてください。 build init 再実行してプロファイルを更新し、再エクスポートしてください。 build credentials manage
ローカルで資格情報が変更されたが、CIはまだ失敗しています。再エクスポートして再プッシュしてください。 bunx @capgo/cli@latest build credentials managegh secret set -f .env.capgo.<appId>
マネージャーは組み合わせられたファイルを書き込むことを拒否しています。プラットフォーム間で共有設定キーが異なります。マネージャーは警告を出し、確認を求めています。確認してオーバーライトするか、プラットフォームごとに再エクスポートしてください。 --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、ジョブ間で浮動することができるため

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