# This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by # separate terms of service, privacy policy, and support # documentation. name: Create new release run-name: Release v${{ inputs.version }} on: workflow_dispatch: inputs: version: description: "Version" required: true type: string env: BUILD_ARGS: --release --flavor prod --dart-define cameraPreviewAspectRatio=240/320 -t lib/main_prod.dart jobs: build: name: Build .apk & .aab runs-on: macos-11 timeout-minutes: 15 steps: - uses: actions/checkout@v3 with: submodules: recursive - uses: actions/setup-java@v2 with: distribution: "zulu" java-version: "11" - name: Restore Android keystore .jsk and .properties files env: KEYSTORE: ${{ secrets.KEYSTORE }} KEYSTORE_PROPERTIES: ${{ secrets.KEYSTORE_PROPERTIES }} run: | KEYSTORE_PATH=$RUNNER_TEMP/keystore.jks echo -n "$KEYSTORE" | base64 --decode --output $KEYSTORE_PATH cp $KEYSTORE_PATH ./android/app KEYSTORE_PROPERTIES_PATH=$RUNNER_TEMP/key.properties echo -n "$KEYSTORE_PROPERTIES" | base64 --decode --output $KEYSTORE_PROPERTIES_PATH cp $KEYSTORE_PROPERTIES_PATH ./android - name: Restore android/app/google-services.json env: GOOGLE_SERVICES_JSON_ANDROID: ${{ secrets.GOOGLE_SERVICES_JSON_ANDROID }} run: | GOOGLE_SERVICES_JSON_ANDROID_PATH=$RUNNER_TEMP/google-services.json echo -n "$GOOGLE_SERVICES_JSON_ANDROID" | base64 --decode --output $GOOGLE_SERVICES_JSON_ANDROID_PATH cp $GOOGLE_SERVICES_JSON_ANDROID_PATH ./android/app - name: Restore firebase_options.dart env: FIREBASE_OPTIONS: ${{ secrets.FIREBASE_OPTIONS }} run: | FIREBASE_OPTIONS_PATH=$RUNNER_TEMP/firebase_options.dart echo -n "$FIREBASE_OPTIONS" | base64 --decode --output $FIREBASE_OPTIONS_PATH cp $FIREBASE_OPTIONS_PATH ./lib - name: Increment build number & replace version number run: perl -i -pe 's/^(version:\s+)(\d+\.\d+\.\d+)(\+)(\d+)$/$1."${{ github.event.inputs.version }}".$3.($4+1)/e' pubspec.yaml - name: Install Flutter uses: subosito/flutter-action@v2 with: channel: "stable" flutter-version: '3.10.0' - name: Prepare flutter project run: | flutter --version flutter pub get flutter pub run intl_utils:generate - name: Build apk run: flutter build apk $BUILD_ARGS - name: Upload apk to artifacts uses: actions/upload-artifact@v3 with: name: m3_lightmeter_apk path: build/app/outputs/flutter-apk/app-prod-release.apk - name: Build appbundle run: flutter build appbundle $BUILD_ARGS - name: Upload app bundle to artifacts uses: actions/upload-artifact@v3 with: name: m3_lightmeter_bundle path: build/app/outputs/bundle/prodRelease/app-prod-release.aab update-version-in-repo: name: Update repo version needs: [build] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Increment build number & replace version number run: perl -i -pe 's/^(version:\s+)(\d+\.\d+\.\d+)(\+)(\d+)$/$1."${{ github.event.inputs.version }}".$3.($4+1)/e' pubspec.yaml - name: Commit changes run: | git config --global user.name "vodemn" git config --global user.email "vadim.turko@gmail.com" git add -A git commit -m "Version bump" - name: Push to main uses: CasperWA/push-protected@v2 with: token: ${{ secrets.PUSH_TO_MAIN_TOKEN }} branch: ${{ github.ref_name }} unprotect_reviews: true create-release: name: Create Github release needs: [build, update-version-in-repo] if: github.ref_name == 'main' runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Download apk uses: actions/download-artifact@v3 with: name: m3_lightmeter_apk - name: Rename apk run: mv app-prod-release.apk m3_lightmeter.apk - uses: ncipollo/release-action@v1.12.0 with: artifacts: "m3_lightmeter.apk" skipIfReleaseExists: true tag: "v${{ github.event.inputs.version }}" - name: Delete no longer used apk artifact uses: geekyeggo/delete-artifact@v2 with: name: m3_lightmeter_apk extract-merged-native-libs: name: Extract merged native libraries needs: [build] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Download app bundle uses: actions/download-artifact@v3 with: name: m3_lightmeter_bundle - name: Extract & zip merged_native_libs run: | unzip app-prod-release.aab (cd base/lib && zip -r "$OLDPWD/merged_native_libs.zip" .) - name: Zip app bundle and merged_native_libs run: zip m3_lightmeter_release.zip app-prod-release.aab merged_native_libs.zip - name: Upload merged_native_libs.zip to artifacts uses: actions/upload-artifact@v3 with: name: m3_lightmeter_release path: m3_lightmeter_release.zip # TODO: this should be moved to `create-google-play-release` step when it is implemented - name: Delete no longer used app bundle artifact uses: geekyeggo/delete-artifact@v2 with: name: m3_lightmeter_bundle # TODO: Automate Google Play releases creation create-google-play-release: if: false name: Create Google Play release needs: [build, extract-merged-native-libs] runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 with: submodules: recursive - name: Download app bundle uses: actions/download-artifact@v3 with: name: m3_lightmeter_bundle