コンテンツに進む

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.

iOS と Android のビルドを直接 __CAPGO_KEEP_0__ リポジトリから自動化できます。ワークフロー ファイル 1 つとリポジトリのシークレットの数少ないセットで、チームの誰も Mac、Xcode、または Android Studio をインストールする必要はありません。

何が得られるか

セクション「何が得られるか」

手動でリリース

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

ローカル設定なし

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

GitHub リポジトリのシークレット内に、GitHub のワークフロー ランナーにのみ表示される、スコープされたクレデンシャルが保存されます。簡単にローテートし、簡単に監査できます。

並列ビルド

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

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

  • Capgo のアカウントと有効なサブスクリプション、および 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ローカルビルドの最初のビルドをデバッグするのはCIの場所ではない
  • The GitHub CLI (GitHub アクション)gh) インストール済みで認証済み (gh auth login)

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

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

    CapgoのAPIキーは、各アプリの認証情報ストアに含まれていないため、手動で追加する必要があります。

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

    __CAPGO_KEEP_0__ Capgo ダッシュボード with アップロード 権限またはそれ以上が必要です。

  2. クレデンシャルをファイルにエクスポートするには .env ファイル

    クレデンシャル マネージャーをインタラクティブに実行してください:

    ターミナル ウィンドウ
    bunx @capgo/cli@latest build credentials manage --appId com.example.app

    コンテキスト: Capgo マーケティング ウェブサイト。役割: UI ラベル。表示場所: ページ エージェント/[slug].astro。メッセージ キー `agents_page_copy_label` (エージェント ページ コピー ラベル)。 TUI で. The CLI writes .env.capgo.<appId> .env 0600 __CAPGO_KEEP_0__ は、モード (オーナー読み取り専用) で、例えば .env.capgo.com.example.app. iOS と Android が両方設定されている場合、両方のプラットフォームのシークレットは同じファイルの下に # === IOS === そして # === ANDROID === セクション ヘッダー。 iOS と Android の環境変数名は異なるため、組み合わせることは競合しない。

  3. プッシュ .env ファイルを GitHub Actions secrets にアップロードします

    The gh secret set -f ターミナル画面 KEY=value コピーする

    すべてのシークレットが __CAPGO_KEEP_0__ に保存されていることを確認します。
    gh secret set -f .env.capgo.com.example.app

    すべてのワークフローの秘密が GitHub に含まれています。確認してください。 gh secret list.

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

    追加 .github/workflows/capgo-build.yml リポジトリに追加します。必要に応じて、以下の 3 つのトリガーポリシーを選択してビルドを実行します。

秘密の内容

秘密の内容

参照 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
(手動で追加)CAPGO_TOKEN

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

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

誰でも書き込みアクセス権を持っている人は、Actionsからビルドを実行できます。 Actions GitHubのタブにプラットフォームのドロップダウンがあります。アドホックのテストビルドやリリースをオンデマンドで開始するのに役立ちます。

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 アプリIDに置き換えます。コミットした後は アクションズ→Capgo ビルド(マニュアル)→ワークフロー実行 2. タグにリリース

タグにリリースする

タグにリリース

これはリリースコマンドになります。 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. メインにプッシュしたときのデバッグビルド

プッシュごとにデバッグAndroidビルドを生成して、ネイティブビルドの不具合を早期に検出します。 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

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

テストビルドの場合、ストアの提出をスキップします:Androidは --no-playstore-upload; iOSの場合は、 --ios-distribution ad_hoc (App Storeに提出されることはありません)に組み合わせて、ビンナリのタイムリミテッドダウンロードURLを取得します。 --output-upload ストアリリースの提出をレビュー

Section titled “ストアリリースの提出をレビュー”

「レビューに提出するためのストアのリリース」

Androidはあなたの --submit-to-store-review.

サービスアカウントを使用します。 PLAY_CONFIG_JSON 明示的なトラックがなければ、 デフォルトでは、 --submit-to-store-review productionトラックに release_status: completed. トラックを呼び出しサイトで明示的に指定することを推奨します。 --android-track (または PLAY_STORE_TRACK(HTMLのテキストフラグメント) --android-release-status / PLAY_STORE_RELEASE_STATUS (Capgoのマーケティングサイトのページ/エリア)

- 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 \
--android-track production \
--store-release-name "${GITHUB_REF_NAME}" \
--store-release-notes "Release ${GITHUB_REF_NAME}" \
--store-release-notes-locale "en-US=Release ${GITHUB_REF_NAME}"

(ページの代替品/expo.astro)

- name: Submit Android internal release
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 \
--android-track internal \
--store-release-name "${GITHUB_REF_NAME}"

iOSはApp Store ConnectのAPIキーを使用し、処理されたTestFlightビルドをApp Storeレビューに提出します。iOSには必要です app_store distribution; --ios-testflight-groups (Compare Step Build Text)

- 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 JSONレコードとPNG QRコードを生成し、 jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) とPNG QR code の横に /tmp/build.json.qr.png. build last-output QRコードを読み戻します。

  • --field outputUrl ダウンロードURLを表示します (改行区切り; クロスプラットフォームで安全) URL=$(...)).
  • --field qrCodePngPath PNGのパスを出力して、プルリクエストの添付ファイルとしてアップロードできます。
  • --qr Markdown code に ASCII QR を埋め込むと、PR コメント内でスキャンできるようになります。

ビルド番号の増分をスキップします。

ビルド番号の増分をスキップします。

デフォルトでは、各リリースビルドではビルド番号を増分します。指定した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 すでに高速化されているため、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で失敗したがローカルでは正常に動作するA native plugin はありません package.json, または忘れています bun install 前 cap sync
GitHub Actions を使用して Capgo のビルダーを実行することはできますが、GitHub Actions を使用して Capgo のビルダーを実行することはできますが、 bunx @capgo/cli@latest build credentials manage
ビルドが成功してもアプリが App Store Connect に表示されない場合プロジェクトのアーカイブが通常より大きい場合、確認してください。 node_modules ビルドが "プロジェクトのアップロード" の後でハングアップする場合
Provisioning profile doesn't match bundle IDプロジェクト アーカイブが通常より大きい場合、 build init アップロードされていないことを確認してください (デフォルトではアップロードされません) build credentials manage
プロビジョニング マップが Xcode が署名する bundle ID と異なる場合、プロファイルを更新して再エクスポートしてください。再度エクスポートしてください。再度プッシュしてください。 bunx @capgo/cli@latest build credentials manage → gh 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 … 、どちらかが浮動し、ジョブ間で漂う @latest, して、ジョブ間で漂うことができます。

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