-
GitHub App + secrets. Install the clevertap-wrapper-sync App on the wrapper repo (and its test fork). Add 4 secrets: CLEVERTAP_WRAPPER_SYNC_APP_ID, CLEVERTAP_WRAPPER_SYNC_PRIVATE_KEY, ANTHROPIC_API_KEY, SLACK_WEBHOOK_URL.
-
Dispatch workflow. Copy Flutter's native-release-sync.yml into the wrapper repo; set wrapper: cordova; keep uses: CleverTap/clevertap-wrapper-tooling/.github/workflows/sync.yml@v1. Keep the inputs (android_module/version, ios_module/version, release_name, base_ref, model, skip_sync).
-
Build composite .github/actions/build/cordova/action.yml. Mirror build/flutter: inputs phase + android_version + ios_version + wrapper_path; outputs android_outcome/ios_outcome. Use Cordova's real build commands (e.g. cordova platform add/build android, cordova build ios). Include any "missing generated file" stubs the example needs (Flutter needs a google-services.json stub; check what Cordova needs). For iOS, delete the example Podfile.lock in the post-sync phase if the pin changed.
-
Wire sync.yml. Add the four if: inputs.wrapper == 'cordova' build steps (pre/post × … one composite call each, both platforms), a cordova branch in Resolve Claude config (set prompt = prompts/sync-orchestrator-cordova.md and the allowed_tools — include the diff tool + read/edit/git + Cordova's CLIs; exclude WebFetch/WebSearch), and the artifact-upload paths for Cordova's APK/app.
-
Prompt prompts/sync-orchestrator-cordova.md. Clone sync-orchestrator-flutter.md and swap the wrapper-specific parts: the layer/recipe references (Cordova's JS plugin layer + Android/iOS bridges), the version-location list, and the example-app demo location. Keep verbatim: the "no human / proceed" override; the diff-tool-as-ground-truth instruction; the step-3b changelog recall pass (source-verify, then act; behavior-only/unconfirmable → flagged_for_review); the "Source verification — MANDATORY" section (every native call must be confirmed in the cached native source via the Read/Grep TOOLS — Bash is denied outside cwd — else flag, never guess); the cross-platform "verify-or-flag" section with the ${OTHER_PLATFORM_SYNCING} env var (plumbed via claude-sync's other_platform_syncing input); the mandatory Example-app demo step (4b) (example file required in each surfaced item's files_touched); step-anchored progressive skill invocation (invoke each skill via the Skill tool at the step that needs it — do NOT pre-read all skills upfront); the end-of-run completion gate (a "you are NOT done until…" checklist listing every version file + CHANGELOG + example demo, verified by re-reading before emitting); and the structured-output schema incl. flagged_for_review, source_verified, and native_changelogs.
-
Domain skills in the Cordova repo's .claude/skills/: a version-detection equivalent (where Cordova's version pins + own version live), an api-wrapper-patterns equivalent (how to add a method across Cordova's layers), an example-app equivalent (how to add a runnable demo for each API — every surfaced method MUST get one), and a changelog-generation equivalent. Commit these skills to the branch the sync checks out (base_ref, default develop) — the headless run reads skills from the checked-out wrapper repo, NOT from anyone's laptop. If they're only local/untracked, Claude can't read them and silently falls back to the prompt text (this is exactly how RN's Example demos got skipped before they were committed).
-
Test on a fork. Fork the wrapper repo; push the dispatch to a branch and make it the fork's default branch (so the workflow_dispatch UI/CLI sees it); ensure the fork has the branch the sync checks out (develop by default, or pass base_ref). Run skip_sync=true first (validates the build composite + wiring at $0 Claude). Then a full run. If the wrapper is already at the latest native version (no gap), create a develop-based baseline with rolled-back pins (and optionally hand-remove a couple of recently-added wrapper methods) and pass it via base_ref.