メインコンテンツにスキップ

GitHub アクション

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

手動でのリリース

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

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

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

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

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

並列ビルド

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

前提条件

前提条件

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

  • アカウントと有効なサブスクリプションを持つ Capgo Capgo API キー
  • アプリケーションを Capgo (bunx @capgo/cli@latest app add アプリケーションを __CAPGO_KEEP_0__ に登録してください (
  • ビルドクレデンシャルをローカルに設定してください bunx @capgo/cli@latest build initManaging Credentials ビルドクレデンシャルをローカルに設定する方法については、
  • マネージング クレデンシャルbunx @capgo/cli@latest build request com.example.app --platform android --build-mode debug — CI は最初のビルドをデバッグする場所ではありません
  • この GitHub CLI (gh) インストール済みかつ認証済み (gh auth login)

Capgo CLI は、ローカルクレデンシャルを使用可能なファイルとしてエクスポートできます。ファイルと .env ファイルと gh secret set -f, このCI/CD設定を3つのコマンドで実行することができます — 手動のbase64エンコード、JSONの操作、秘密のコピー・ペーストは必要ありません。

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

    APIキーはアプリごとの認証情報ストアの一部ではないので、手動で1度追加してください:

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

    __CAPGO_KEEP_0__キーは、__CAPGO_KEEP_0__ダッシュボードで生成します。 アップロード、Capgoダッシュボードの「Capgo」セクションで、__CAPGO_KEEP_1__キーを生成します。 __CAPGO_KEEP_0__ダッシュボードの「__CAPGO_KEEP_0__」セクションで、__CAPGO_KEEP_1__キーを生成します。 __CAPGO_KEEP_0__ダッシュボードの「__CAPGO_KEEP_0__」セクションで、__CAPGO_KEEP_1__キーを生成します。 __CAPGO_KEEP_0__ダッシュボードの「__CAPGO_KEEP_0__」セクションで、__CAPGO_KEEP_1__キーを生成します。

  2. __CAPGO_KEEP_0__ダッシュボードの「__CAPGO_KEEP_0__」セクションで、__CAPGO_KEEP_1__キーを生成します。 .env __CAPGO_KEEP_0__ダッシュボードの「__CAPGO_KEEP_0__」セクションで、__CAPGO_KEEP_1__キーを生成します。

    Run the interactive credentials manager:

    ターミナルウィンドウ
    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__アクションシークレットにプッシュしてください .env file to GitHub Actions secrets

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

    それがすべてです — すべてのシークレットがあなたのワークフローに必要な__CAPGO_KEEP_0__にあります。確認してください。
    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
(手動で追加)CAPGO_TOKEN

必要ありません — 以下のワークフロー例はすべてのものを参照しています。

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

誰でも書き込みアクセス権を持つ人に、__CAPGO_KEEP_0__ の "Actions" タブからプラットフォームのドロップダウンを使用してビルドを実行できるようにします。アドホックのテストビルドや、リリースを要求して起動するのに便利です。 __CAPGO_KEEP_0__/workflows/__CAPGO_KEEP_1__-build-manual.yml tab in GitHub with a platform dropdown. Useful for ad-hoc test builds or kicking off a release on demand.

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

__CAPGO_KEEP_1__ com.example.app アプリIDとともに。コミットされたら、 Actions → 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ビルドをキャンセルしない (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。

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

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

iOSの場合、ad-hocモードでビルドします(App Storeに提出されることはありません)。

どちらかを組み合わせてください

Skip Play Store / TestFlight upload --no-playstore-uploadセクション「Skip Play Store / TestFlight upload」 --ios-distribution ad_hoc Androidの場合、ストアの提出をスキップします: --output-upload 時間制限のダウンロードURLを取得する。

ビルド出力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 JSONレコード(()と)とPNG QRコード__CAPGO_KEEP_0__を生成します。 jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) and a PNG QR code alongside at /tmp/build.json.qr.png. build last-output ダウンロードURLのみを出力します(改行区切り;安全な値)。

  • --field outputUrl PNGパスを出力します。PRの添付ファイルとしてアップロードすることができます。 URL=$(...)).
  • --field qrCodePngPath Capacitor
  • --qr ASCII QR をレンダリングし、プルリクエストコメント内にマークダウン code フェンス内にドロップしてインラインスキャン可能にします。

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

「ビルド番号の増分をスキップ」

デフォルトでは、各リリースビルドはビルド番号を増分します。指定した値 (たとえば、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 で失敗しますが、ローカルでは正常に動作しますネイティブ プラグインが package.json、または忘れていました bun installcap sync
ビルドは成功しましたが、App Store Connectにアプリが表示されませんチームIDが間違っています、またはApp Store Connectにアプリのレコードがまだ存在していません。ローカルで確認してください。 bunx @capgo/cli@latest build credentials manage
ビルドが「アップロードプロジェクト」でハングしますプロジェクトアーカイブが通常より大きい場合、確認してください node_modules アップロードされていないはずなので、デフォルトではアップロードされていないはずです
Provisioning profile doesn't match bundle IDプロビジョニングマップは、Xcodeが署名しているbundle IDと異なるbundle IDを指しています。プロファイルを更新してから再エクスポートしてください build init ローカルでクレデンシャルが変更されたが、CIはまだ失敗しています build credentials manage
再エクスポートして再プッシュすることを忘れないでくださいマネージャーは組み合わせファイルを書き込むことを拒否しています bunx @capgo/cli@latest build credentials managegh secret set -f .env.capgo.<appId>
プラットフォーム間で共有設定キーが異なります。マネージャーは警告を出し、確認を求めています。確認してオーバーライトする、またはプラットフォームごとに再エクスポートしてくださいShared config keys differ between platforms — the manager warns and asks for confirmation. Either confirm to overwrite-one-wins, or re-export per-platform with --platform ios / --platform android
build last-output 空のURLを出力します。ビルドは失敗しました --output-uploadアーティファクトを生成する前に失敗したかもしれません。 outputUrl は記録に含まれます。 null 記録に記載されている__CAPGO_KEEP_0__より古いバージョンのランナーを使用している場合、プロデューサーとリーダーを同じ明示的なバージョン (例えば [ -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記録に記載されている__CAPGO_KEEP_0__より古いバージョンのランナーを使用している場合、プロデューサーとリーダーを同じ明示的なバージョン (例えば

両方の側面) に固定するのではなく、 ジョブ間で漂流し、ずれていく可能性があるため、.