Complete CI/CD for Flutter Apps
Kai Oswald

Kai Oswald @kaos

About: .NET Core + Vue.js = 🔥

Location:
Stuttgart, Germany
Joined:
Apr 30, 2019

Complete CI/CD for Flutter Apps

Publish Date: Nov 24 '21
9 1

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!

Comments 1 total

  • Chirag R Sensussoft
    Chirag R SensussoftMar 7, 2022

    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.

Add comment