Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 56 additions & 45 deletions .github/workflows/build_and_deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,79 +4,90 @@ on:
push:
branches:
- master
pull_request:
types: [closed]
branches:
- master
- deploy-actions
workflow_dispatch:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Keep workflow_dispatch so that we can trigger the workflow manually


jobs:
build:
build_android:
name: Build Android APK
runs-on: ubuntu-latest

env:
JAVA_VERSION: 21.0.6
FLUTTER_VERSION: 3.35.2
APK_PATH: build/app/outputs/flutter-apk/app-release.apk
KEYSTORE_PATH: android/upload-keystore.jks
KEY_PROPS_PATH: android/key.properties
FIREBASE_OPTIONS_PATH: lib/firebase_options.dart
GOOGLE_SERVICES_ANDROID_PATH: android/app/google-services.json
APPWRITE_PROJECT_ID: ${{ secrets.APPWRITE_PROJECT_ID }}
steps:
# 1. Remove Cached Flutter Installation
- name: Remove Cached Flutter Installation
run: rm -rf $HOME/.flutter
- name: Checkout repository
uses: actions/checkout@v4

- name: Clean up old build files
run: |
rm -rf build/app/outputs/bundle/release/*
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: ${{ env.JAVA_VERSION }}

# 2. Checkout repository
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Android SDK
uses: android-actions/setup-android@v3

# 3. Install Flutter SDK
- name: Install Flutter
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
flutter-version: 3.35.2
flutter-version: ${{ env.FLUTTER_VERSION }}

# 4. Verify Flutter and Dart Versions
- name: Verify Flutter Installation
run: |
flutter --version
dart --version
- name: Decode Android keystore
run: echo "${{ secrets.ANDROID_KEYSTORE }}" | base64 --decode > ${{ env.KEYSTORE_PATH }}

# 6. Install Flutter dependencies
- name: Install Flutter Dependencies
- name: Decode Android key properties
run: echo "${{ secrets.ANDROID_KEY_PROPERTIES }}" | base64 --decode > ${{ env.KEY_PROPS_PATH }}

- name: Decode Android Google Services JSON
run: echo "${{ secrets.GOOGLE_SERVICES_ANDROID }}" | base64 --decode > ${{ env.GOOGLE_SERVICES_ANDROID_PATH }}

- name: Decode Firebase Options
run: echo "${{ secrets.FIREBASE_OPTIONS }}" | base64 --decode > ${{ env.FIREBASE_OPTIONS_PATH }}

- name: Install Flutter dependencies
run: flutter pub get

# 7. Build Android APK
- name: Build Android App Bundle
run: flutter build apk --release --split-per-abi
- name: Run tests
run: flutter test

- name: Build Android APK
run: |
flutter build apk --release \
--dart-define=APPWRITE_BASE_DOMAIN=${{ secrets.APPWRITE_BASE_DOMAIN }} \
--dart-define=APPWRITE_PROJECT_ID=${{ secrets.APPWRITE_PROJECT_ID }}

- name: Verify APK file existence
run: ls -lh ${{ env.APK_PATH }}

# 8. Upload build artifacts
- name: Upload APK as an artifact
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: app-release-apks
path: build/app/outputs/apk/release/*.apk
name: apk-release
path: ${{ env.APK_PATH }}

release:
deploy_github_release:
name: Deploy to GitHub Release
runs-on: ubuntu-latest
needs: build
needs: build_android
permissions:
contents: write
steps:
# 1. Checkout repository
- name: Checkout code
uses: actions/checkout@v4

# 2. Download build artifacts
- name: Download APK
- name: Download APK artifact
uses: actions/download-artifact@v4
with:
name: app-release-apks
path: build/app/outputs/bundle/release/
name: apk-release

# 3. Upload to Github Release
- name: Github Release
- name: Deploy to GitHub Release
uses: ncipollo/[email protected]
with:
allowUpdates: true
artifacts: build/app/outputs/bundle/release/*.apk
artifacts: ${{ env.APK_PATH }}
artifactContentType: apk
generateReleaseNotes: true
tag: latest_build