This Flutter package provides a one-step CI/CD solution for Flutter apps. For a project without any Fastlane setup, it automatically configures all necessary Fastlane settings, builds your Android and iOS apps, and deploys them to Google Play and the App Store with zero manual setup. Developers only need to provide six essential configuration values for iOS deployment in GitHub Secrets.
Tip
If you are new to Fastlane or CI/CD, use GitHub Wiki - Basic-Settings to learn the basic concepts and usage, and follow along to apply them to your project.
🟢 Stable 🟡 Testing...
| 🍎 OS Type | ⚡ Status | 🧩 Support |
|---|---|---|
| macos-14 | 🟡 | Android, iOS |
| macos-15 (latest) | 🟢 | Android, iOS |
| macos-26 | 🟡 | Android, iOS |
| ubuntu-latest | 🟢 | Android |
Before using this action, the GitHub Actions runner must have the following setup:
- A Flutter SDK compatible with your app is installed and configured
subosito/flutter-action - Java is installed for Android builds
actions/setup-java - Android SDK is installed and properly configured
android-actions/setup-android - SSH keys are configured to access your Fastlane match repository
webfactory/ssh-agent
If you want to see an example or reference a template, check the templates/basic_deploy.yml or templates/advanced_depoy.yml files.
- name: Deploy Android and iOS
uses: MTtankkeo/[email protected]
with:
version-name: ${{ github.event.inputs.VERSION_NAME }}
build-number: ${{ github.event.inputs.BUILD_NUMBER }}
release-note: ${{ github.event.inputs.RELEASE_NOTE }}
match-repository: {...}
match-password: ${{ secrets.MATCH_PASSWORD }}
appstore-connect-issuer-id: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
appstore-connect-key-id: ${{ secrets.APP_STORE_CONNECT_KEY_ID }}
appstore-connect-key: ${{ secrets.APP_STORE_CONNECT_KEY }}
appstore-team-id: ${{ secrets.APP_STORE_TEAM_ID }}Sometimes you may need to provide extra build options to Flutter, like choosing a flavor or specifying a different main entrypoint.
You can do this easily with the build-extra input, which passes any additional arguments directly to the Flutter build command.
# Build a production flavor with a custom entrypoint.
build-extra: --flavor prod --target "lib/main_prod.dart"You can control which platforms to build using the platform input:
# Build only Android
platform: android
# Build only iOS
platform: ios
# Build both platforms
platform: allThese are the input parameters for the GitHub Actions workflow.
🔹Required
| Name | Description | Type |
|---|---|---|
| version-name🔹 | Version name for the build | String |
| build-number🔹 | Build number for the build | Number |
| release-note | Release note for the build | String? |
| release-note-language | Language code for the release note (e.g., 'en-US', 'ko-KR') | String? |
| app-id | Common app identifier for both platforms (optional if platform-specific IDs are provided) | String? |
| android-app-id | Application ID for Android | String? |
| ios-app-id | Application bundle identifier for iOS | String? |
| match-repository | Repository for Fastlane match certificates | String? |
| match-password | Password for Fastlane match | String? |
| match-keychain-password | Optional keychain password for Fastlane match | String? |
| appstore-connect-issuer-id | Issuer ID for App Store Connect API key | String? |
| appstore-connect-key-id | Key ID for App Store Connect API key | String? |
| appstore-connect-key | API key content for App Store Connect | String? |
| appstore-team-id | Team ID for the Apple Developer account | String? |
| service-account-path | File path to store the Google service account JSON | String? |
| service-account-json | Google service account JSON content for Play Store (Base64-encoded) | Base64? |
| skip-wait-processing | Skip waiting for build processing after upload (true/false). And corresponds to Fastlane skip_waiting_for_build_processing option | String? |
| flutter-dir | Directory of the Flutter project | String? |
| android-dir | Directory of the Android project | String? |
| ios-dir | Directory of the iOS project | String? |
| build-extra | Additional Flutter build options or flags. Can include multiple tokens like '--flavor prod "lib/main_prod.dart"'. | String? |
| platform | Specifies which platform to build: android, ios, or all. iOS builds require a macOS runner. | String? |