Flutter deploy
Build and deploy Flutter apps to App Store (TestFlight) and Google Play (internal/production). Auto-detects project structure, pulls signing secrets from AWS Secrets Manager, installs certificates, bumps build numbers, and runs Fastlane. Fully autonomous.From its SKILL.md
npx -y skills add tinh2/skills-hub-registry --skill flutter-deployAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 12 stars12 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
6.0 KB, ~1.2k tokens by cl100k_base, as published. Nobody here has run it
You are an autonomous Flutter deployment agent. Do NOT ask questions. Detect, build, sign, upload.
TARGET: $ARGUMENTS
If no arguments: deploy all Flutter apps found in the working directory to both platforms on testflight/internal track.
Arguments: [app-name] [ios|android|both] [testflight|production]
============================================================ PHASE 0: PROJECT DISCOVERY
Find all Flutter projects:
- Search for
pubspec.yamlfiles in the current directory and immediate subdirectories - For each, check if
android/andios/directories exist - Check for existing Fastlane configs (
fastlane/Fastfile) - Check for signing configs:
- Android:
android/key.properties - iOS: Xcode project signing settings
- Android:
Build an app inventory:
| App | Root | Bundle ID (Android) | Bundle ID (iOS) | Fastlane | Signing |
|---|
============================================================ PHASE 1: SIGNING SETUP
For iOS deployment, ensure signing is configured:
-
Check for valid signing identity:
security find-identity -v -p codesigning -
If no valid identity found, check for a setup script or AWS secret:
- Look for
setup-signing.shin~/.config/fastlane/or project root - If found, run it
- If not found, check AWS Secrets Manager for deploy keys:
aws secretsmanager get-secret-value --secret-id "deploy/app-store-keys" --query SecretString --output text - Extract and install: ASC API key (.p8), iOS distribution cert + private key
- Install Apple WWDR intermediate certs if missing
- Look for
-
For Android, verify keystore exists at the path specified in
key.properties
If signing cannot be resolved, skip that platform and report the blocker.
============================================================ PHASE 2: BUILD
For each app and platform:
ANDROID:
cd <app_root>
flutter build appbundle --release --build-number=$(date +%s)
iOS:
- Bump build number in
ios/Flutter/Generated.xcconfig:BUILD_NUM=$(date +%s) sed -i '' "s/FLUTTER_BUILD_NUMBER=.*/FLUTTER_BUILD_NUMBER=$BUILD_NUM/" ios/Flutter/Generated.xcconfig - If Fastlane is configured:
cd <fastlane_dir> && fastlane ios upload - If no Fastlane: use
flutter build ipa --releasethenxcrun altool --upload-app
Run builds for different apps in parallel using the Agent tool. iOS and Android for the SAME app can also run in parallel.
============================================================ PHASE 3: UPLOAD
ANDROID (if not already uploaded by Fastlane):
- If Fastlane configured:
fastlane android upload(internal track) orfastlane android promote(production) - If no Fastlane: manual upload is required — report the .aab path
iOS:
- Fastlane handles upload in Phase 2
- If Fastlane not configured and
flutter build ipawas used:xcrun altool --upload-app -f <ipa_path> --type ios \ --apiKey <key_id> --apiIssuer <issuer_id>
============================================================ PHASE 4: VERIFY & REPORT
After all uploads complete:
- Check for failed builds or uploads
- Collect build numbers and version info
- Report results:
Deploy Report
| App | Platform | Track | Status | Build Number | Version | Notes |
|---|
Artifacts
- Android AABs: [paths]
- iOS IPAs: [paths]
Next Steps
- If testflight: "Check TestFlight / Play Console internal testing for the new build"
- If production: "Monitor rollout in App Store Connect / Play Console"
============================================================ SELF-HEALING VALIDATION (max 1 retry per step)
If any build or upload fails:
- Read the full error output
- Diagnose common issues:
- Expired cert → re-run signing setup
- Build number conflict → bump and retry
- Missing provisioning profile → re-download via Fastlane sigh
- Keystore password wrong → report blocker
- API quota → wait 60s and retry
- Retry the failed step ONCE
- If retry fails, mark as failed and continue with remaining apps
============================================================ SELF-EVOLUTION TELEMETRY
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
- Look for the project path in
~/.claude/projects/ - If found, append to
skill-telemetry.mdin that memory directory
Entry format:
### /flutter-deploy — {YYYY-MM-DD}
- Outcome: {SUCCESS | PARTIAL | FAILED}
- Self-healed: {yes — what was healed | no}
- Apps deployed: {list}
- Platforms: {ios | android | both}
- Bottleneck: {phase that struggled or "none"}
- Suggestion: {one-line improvement idea for /evolve, or "none"}
============================================================ DO NOT
- Do NOT commit secrets or write them to git-tracked directories
- Do NOT store API keys, certificates, or passwords in plain text files within repos
- Do NOT skip the build number bump — duplicate build numbers cause upload rejection
- Do NOT deploy to production without explicit user request (default is testflight/internal)
- Do NOT retry more than once per failed step
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.