Deploy app #782
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Sample workflow for building and deploying a Jekyll site to GitHub Pages | |
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" | |
flavor: | |
description: "Target flavor:" | |
required: true | |
default: "staging" | |
type: choice | |
options: | |
- "development" | |
- "staging" | |
- "production" | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
outputs: | |
build_number: ${{ steps.get_build_number.outputs.build_number }} | |
flutter_version: ${{ steps.read_flutter.outputs.flutter_version }} | |
env: | |
SECRET_PASSPHRASE: ${{ secrets.SECRET_PASSPHRASE }} | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
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: Display flavor target | |
run: echo "Flavor target is = ${{ inputs.flavor }}" | |
- name: Check store builds with flavor | |
run: | | |
if [[ "${{ inputs.flavor }}" != "production" && | |
( "${{ 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 for 'production' flavor." | |
exit 1 | |
fi | |
- name: Read Flutter version | |
id: read_flutter | |
run: echo "flutter_version=$(cat .github/configs/flutter_version)" >> $GITHUB_OUTPUT | |
- name: Setup Flutter | |
uses: subosito/flutter-action@v2 | |
with: | |
flutter-version: ${{ steps.read_flutter.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 | |
- 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: Display flavor target | |
run: echo "Flavor target is = ${{ inputs.flavor }}" | |
- name: Build and deploy | |
run: | | |
bash scripts/build.sh \ | |
--deploy-target ${{ env.ios_target }} \ | |
--build-number ${{ needs.setup.outputs.build_number }} \ | |
--flavor ${{ inputs.flavor }} \ | |
--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: Display flavor target | |
run: echo "Flavor target is = ${{ inputs.flavor }}" | |
- name: Build and deploy | |
run: | | |
bash scripts/build.sh \ | |
--deploy-target ${{ env.android_target }} \ | |
--build-number ${{ needs.setup.outputs.build_number }} \ | |
--flavor ${{ inputs.flavor }} \ | |
--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/ |