メニューに進む

GitHub アクション

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

Gitでリリースをタグし、自動的にTestFlightとPlay Storeに署名されたiOSおよびAndroidバイナリを送信します。

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

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

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

シークレットは__CAPGO_KEEP_0__リポジトリのシークレットに保存され、ワークフロー ランナーにのみ可視化されます。簡単にローテートし、簡単に監査できます。

Credentials live in GitHub repository secrets, scoped to your repo and visible only to the workflow runner. Easy to rotate, easy to audit.

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

前提条件

__CAPGO_KEEP_0__

必要な前提条件

ワークフローを設定する前に、以下の条件を確認してください。

  • A Capgo account with an active subscription and a Capgo API キー
  • Capgo (bunx @capgo/cli@latest app add 必要に応じて
  • アプリケーションを bunx @capgo/cli@latest build init ローカルにビルドするためのクレデンシャルを設定 マネージング クレデンシャル
  • を参照してくださいbunx @capgo/cli@latest build request com.example.app --platform android --build-mode debugローカルでビルドが成功した (
  • The GitHub CLI (gh) インストール済みかつ認証済み (gh auth login)

Capgo CLI は、ローカル認証情報を使用可能なファイルとしてエクスポートできます。 .env このファイルを組み合わせると、CI/CD設定全体を3つのコマンドで実行できるようになります — 手動のBase64エンコード、JSONの操作、秘密情報のコピペペーストは必要ありません。 gh secret set -fSetup

  1. あなたの Capgo API キーをリポジトリシークレットとして追加してください

    API キーはアプリごとの認証情報ストアの一部ではありません。手動で一度追加してください:

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

    キーを生成する Capgo ダッシュボードアップロード パーミッションまたは上位のパーミッション

  2. 認証情報をファイルにエクスポートしてください .env インタラクティブな認証情報マネージャーを実行してください

    環境変数

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

    TUIで選択 .envファイルにエクスポート CLI は .env.capgo.<appId> 現在のディレクトリに 0600 オーナーが読み取り専用の権限を持つ .env.capgo.com.example.app例えば # === IOS === 両方のプラットフォームが設定されている場合、両方のプラットフォームのシークレットは # === ANDROID === セクションヘッダー

  3. ファイルを__CAPGO_KEEP_0__ Actionsシークレットにプッシュします。 .env file to GitHub Actions secrets

    ファイルを__CAPGO_KEEP_0__ Actionsシークレットにプッシュします。 gh secret set -f コマンドは、.envファイルを読み取り、1つのリポジトリシークレットを1行ごとに作成します。 KEY=value 行:

    ターミナル画面
    gh secret set -f .env.capgo.com.example.app

    それがすべてです — すべてのシークレットがあなたのワークフローに必要なものは、GitHubに現在あります。確認してください。 gh secret list.

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

    追加 .github/workflows/capgo-build.yml __CAPGO_KEEP_0__に追加

以下のトリガーポリシーから1つを選択してください。どのようにビルドをトリガーするかによって異なります。

セクションのタイトル:「何がシークレットに格納されるか」

参考として gh secret set -f __CAPGO_KEEP_0__は次のリポジトリシークレットを作成します (ワークフロー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
(手動で追加)CAPGO_TOKEN

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

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

誰でも書き込みアクセス権を持つ人は、 Actions タブからGitHubでプラットフォームのドロップダウンを使用してビルドを実行できます。アドホックのテストビルドや、リリースを要求するために使用します。

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 }}

アプリIDに置き換えてください。コミットすると、 com.example.app 置き換え アクション → Capgo ビルド (手動) → ワークフロー実行 それをトリガーする。

バージョン タグのようなものをプッシュすると、両方のプラットフォームを並行してビルドし、配信します。 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 ビルドをキャンセルしない (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。

コストが低く、フィードバックが速く、Playストアのアップロードをスキップして純粋にSmokeテストとして使用できます。 main__CAPGO_KEEP_0__/workflows/__CAPGO_KEEP_1__-build-main.yml

.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

Copy to clipboard paths filterはワークフローがドキュメントのみの変更で実行されないようにする。 --no-playstore-upload Playストアの提出をスキップします(必要ありません)、そして PLAY_CONFIG_JSON 結果のAPKのダウンロードURLを生成するので、テストデバイスでインストールできます。 --output-upload Common Patterns

「Playストア/テストフライトのアップロードをスキップ」

テストビルドの場合、ストアの提出をスキップします:Androidは

iOSの場合は、 --no-playstore-upload(App Storeに提出されることはありません)を組み合わせて、バイナリのダウンロードURLを取得できます。 --ios-distribution ad_hoc __CAPGO_KEEP_0__ --output-upload __CAPGO_KEEP_0__

店舗リリースをレビューに提出する

「店舗リリースをレビューに提出する」セクション

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

Androidはサービスアカウントを使用してGoogle Playリリースを提出し、無効なままにするのではなくします。 PLAY_CONFIG_JSON 、を追加して、PlayリリースがCIと同じタグとローカライズされた変更履歴を持つようにします。 --store-release-name, --store-release-notesクリップボードにコピー --store-release-notes-locale iOSはApp Store Connect __CAPGO_KEEP_0__ キーパスを使用して、処理済みのTestFlightビルドをApp Storeレビューに提出します。

- 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 uses the App Store Connect API key path and submits the processed TestFlight build to App Store review. It requires app_store クリップボードにコピー --ios-testflight-groups iOSはApp Store Connect __CAPGO_KEEP_0__ キーパスを使用して、処理済みのTestFlightビルドを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> 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レコード(「」)とPNG QRコードを生成します。 jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) and a PNG QR code alongside at /tmp/build.json.qr.png. build last-output JSONレコード(「」)とPNG QRコードを生成します。

  • --field outputUrl ダウンロードURLのみを出力します (改行区切り; 安全) URL=$(...)).
  • --field qrCodePngPath PNGパスを出力します。PRの添付ファイルとしてアップロードできます。
  • --qr レンダリングされたASCII QRを出力します。PRコメント内でインラインスキャン可能にするために、Markdown code フェンス内に配置してください。

クリップボードにコピー --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 Capacitorのネイティブ依存関係(CocoaPods、Gradle)は、より大きなプロジェクトではキャッシュする価値がありますが、JS依存関係キャッシュはすでに高速化されているため、ほとんどの場合、JS依存関係キャッシュは有効ではありません。

- 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 __CAPGO_KEEP_0__が実行されていません、または__CAPGO_KEEP_0__が異なるリポジトリに対して実行されました。確認してください。 gh secret list
cap sync CI で失敗しますが、ローカルでは正常に動作しますネイティブ プラグインはありません package.json__CAPGO_KEEP_0__ または忘れました bun installcap sync
ビルドは成功しましたが、App Store Connectにアプリが表示されませんチーム IDが間違っています、または App Store Connectにアプリのレコードがまだ存在していません。ローカルに確認してください。 bunx @capgo/cli@latest build credentials manage
ビルドが「プロジェクトのアップロード」後にハングしますプロジェクト アーカイブが通常より大きい場合、確認してください node_modules __CAPGO_KEEP_1__ がアップロードされていないことを確認してください (デフォルトではアップロードされません)
Provisioning profile doesn't match bundle IDプロビジョニング マップが Xcode が署名している bundle ID と異なる場合、プロファイルを再読み込みし、再エクスポートしてください build init ローカルで資格情報が変更されたが、CI が失敗します build credentials manage
再エクスポートして再プッシュすることを忘れないでくださいtexts 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 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 … ランナーは、レコードを書き込んだものよりも古い__CAPGO_KEEP_0__のバージョンを実行している。プロデューサーとリーダー両方を同じ明示的なバージョンに固定する (例えば @latest両方の側面に) ではなく、

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