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 }}
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!
Latest comments (1)
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.