Skip to content

Deploy app

Deploy app #586

Workflow file for this run

name: Deploy app
on:
push:
branches:
- test
workflow_dispatch:
inputs:
deploy_target:
description: "Deploy to:"
required: true
default: "fad"
type: choice
options:
- "fad"
- "store"
- "ios_fad"
- "ios_store"
- "android_fad"
- "android_store"
jobs:
setup:
runs-on: ubuntu-latest
outputs:
build_number: ${{ steps.get_build_number.outputs.build_number }}
flutter_version: ${{ steps.set_output.outputs.flutter_version }}
env:
SECRET_PASSPHRASE: ${{ secrets.SECRET_PASSPHRASE }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FLUTTER_VERSION: '3.24.0'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Check deploy target and branch
run: |
if [[ "${{ github.ref }}" != "refs/heads/main" &&
( "${{ inputs.deploy_target }}" == "store" ||
"${{ inputs.deploy_target }}" == "ios_store" ||
"${{ inputs.deploy_target }}" == "android_store" ) ]]; then
echo "🚫 Error: Deployment to store, ios_store, or android_store is only allowed from the 'main' branch."
exit 1
fi
- name: Set output for flutter_version
id: set_output
run: |
echo "flutter_version=${FLUTTER_VERSION}" >> $GITHUB_OUTPUT
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
channel: 'stable'
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}
- name: Install Dart dependencies
run: dart pub get
- uses: bluefireteam/melos-action@v3
# Secrets
- name: Decrypt secrets
run: melos decrypt-secrets
- name: Get build number
id: get_build_number
run: |
BUILD_NUMBER=$(bash scripts/get-build-number.sh)
if [ -z "$BUILD_NUMBER" ]; then
echo "Error: Build number is not specified."
exit 1
fi
echo "#️⃣ New build number: $BUILD_NUMBER"
echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
- name: Check Flutter Path
run: echo "Flutter path is = $FLUTTER_ROOT"
- name: Remove Flutter
run: |
rm -rf $FLUTTER_ROOT
echo "Flutter removed to free up space"
- name: Clean Dart dependencies
run: |
rm -rf .dart_tool/
rm -rf $HOME/.pub-cache/
# iOS deploy
ios-deploy:
needs: setup
runs-on: macos-latest
if: ${{ inputs.deploy_target == '' || inputs.deploy_target == 'fad' || inputs.deploy_target == 'store' || inputs.deploy_target == 'ios_fad' || inputs.deploy_target == 'ios_store' }}
env:
SECRET_PASSPHRASE: ${{ secrets.SECRET_PASSPHRASE }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Set target variable based on deploy_target
run: |
echo "deploy_target is = ${{ inputs.deploy_target }}"
if [[ "${{ inputs.deploy_target }}" == "" || "${{ inputs.deploy_target }}" == "fad" || "${{ inputs.deploy_target }}" = "ios_fad" ]]; then
echo "ios_target=ios_fad" >> $GITHUB_ENV
elif [[ "${{ inputs.deploy_target }}" == "store" || "${{ inputs.deploy_target }}" == "ios_store" ]]; then
echo "ios_target=ios_store" >> $GITHUB_ENV
fi
- name: Display ios_target value
run: echo "ios_target is set to = ${{ env.ios_target }}"
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ needs.setup.outputs.flutter_version }}
channel: 'stable'
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}
- name: Display Flutter version
run: flutter --version
- uses: bluefireteam/melos-action@v3
# Secrets
- name: Decrypt secrets
run: melos decrypt-secrets
# iOS certs
- name: Making sure the iOS certificates and profiles are installed
run: melos build:ios_match_assure
# Dart/Flutter
- name: Generate dart code
run: melos codegen --no-select
- name: Display Build Number
run:
echo "Number is = ${{ needs.setup.outputs.build_number }}"
- name: Build and deploy
run: |
bash scripts/build.sh \
--deploy-target ${{ env.ios_target }} \
--build-number ${{ needs.setup.outputs.build_number }} \
--upload true
- name: Clean Xcode Derived Data
run: |
rm -rf ~/Library/Developer/Xcode/DerivedData
- name: Clean CocoaPods cache
run: |
pod cache clean --all
rm -rf ios/Pods
rm -rf ios/Podfile.lock
- name: Remove Flutter
run: |
rm -rf $FLUTTER_ROOT
- name: Clean Dart dependencies
run: |
rm -rf .dart_tool/
rm -rf $HOME/.pub-cache/
# Android deploy
android-deploy:
needs: setup
runs-on: ubuntu-latest
if: ${{ inputs.deploy_target == '' || inputs.deploy_target == 'fad' || inputs.deploy_target == 'store' || inputs.deploy_target == 'android_fad' || inputs.deploy_target == 'android_store' }}
env:
SECRET_PASSPHRASE: ${{ secrets.SECRET_PASSPHRASE }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
steps:
- name: Reinstall existing fastlane plugin
run: |
sudo gem uninstall fastlane-plugin-firebase_app_distribution
gem install fastlane-plugin-firebase_app_distribution --user-install
- uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Set target variable based on deploy_target
run: |
echo "deploy_target is = ${{ inputs.deploy_target }}"
if [[ "${{ inputs.deploy_target }}" == "" || "${{ inputs.deploy_target }}" == "fad" || "${{ inputs.deploy_target }}" = "android_fad" ]]; then
echo "android_target=android_fad" >> $GITHUB_ENV
elif [[ "${{ inputs.deploy_target }}" == "store" || "${{ inputs.deploy_target }}" == "android_store" ]]; then
echo "android_target=android_store" >> $GITHUB_ENV
fi
- name: Display android_target value
run: echo "android_target is set to = ${{ env.android_target }}"
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: ${{ needs.setup.outputs.flutter_version }}
channel: 'stable'
cache: true
cache-key: flutter-:os:-:channel:-:version:-:arch:-:hash:-${{ hashFiles('**/pubspec.lock') }}
- name: Display Flutter version
run: flutter --version
- uses: bluefireteam/melos-action@v3
- uses: actions/setup-java@v4
with:
distribution: zulu
java-version: "17.x"
# Secrets
- name: Decrypt secrets
run: melos decrypt-secrets
# Dart/Flutter
- name: Generate dart code
run: melos codegen --no-select
- name: Display Build Number
run:
echo "Number is = ${{ needs.setup.outputs.build_number }}"
- name: Build and deploy
run: |
bash scripts/build.sh \
--deploy-target ${{ env.android_target }} \
--build-number ${{ needs.setup.outputs.build_number }} \
--upload true
- name: Remove Flutter
run: |
rm -rf $FLUTTER_ROOT
echo "Flutter removed to free up space"
- name: Clean Dart dependencies
run: |
rm -rf .dart_tool/
rm -rf $HOME/.pub-cache/