diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index f35a8a91..48deace9 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -4,79 +4,90 @@ on: push: branches: - master - pull_request: - types: [closed] - branches: - - master + - deploy-actions workflow_dispatch: 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/release-action@v1.14.0 with: allowUpdates: true - artifacts: build/app/outputs/bundle/release/*.apk + artifacts: ${{ env.APK_PATH }} artifactContentType: apk generateReleaseNotes: true tag: latest_build