К основному содержанию
скилл CX Codex

capacitor-ci-cd — скилл для Claude Code: CI/CD для Capacitor

Собирает и чинит пайплайны Capacitor-приложений: сборка веба, подпись iOS и Android, загрузка в сторы и OTA-обновления.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add Cap-go/capgo-skills --skill capacitor-ci-cd -a claude-code
Открыть на GitHub

Что делает capacitor-ci-cd

Скилл помогает описать или починить конвейер для Capacitor-приложения: GitHub Actions, GitLab CI, Fastlane или Capgo Cloud Build. Он подсказывает, какие образы раннеров и версии инструментов брать под нужную мажорную версию Capacitor, как разложить задачи по этапам и где хранить секреты.

Внутри есть таблица совместимости: Node, Xcode, JDK, Gradle и AGP для Capacitor 8 и 9, плюс отдельные файлы-справочники по GitHub Actions, GitLab CI, Fastlane, подписи и кэшированию. Скилл сам читает package.json и ищет существующие workflow, Fastfile, Podfile и lock-файлы, чтобы отталкиваться от текущего состояния проекта.

Скилл рассчитан на работу с конкретными версиями тулчейна, и это главное ограничение: если в проекте Capacitor 9, а в пайплайне остался JDK 17, сборка Android упадёт. Для ручной публикации в стор, настройки учётных данных Capgo Cloud Build, стратегии каналов и написания тестов есть отдельные скиллы.

Какие задачи решает

  • собрать пайплайн Capacitor-приложения с нуля
  • починить упавшую сборку, которая проходит локально
  • настроить подпись iOS и загрузку в TestFlight
  • подписать Android AAB и выложить в Play
  • выбрать версии Node, Xcode и JDK под мажор Capacitor

Примеры запросов агенту

  • Собери GitHub Actions для Capacitor-приложения: тесты, сборка веба, потом iOS и Android параллельно
  • CI падает на этапе сборки Android из-за несовместимой версии Java — разберись и поправь workflow
  • Настрой загрузку OTA-обновления через Capgo в отдельную job по тегу

Как установить capacitor-ci-cd

1Через Skills CLI (Vercel)

npx skills add Cap-go/capgo-skills --skill capacitor-ci-cd -a claude-code

2Вручную: положить файлы

~/.claude/skills/capacitor-ci-cd/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/capacitor-ci-cd/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о capacitor-ci-cd

Как установить capacitor-ci-cd в Claude Code?

Выполните npx skills add Cap-go/capgo-skills --skill capacitor-ci-cd -a claude-code. Скилл появится в ~/.claude/skills/capacitor-ci-cd/SKILL.md.

Что делает capacitor-ci-cd?

Помогает проектировать и исправлять CI/CD для Capacitor-приложений: сборка веба, cap sync, подпись и загрузка iOS и Android, OTA-обновления Capgo, секреты, кэш и нумерация сборок.

Чем capacitor-ci-cd отличается от других скиллов Cap-go?

Он про конвейер целиком. Ручная публикация в стор — это capacitor-app-store, настройка учётных данных Capgo Cloud Build — capgo-native-builds, каналы и релизы — capgo-release-workflows, тесты — capacitor-testing.

Исходный текст

SKILL.md · MIT
---
name: capacitor-ci-cd
description: Designs and fixes CI/CD pipelines for Capacitor apps - GitHub Actions, GitLab CI, Fastlane, or Capgo Cloud Build (npx @capgo/cli@latest build request) - covering web build and tests, cap sync, iOS archive/export/upload with App Store Connect API keys, Android AAB signing and Play upload, Capgo live-update uploads, secrets, caching, and build-number bumping. Use when choosing runner images and toolchains (Node 22/24, macos-26 vs xcode-27 runners, JDK 21, Gradle 9 / AGP 9 for Capacitor 9), or when CI fails with errors like "No signing certificate", "requires a provisioning profile", "Unsupported class file major version", "Android Gradle plugin requires Java 17", "The engine node is incompatible", or "Could not find the web assets directory". Do not use for one-off manual store submission (capacitor-app-store), Capgo Cloud Build credential onboarding in depth (capgo-native-builds), Capgo channel/release strategy (capgo-release-workflows), or test authoring (capacitor-testing).
allowed-tools:
  - Bash(node -e *)
  - Bash(find *)
---

# CI/CD for Capacitor Apps

Build, sign, and ship Capacitor apps from CI with the right toolchain for the Capacitor major in use.

## When to Use

TRIGGER when:
- Creating or fixing `.github/workflows/*.yml`, `.gitlab-ci.yml`, `fastlane/Fastfile`, or a Capgo Cloud Build job.
- Picking runner images, Node/Xcode/JDK versions for Capacitor 8 or 9.
- Automating signing, TestFlight/Play uploads, version bumps, or Capgo OTA uploads.
- A CI build fails while a local build works.

Do not use for:
- Manual submission, listing, screenshots -> `capacitor-app-store`.
- Capgo Cloud Build credential setup and troubleshooting -> `capgo-native-builds`.
- Channel promotion, staged OTA rollouts -> `capgo-release-workflows`.
- Writing unit/E2E tests -> `capacitor-testing`.
- Security scanning rules -> `capacitor-security`.

## Live Project Snapshot

Capacitor version, Node engine, and scripts:
!`node -e "const fs=require('fs');if(!fs.existsSync('package.json'))process.exit(0);const pkg=JSON.parse(fs.readFileSync('package.json','utf8'));const out=[];if(pkg.engines)out.push('engines='+JSON.stringify(pkg.engines));if(pkg.packageManager)out.push('packageManager='+pkg.packageManager);for(const section of ['dependencies','devDependencies']){for(const [name,version] of Object.entries(pkg[section]||{})){if(name.startsWith('@capacitor/')||name==='@capgo/cli'||name==='@capgo/capacitor-updater')out.push(section+'.'+name+'='+version)}}for(const [name,cmd] of Object.entries(pkg.scripts||{})){if(/build|test|lint|sync|release/i.test(name))out.push('scripts.'+name+'='+cmd)}console.log(out.join('\n'))"`

Existing CI, lockfiles, and native build files:
!`find . -maxdepth 4 -not -path '*/node_modules/*' \( -path './.github/workflows/*' -o -name '.gitlab-ci.yml' -o -name 'Fastfile' -o -name 'Appfile' -o -name 'Matchfile' -o -name 'ExportOptions.plist' -o -name 'Podfile' -o -name 'Package.swift' -o -name 'gradle-wrapper.properties' -o -name 'variables.gradle' -o -name '.nvmrc' -o -name '.node-version' -o -name 'bun.lock' -o -name 'package-lock.json' -o -name 'pnpm-lock.yaml' -o -name 'yarn.lock' \)`

## Toolchain Matrix

| | Capacitor 8.x (stable, `latest`) | Capacitor 9 (`next`, pre-GA) |
|---|---|---|
| Node | 22+ | 24+ (ships npm 11) |
| Xcode | 26+ (27 OK on 8.5+ with UIScene adopted) | 27+ |
| GitHub macOS runner | `macos-26` (default Xcode 26.x) | `xcode-27` image (preview at time of writing) or a `macos-*` image that lists Xcode 27; check actions/runner-images |
| iOS deployment target | 15.0 | 16.0 |
| JDK | 21 | 21 (AGP 9 itself needs 17+, Capacitor's Android library compiles with Java 21) |
| Gradle / AGP | 8.14.3 / 8.13 | 9.5.1 / 9.2.1 |
| compile/target SDK | 36 | 37 |

Store-side deadlines: Apple requires the iOS 26 SDK now and the iOS 27 SDK from April 2027; Google Play requires target API 36 since Aug 31, 2026. A Capacitor 8 app on `macos-26` meets both today.

Pin Xcode explicitly when several are installed: `sudo xcode-select -s /Applications/Xcode_<version>.app` (exact folder names are listed in the runner image README).

## Choose a Pipeline Shape

Ask the user when unclear:
1. **Capgo Cloud Build** - no macOS runner or local signing setup; any Linux runner calls `npx @capgo/cli@latest build request <appId> --platform ios|android`. Credentials are saved once with `npx @capgo/cli@latest build credentials save ...` (or `build init` for guided iOS setup) and passed in CI as env vars. Load `capgo-native-builds` for details.
2. **Self-hosted GitHub Actions / GitLab** - full control; you manage macOS runners, certificates, and keystores. See `references/github-actions.md`, `references/gitlab-ci.md`.
3. **Fastlane** inside either - best when match/pilot/supply are already in use. See `references/fastlane.md`.

Web-only changes after a native release can skip native builds entirely: upload a Capgo bundle (`npx @capgo/cli@latest bundle upload --channel <channel>`, auth via `CAPGO_TOKEN`). Native changes (plugins, permissions, Capacitor upgrades) always need a native build.

## Procedure

1. Read the snapshot: Capacitor major, package manager + lockfile, iOS dependency manager (`Package.swift` -> SPM, `Podfile` -> CocoaPods), existing workflows.
2. Pick toolchain versions from the matrix. Set Node from `.nvmrc`/`engines` if present.
3. Structure jobs: `test` (lint, typecheck, unit) -> `build-web` (artifact `<webDir>`) -> `ios` + `android` in parallel -> deploy jobs gated on branch/tag. Always run `npx cap sync <platform>` on the native job after restoring the web artifact; never commit synced assets as a CI shortcut.
4. Signing: follow `references/signing-and-secrets.md`. Prefer App Store Connect API keys over Apple ID passwords; keep Android keystore and passwords in secrets, decode at runtime, delete after.
5. Build numbers: derive from CI (`GITHUB_RUN_NUMBER`, `CI_PIPELINE_IID`) or let Capgo Cloud Build bump them. Never reuse a build number.
6. Add caching (`references/caching-and-versioning.md`).
7. Run the pipeline on a branch first, uploading to TestFlight internal / Play internal track only.

## Verification

- The workflow passes on a clean runner twice in a row (cache cold and warm).
- Logs show the expected tool versions: add `node -v`, `xcodebuild -version`, `java -version`, `./gradlew --version` steps.
- iOS artifact: `unzip -l App.ipa | grep Payload/App.app` and the build appears in TestFlight with the expected build number.
- Android artifact: `bundletool dump manifest --bundle app-release.aab | grep -E "versionCode|targetSdkVersion"` matches expectations; build appears in the Play internal track.
- Capgo: `npx @capgo/cli@latest bundle list` shows the uploaded version on the intended channel.
- No secret values printed in logs (GitHub masks registered secrets; never `echo` decoded files).

## Error Handling

| Error in CI log | Fix |
|---|---|
| `error ... The engine "node" is incompatible with this module. Expected version ">=22.0.0"` (or `>=24`) | Bump `actions/setup-node` `node-version` to match the Capacitor major |
| `Could not find the web assets directory: ./dist.` | Web artifact not downloaded to `webDir`, or build skipped; fix artifact path |
| `No signing certificate "iOS Distribution" found` | Certificate not imported into the active keychain, or wrong team; see signing reference |
| `"App" requires a provisioning profile. Select a provisioning profile in the Signing & Capabilities editor.` | Install the profile, or use `-allowProvisioningUpdates` with API-key auth flags |
| `error: exportArchive: No profiles for 'com.x.y' were found` | Profile type mismatch with `ExportOptions.plist` `method` (`app-store-connect`) |
| `xcodebuild: error: SDK "iphoneos27.0" cannot be located` / Swift 6 errors on `@UIApplicationMain` | Wrong Xcode selected; `xcode-select` the required version; replace `@UIApplicationMain` with `@main` |
| `Unsupported class file major version 65` / `Android Gradle plugin requires Java 17 to run` / `invalid source release: 21` | Install JDK 21 with `actions/setup-java` (`distribution: temurin`, `java-version: '21'`) |
| `Plugin [id: 'org.jetbrains.kotlin.android'] ... ` conflicts after Capacitor 9 upgrade | AGP 9 has built-in Kotlin; remove the kotlin-android plugin per `capacitor-app-upgrades` |
| `SDK location not found. Define a valid SDK location with an ANDROID_HOME` | Use an image with the Android SDK (`ubuntu-latest` has it) or `android-actions/setup-android` |
| Play API: `APK specifies a version code that has already been used.` | Derive `versionCode` from the CI run number |
| Capgo: `Cannot find API key in local folder or global, please login first` | Export `CAPGO_TOKEN` from secrets in that step's `env` (or pass `-a`) |
| Capgo: `Cannot auth user with apikey` | Key revoked or lacks upload permission; create a new key in the Capgo dashboard |
| `npm error 404 Not Found - GET https://registry.npmjs.org/capsec` | Security scanner package is `@capgo/capgo-sec`: `npx @capgo/capgo-sec@latest scan --ci` |

## References

- `references/github-actions.md` - complete workflow: test, web build, iOS (SPM/CocoaPods), Android, Capgo OTA, Capgo Cloud Build job.
- `references/gitlab-ci.md` - GitLab pipeline with macOS runner tags.
- `references/fastlane.md` - iOS and Android lanes with API keys and match.
- `references/signing-and-secrets.md` - certificate/profile import, API key auth, Android keystore wiring, secret inventory.
- `references/caching-and-versioning.md` - npm/Gradle/SPM/CocoaPods caches, build numbers, semantic-release.

© Cap-go · MIT · Cap-go/capgo-skills

Похожие скиллы

Все скиллы по теме «DevOps и инфраструктура» →
wizard Matt Pocock Скилл создаёт интерактивный bash-скрипт для ручных шагов: настройки сервисов, секретов CI и разовых миграций. 553 369установок hyperframes-cli heygen-com Управляет проектами HyperFrames через терминал: собирает таймлайн, проверяет контраст кадров, запускает предпросмотр и рендерит видео локально или в облаке. CX Codex +1 1 300 000установок setup-pre-commit Matt Pocock Скилл настраивает pre-commit для JavaScript-репозитория: Husky запускает форматирование, проверку типов и тесты перед коммитом. 489 289установок using-git-worktrees Jesse Vincent Готовит изолированное рабочее дерево перед доработкой или выполнением плана. Проверяет текущий репозиторий, выбирает нативные средства платформы либо Git. CX Codex 217 153установок finishing-a-development-branch Jesse Vincent Скилл проверяет тесты и помогает выбрать, как завершить работу в ветке: слить её, открыть Pull Request или оставить как есть. CX Codex 214 439установок orca-cli stablyai Скилл даёт агенту доступ к worktree, терминалам, артефактам и встроенному браузеру Orca через CLI. Пригодится, когда работа идёт в окружении Orca. CX Codex +1 353 600установок

Из того же набора41

capacitor-offline-first Скилл проектирует оффлайн-режим для приложений на Capacitor с локальной базой SQLite. Помогает настроить очередь отправки, разрешение конфликтов и защиту от потери данных на iOS. CX Codex +1 1 100установок capacitor-push-notifications Скилл для настройки и отладки удалённых пушей в Capacitor: FCM на Android, APNs на iOS. Пригодится, когда registration не срабатывает или уведомления не показываются. CX Codex +1 1 100установок capacitor-splash-screen Скилл разбирается, почему в приложении Capacitor мелькает белый экран или сплэш не исчезает, и правит конфиг, тему Android 12+ и iOS storyboard. CX Codex +1 1 100установок capacitor-keyboard Разбирает поведение экранной клавиатуры в приложениях на Capacitor: режимы resize на iOS, высоты событий, edge-to-edge на Android. Пригодится, когда поле ввода уезжает под клавиатуру. CX Codex +1 1 000установок tailwind-capacitor Настраивает Tailwind CSS v4 в приложениях на Capacitor и разбирает грабли мобильной вёрстки: safe-area, тёмная тема, варианты под iOS и Android. CX Codex +1 955установок capacitor-mcp Помогает настроить и починить подключение MCP-серверов Ionic, Capacitor, Capgo и Xcode к ИИ-агенту. Пригодится при сборке iOS или интеграции мобильных утилит. CX Codex +1 912установок capacitor-apple-review-preflight Проверяет Capacitor-приложение под iOS по правилам Apple App Review и собирает отчёт с приоритетами — до отправки или после отказа. CX Codex +1 893установок framework-to-capacitor Настраивает статическую сборку Next.js, Nuxt, Angular, SvelteKit или Vite так, чтобы Capacitor упаковал её в приложение для iOS и Android. CX Codex +1 870установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой