From b9412c7441f8bc68ef02071dc113bb1deaa470a6 Mon Sep 17 00:00:00 2001 From: Vadim <44135514+vodemn@users.noreply.github.com> Date: Wed, 9 Aug 2023 12:24:12 +0200 Subject: [PATCH] ML-61 Create Google Play release from Github actions (#101) * Delete all artefacts after GP release * Update create_release.yml * Added release notes formatting * Preserve release zip if GP release creation failed * Create whatsnew folder --- .github/workflows/create_release.yml | 118 ++++++++++++++++++++------- 1 file changed, 87 insertions(+), 31 deletions(-) diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index 3851170..ca00c25 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -3,6 +3,11 @@ # separate terms of service, privacy policy, and support # documentation. + +# This workflow uses perl regex. For better syntaxis understading see these docs: +# https://perldoc.perl.org/perlrequick#Search-and-replace +# https://perldoc.perl.org/perlre#Other-Modifiers + name: Create new release run-name: Release v${{ inputs.version }} @@ -14,6 +19,10 @@ on: description: "Version" required: true type: string + release-notes: + description: "Release notes" + required: true + type: string env: BUILD_ARGS: --release --flavor prod --dart-define cameraPreviewAspectRatio=240/320 -t lib/main_prod.dart @@ -23,7 +32,6 @@ jobs: name: Build .apk & .aab runs-on: macos-11 timeout-minutes: 15 - steps: - uses: actions/checkout@v3 with: @@ -95,6 +103,21 @@ jobs: name: m3_lightmeter_bundle path: build/app/outputs/bundle/prodRelease/app-prod-release.aab + generate-release-notes: + name: Generate release notes + runs-on: ubuntu-latest + steps: + - name: Generate release notes + run: | + echo ${{ inputs.release-notes }} > whatsnew-en-US.md + perl -i -pe 's/\s{1}(-{1})/\n$1/g' whatsnew-en-US.md + + - name: Upload merged_native_libs.zip to artifacts + uses: actions/upload-artifact@v3 + with: + name: whatsnew-en-US + path: whatsnew-en-US.md + update-version-in-repo: name: Update repo version needs: [build] @@ -121,22 +144,20 @@ jobs: branch: ${{ github.ref_name }} unprotect_reviews: true - create-release: + create-github-release: name: Create Github release - needs: [build, update-version-in-repo] if: github.ref_name == 'main' + needs: [generate-release-notes, update-version-in-repo] runs-on: ubuntu-latest permissions: contents: write steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Download apk + - name: Download apk & release notes uses: actions/download-artifact@v3 with: - name: m3_lightmeter_apk + name: | + m3_lightmeter_apk + whatsnew-en-US - name: Rename apk run: mv app-prod-release.apk m3_lightmeter.apk @@ -146,8 +167,9 @@ jobs: artifacts: "m3_lightmeter.apk" skipIfReleaseExists: true tag: "v${{ github.event.inputs.version }}" + bodyFile: "whatsnew-en-US.md" - - name: Delete no longer used apk artifact + - name: Delete apk artifact uses: geekyeggo/delete-artifact@v2 with: name: m3_lightmeter_apk @@ -157,10 +179,6 @@ jobs: needs: [build] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - submodules: recursive - - name: Download app bundle uses: actions/download-artifact@v3 with: @@ -171,33 +189,71 @@ jobs: unzip app-prod-release.aab (cd base/lib && zip -r "$OLDPWD/merged_native_libs.zip" .) + - name: Upload merged native libs to artifacts + uses: actions/upload-artifact@v3 + with: + name: merged_native_libs + path: merged_native_libs.zip + + create-google-play-release: + name: Create Google Play release + if: github.ref_name == 'main' + needs: [generate-release-notes, extract-merged-native-libs] + runs-on: ubuntu-latest + steps: + - name: Download app bundle & merged native libs + uses: actions/download-artifact@v3 + with: + name: | + m3_lightmeter_bundle + merged_native_libs + whatsnew-en-US + + - name: Move release notes to a folder + run: | + mkdir whatsnew + mv whatsnew-en-US.md whatsnew + + - name: Create Google Play release + id: create-google-play-release-step + uses: r0adkll/upload-google-play@v1.1.1 + with: + serviceAccountJsonPlainText: ${{ secrets.GH_ACTIONS_SERVICE_ACCOUNT_JSON }} + packageName: com.vodemn.lightmeter + releaseFiles: app-prod-release.aab + track: production + status: draft + userFraction: 1.0 + debugSymbols: merged_native_libs.zip + whatsNewDirectory: whatsnew + + # https://docs.github.com/en/actions/learn-github-actions/expressions#failure-with-conditions - name: Zip app bundle and merged_native_libs + if: ${{ failure() && steps.create-google-play-release-step.conclusion == 'failure' }} run: zip m3_lightmeter_release.zip app-prod-release.aab merged_native_libs.zip - - name: Upload merged_native_libs.zip to artifacts + - name: Upload release zip to artifacts + if: ${{ failure() && steps.create-google-play-release-step.conclusion == 'failure' }} 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 + + - name: Delete app bundle & merged native libs artifacts + if: ${{ always() }} uses: geekyeggo/delete-artifact@v2 with: - name: m3_lightmeter_bundle + name: | + m3_lightmeter_bundle + merged_native_libs - # TODO: Automate Google Play releases creation - create-google-play-release: - if: false - name: Create Google Play release - needs: [build, extract-merged-native-libs] + cleanup: + name: Cleanup + if: ${{ always() }} + needs: [create-github-release, create-google-play-release] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - name: Delete release notes artifact + uses: geekyeggo/delete-artifact@v2 with: - submodules: recursive - - - name: Download app bundle - uses: actions/download-artifact@v3 - with: - name: m3_lightmeter_bundle + name: whatsnew-en-US