DEV Community

Kai Oswald
Kai Oswald

Posted on

Complete CI/CD for Flutter Apps

My Workflow

This GitHub Action workflow can be used to fully automate your build, test and deployment processes for Flutter.
All Flutter build targets are supported with this workflow: android, iOS and web.
When pushing without a tag this workflow will analyze and test your Flutter app.
When pushing with a tag (starting with 'v' in this case) this workflow additionally creates a release including all artifacts needed for deployment.
These artifacts can then be used to deploy your apps.
I have added the firebase hosting deploy as an example for web deployment.

This can be further extended to deploy the iOS and Android app to a test platform like testflight or directly to the platform specific stores (don't forget to sign your apps 😄).

This workflow is a great starting point for any Flutter app and can be tweaked to your personal preference.

Submission Category:

DIY Deployments, Phone Friendly

Yaml File or Link to Code

name: Build Flutter apps on: push: branches: - main tags: - v* jobs: build: runs-on: macos-latest steps: - uses: actions/checkout@v2 - uses: subosito/flutter-action@v1.5.3 with: channel: 'stable' - name: Install Dependencies run: flutter packages get - name: Analyze run: flutter analyze lib test - name: Run tests run: flutter test --no-pub --coverage --test-randomize-ordering-seed random packages test - name: Build Android App if: startsWith(github.ref, 'refs/tags/v') run: flutter build apk - name: Build iOS App if: startsWith(github.ref, 'refs/tags/v') run: | flutter build ios --no-codesign cd build/ios/iphoneos mkdir Payload cd Payload ln -s ../Runner.app cd .. zip -r app.ipa Payload - name: Build web if: startsWith(github.ref, 'refs/tags/v') run: | flutter build web cd build/web zip -r web-app.zip . - name: Archive Production Artifact if: startsWith(github.ref, 'refs/tags/v') uses: actions/upload-artifact@master with: name: web path: build/web - name: Release Apps if: startsWith(github.ref, 'refs/tags/v') uses: ncipollo/release-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} artifacts: 'build/app/outputs/**/*.apk,build/ios/iphoneos/app.ipa,build/web/web-app.zip' deploy: if: startsWith(github.ref, 'refs/tags/v') needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Download Artifact uses: actions/download-artifact@master with: name: web path: build/web - name: Deploy to Firebase hosting uses: w9jds/firebase-action@master with: args: deploy --message \"${{ github.event.head_commit.message }}\" --only hosting env: FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} 
Enter fullscreen mode Exit fullscreen mode

Additional Resources / Info

We currently use this workflow for our own Flutter app that is not yet published and not yet open-source, but are planning on doing so in the near future!

Top comments (1)

Collapse
 
rcsensussoft profile image
Chirag R Sensussoft • Edited

How to solve this bug, plz help me..

Run flutter build ios --no-codesign cd build/ios/iphoneos mkdir Payload cd Payload ln -s ../Runner.app cd .. zip -r app.ipa Payload
Could not find an option or flag "-s".

Run 'flutter -h' (or 'flutter -h') for available flutter commands and options.
Error: Process completed with exit code 64.