メインコンテンツにジャンプ

GitHub アクション

Automate your iOS and Android builds directly from your GitHub repository. With one workflow file and a handful of repository secrets, every push, tag, or manual trigger can produce signed, store-ready apps — without anyone on the team needing a Mac, Xcode, or Android Studio installed.

Source guide

Copy for AI

Ready to paste

Includes install, sync, and the source markdown guide.

ローカルセットアップなし

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

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

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 if not)、ローカルに設定したビルド資格情報が正しく設定されている場合
  • ローカルに設定したビルド資格情報が正しく設定されている場合 — bunx @capgo/cli@latest build init資格情報の管理 ローカルビルドのワークショップのガイド
  • ローカルビルドが成功した場合 (bunx @capgo/cli@latest build request com.example.app --platform android --build-mode debug)、CIは最初のビルドをデバッグする場所ではありません
  • The GitHub CLI (gh) インストール済みかつ認証済み (gh auth login)

Capgoのローカル認証情報をCapgo CLIでエクスポートできます。 .env ファイル。Capacitorと組み合わせると gh secret set -f、CI/CDの設定を3つのコマンドで完了できるようになります — 手動でbase64エンコードする必要がなく、JSONを操作する必要がなく、秘密情報をコピー・ペーストする必要がなくなります。

  1. Capgoで使用するCapgo APIキーをリポジトリシークレットとして追加してください。

    アプリ固有の認証ストアにはないAPIキーなので、手動で追加してください。

    ターミナルウィンドウ
    gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"

    __CAPGO_KEEP_0__でキーを生成する Capgo ダッシュボード with アップロード __CAPGO_KEEP_0__ 以上の権限が必要です。

  2. __CAPGO_KEEP_0__ を .env ファイルにエクスポートします。 .env ターミナル ウィンドウ

    クリップボードにコピー

    TUI で
    bunx @capgo/cli@latest build credentials manage --appId com.example.app

    . __CAPGO_KEEP_0__ が .env ファイルに書き込みます。 __CAPGO_KEEP_0__ ダッシュボード CLI 以上の権限が必要です。 .env.capgo.<appId> Capgoのディレクトリにmode 0600 (オーナーが読み取り専用の) — 例えば .env.capgo.com.example.app. iOSとAndroidの両方が設定されている場合、両方のプラットフォームのシークレットは同じファイルの下に # === IOS ===# === ANDROID === セクションヘッダー。 iOSとAndroidのenv-var名は分離されているため、組み合わせることは競合しない。

  3. ファイルを__CAPGO_KEEP_0__ Actions secretsにプッシュする .env file to GitHub Actions secrets

    ターミナル画面 gh secret set -f コピー KEY=value それだけです — ワークフローで必要なすべてのシークレットは今、__CAPGO_KEEP_0__にあります。確認してください

    Shared config keys
    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. ワークフロー ファイルを作成

    Add .github/workflows/capgo-build.yml リポジトリに追加。

何がシークレットに含まれるか

For reference

For reference, gh secret set -f __CAPGO_KEEP_0__

プラットフォームシークレットが作成されました
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
(手動で追加)CAPGO_TOKEN

必要ありません。これらのシークレットを覚える必要はありません。以下のワークフロー例は、すべてのシークレットを既に参照しています。

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

Lets anyone with write access fire a build from the Actions tab in GitHub with a platform dropdown.

.github/workflows/capgo-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 Replace Actions → Capgo Build (Manual) → Run workflow Actions → __CAPGO_KEEP_0__ Build (Manual) → Run workflow

to trigger it.

2.

Builds and ships both platforms in parallel whenever you push a version tag like v1.4.0. この設定は最も一般的なプロダクション設定です — git tag v1.4.0 && git push --tags リリースコマンドになります。

github/workflows/capgo-build-release.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. メインブランチにプッシュしたときにデバッグビルドを実行する

メインブランチにプッシュしたときにデバッグビルドを実行する

ネイティブビルドのリグレッションを早く捕捉するために、メインブランチに毎回プッシュしたときにデバッグAndroidビルドを生成する mainコストが安く、フィードバックが速く、プレイストアのアップロードをスキップして、純粋に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

フィルタは、ドキュメントのみの変更でワークフローが実行されないようにする paths プレイストアの提出をスキップする必要がないため、 --no-playstore-upload 必要ないため、 PLAY_CONFIG_JSON 結果のAPKのダウンロードURLを生成して、テストデバイスにインストールできるようにする --output-upload 共通パターン

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

「一般的なパターン」のセクション

Play Store / TestFlightのアップロードをスキップ

「Play Store / TestFlightのアップロードをスキップ」のセクション

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

ビルドアーティファクトURLとQRコードをディスクに永続化するために使用します。 --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を使用して、後続のステップでURLとQRコードを読み戻します。ログのスクラピングや正規表現は必要ありません。

- 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) と PNG QR code の横に書きます /tmp/build.json.qr.png. build last-output を読み取ります

  • --field outputUrl ダウンロード URL を出力します (改行終端; 安全な __CAPGO_KEEP_0__ の値です。 URL=$(...)).
  • --field qrCodePngPath PNG のパスを出力します。PR のアタッチメントとしてアップロードできます。
  • --qr レンダリングされた ASCII QR を出力します。PR のコメントに直接スキャンするための Markdown code の内側に配置してください。

By default each release build increments the build number. To pin it to a value you control (for example, the Git tag), pass --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') }}

JS依存関係のキャッシュは、すでに高速化されているため、ほとんどの場合、有効な効果は期待できません。ただし、__CAPGO_KEEP_0__のネイティブ依存関係(CocoaPods、Gradle)は、大規模プロジェクトではキャッシュする価値があります。

Copy to clipboard
トラブルシューティングSection titled “Troubleshooting”、トラブルシューティングのヒントと対策を確認するためのセクションです。
CAPGO_TOKEN is not set環境/ブランチ保護設定を確認してください。シークレットが追加されていません、またはジョブがそれにアクセスできません
iOS/Android認証情報が不足しているためエラーが発生していますgh secret set -f 実行されませんでした、または別のリポジトリに対して実行されました。 gh secret list
cap sync CIで失敗しますがローカルでは正常に動作しますNativeプラグインは package.jsonがありません、または忘れています bun install 前に cap sync
アプリがApp Store Connectに表示されません。ビルドは正常に成功していますチームIDが正しくありません、またはApp Store Connectにアプリのレコードがまだ存在していません。ローカルで確認してください。 bunx @capgo/cli@latest build credentials manage
プロジェクトのアップロードが完了した後、ビルドがハングアップしていますApp Store Connectにアップロードするプロジェクトのアーカイブが通常より大きくなっています。 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 を再実行してプロファイルを更新し、 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 __CAPGO_KEEP_0__ Unsupported record schemaVersionThe runner is on an older CLI than the one that wrote the record. Pin both producer and reader to the same explicit version (e.g. bunx @capgo/cli@7.104.0 … rather than @latest、ジョブ間で浮動することができます

For platform-specific build failures, see the Troubleshooting guide.