Summary
Set up a full CI/CD pipeline using GitHub Actions to automate testing, building, and releasing the Flutter app across all supported platforms: iOS, Android, Web, macOS, Windows, and Linux. The pipeline should also prepare the repository structure with the necessary secrets, configurations, and workflow files.
Platforms & Target Stores
| Platform |
Store / Distribution |
| Android |
Google Play Store (Internal → Production) |
| iOS |
Apple App Store (TestFlight → Production) |
| Web |
Firebase Hosting / GitHub Pages |
| macOS |
Mac App Store / Direct DMG release |
| Windows |
Microsoft Store / GitHub Releases (.msix) |
| Linux |
Snap Store, Flatpak, or GitHub Releases (.deb / AppImage) |
Proposed Workflow Structure
.github/
└── workflows/
├── test.yml # Run on every PR and push to main
├── build.yml # Build all platforms on tag/release
├── deploy_android.yml
├── deploy_ios.yml
├── deploy_web.yml
├── deploy_macos.yml
├── deploy_windows.yml
└── deploy_linux.yml
Workflow Details
🧪 test.yml — Continuous Testing
Triggers on: every push and pull request to main / develop
- Flutter
analyze (static analysis)
- Flutter
test (unit + widget tests)
- Code coverage report (upload to Codecov or similar)
- Fail fast on any error
🤖 deploy_android.yml
- Build
.aab (Android App Bundle) in release mode
- Sign with keystore stored in GitHub Secrets
- Upload to Google Play via
r0adkll/upload-google-play action
- Tracks:
internal on develop, production on main
🍎 deploy_ios.yml
- Build
.ipa using xcodebuild on macos-latest runner
- Sign with Apple certificate + provisioning profile stored in Secrets
- Upload to TestFlight via
Apple-Actions/upload-testflight-build or fastlane
- Promote to App Store manually or via second job
🌐 deploy_web.yml
- Build Flutter Web (
flutter build web --release)
- Deploy to Firebase Hosting or GitHub Pages
- Preview deployments on PRs (Firebase preview channels)
🖥 deploy_macos.yml
- Build
.app bundle on macos-latest runner
- Notarize with Apple credentials
- Upload to Mac App Store or attach
.dmg to GitHub Release
🪟 deploy_windows.yml
- Build
.msix on windows-latest runner
- Sign with code-signing certificate
- Publish to Microsoft Store via
microsoft/store-submission or attach to GitHub Release
🐧 deploy_linux.yml
- Build on
ubuntu-latest runner
- Package as
.deb, .AppImage, and/or Snap
- Publish to Snap Store (
snapcore/action-publish) or attach to GitHub Release
Repository Preparation
Required GitHub Secrets
# Android
ANDROID_KEYSTORE_BASE64
ANDROID_KEY_ALIAS
ANDROID_KEY_PASSWORD
ANDROID_STORE_PASSWORD
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON
# iOS / macOS
APPLE_CERTIFICATE_BASE64
APPLE_CERTIFICATE_PASSWORD
APPLE_PROVISIONING_PROFILE_BASE64
APPLE_TEAM_ID
APP_STORE_CONNECT_API_KEY_ID
APP_STORE_CONNECT_API_ISSUER_ID
APP_STORE_CONNECT_API_KEY_BASE64
# Web
FIREBASE_TOKEN (or FIREBASE_SERVICE_ACCOUNT)
# Windows
WINDOWS_CERTIFICATE_BASE64
WINDOWS_CERTIFICATE_PASSWORD
MS_STORE_TENANT_ID
MS_STORE_CLIENT_ID
MS_STORE_CLIENT_SECRET
MS_STORE_APP_ID
# Snap (Linux)
SNAPCRAFT_STORE_CREDENTIALS
Branch & Tag Strategy
develop → deploys to all staging/beta tracks
main → deploys to all production tracks
- Tags
v*.*.* → triggers GitHub Release + attaches binaries
Additional Repo Setup
- Add
.github/dependabot.yml to keep Actions and Flutter deps up to date
- Add status badges to
README.md for each platform build
- Add
CONTRIBUTING.md with branch naming and PR conventions
- Configure branch protection rules on
main and develop (require passing CI)
Possible Solution / Tools
Acceptance Criteria
Summary
Set up a full CI/CD pipeline using GitHub Actions to automate testing, building, and releasing the Flutter app across all supported platforms: iOS, Android, Web, macOS, Windows, and Linux. The pipeline should also prepare the repository structure with the necessary secrets, configurations, and workflow files.
Platforms & Target Stores
Proposed Workflow Structure
Workflow Details
🧪 test.yml — Continuous Testing
Triggers on: every push and pull request to
main/developanalyze(static analysis)test(unit + widget tests)🤖 deploy_android.yml
.aab(Android App Bundle) in release moder0adkll/upload-google-playactioninternalondevelop,productiononmain🍎 deploy_ios.yml
.ipausingxcodebuildonmacos-latestrunnerApple-Actions/upload-testflight-buildorfastlane🌐 deploy_web.yml
flutter build web --release)🖥 deploy_macos.yml
.appbundle onmacos-latestrunner.dmgto GitHub Release🪟 deploy_windows.yml
.msixonwindows-latestrunnermicrosoft/store-submissionor attach to GitHub Release🐧 deploy_linux.yml
ubuntu-latestrunner.deb,.AppImage, and/orSnapsnapcore/action-publish) or attach to GitHub ReleaseRepository Preparation
Required GitHub Secrets
Branch & Tag Strategy
develop→ deploys to all staging/beta tracksmain→ deploys to all production tracksv*.*.*→ triggers GitHub Release + attaches binariesAdditional Repo Setup
.github/dependabot.ymlto keep Actions and Flutter deps up to dateREADME.mdfor each platform buildCONTRIBUTING.mdwith branch naming and PR conventionsmainanddevelop(require passing CI)Possible Solution / Tools
Acceptance Criteria
test.ymlruns on every PR; PRs cannot be merged if tests fail.mainor av*tag..aabto Google Play (internal track ondevelop, production onmain).develop; promotes to App Store onmain..dmgand/or publishes to Mac App Store..msixand publishes to Microsoft Store or GitHub Releases..deb/AppImage/Snapand uploads to Snap Store or GitHub Releases.CONTRIBUTING.md.mainrequires passing CI and at least one review.README.mdincludes CI/CD status badges for all platforms.