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
This commit is contained in:
Vadim 2023-08-09 12:24:12 +02:00 committed by GitHub
parent d91441bac9
commit b9412c7441
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3,6 +3,11 @@
# separate terms of service, privacy policy, and support # separate terms of service, privacy policy, and support
# documentation. # 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 name: Create new release
run-name: Release v${{ inputs.version }} run-name: Release v${{ inputs.version }}
@ -14,6 +19,10 @@ on:
description: "Version" description: "Version"
required: true required: true
type: string type: string
release-notes:
description: "Release notes"
required: true
type: string
env: env:
BUILD_ARGS: --release --flavor prod --dart-define cameraPreviewAspectRatio=240/320 -t lib/main_prod.dart BUILD_ARGS: --release --flavor prod --dart-define cameraPreviewAspectRatio=240/320 -t lib/main_prod.dart
@ -23,7 +32,6 @@ jobs:
name: Build .apk & .aab name: Build .apk & .aab
runs-on: macos-11 runs-on: macos-11
timeout-minutes: 15 timeout-minutes: 15
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with: with:
@ -95,6 +103,21 @@ jobs:
name: m3_lightmeter_bundle name: m3_lightmeter_bundle
path: build/app/outputs/bundle/prodRelease/app-prod-release.aab 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: update-version-in-repo:
name: Update repo version name: Update repo version
needs: [build] needs: [build]
@ -121,22 +144,20 @@ jobs:
branch: ${{ github.ref_name }} branch: ${{ github.ref_name }}
unprotect_reviews: true unprotect_reviews: true
create-release: create-github-release:
name: Create Github release name: Create Github release
needs: [build, update-version-in-repo]
if: github.ref_name == 'main' if: github.ref_name == 'main'
needs: [generate-release-notes, update-version-in-repo]
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: write contents: write
steps: steps:
- uses: actions/checkout@v3 - name: Download apk & release notes
with:
submodules: recursive
- name: Download apk
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
name: m3_lightmeter_apk name: |
m3_lightmeter_apk
whatsnew-en-US
- name: Rename apk - name: Rename apk
run: mv app-prod-release.apk m3_lightmeter.apk run: mv app-prod-release.apk m3_lightmeter.apk
@ -146,8 +167,9 @@ jobs:
artifacts: "m3_lightmeter.apk" artifacts: "m3_lightmeter.apk"
skipIfReleaseExists: true skipIfReleaseExists: true
tag: "v${{ github.event.inputs.version }}" 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 uses: geekyeggo/delete-artifact@v2
with: with:
name: m3_lightmeter_apk name: m3_lightmeter_apk
@ -157,10 +179,6 @@ jobs:
needs: [build] needs: [build]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3
with:
submodules: recursive
- name: Download app bundle - name: Download app bundle
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
@ -171,33 +189,71 @@ jobs:
unzip app-prod-release.aab unzip app-prod-release.aab
(cd base/lib && zip -r "$OLDPWD/merged_native_libs.zip" .) (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 - 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 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 uses: actions/upload-artifact@v3
with: with:
name: m3_lightmeter_release name: m3_lightmeter_release
path: m3_lightmeter_release.zip path: m3_lightmeter_release.zip
# TODO: this should be moved to `create-google-play-release` step when it is implemented - name: Delete app bundle & merged native libs artifacts
- name: Delete no longer used app bundle artifact if: ${{ always() }}
uses: geekyeggo/delete-artifact@v2 uses: geekyeggo/delete-artifact@v2
with: with:
name: m3_lightmeter_bundle name: |
m3_lightmeter_bundle
merged_native_libs
# TODO: Automate Google Play releases creation cleanup:
create-google-play-release: name: Cleanup
if: false if: ${{ always() }}
name: Create Google Play release needs: [create-github-release, create-google-play-release]
needs: [build, extract-merged-native-libs]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - name: Delete release notes artifact
uses: geekyeggo/delete-artifact@v2
with: with:
submodules: recursive name: whatsnew-en-US
- name: Download app bundle
uses: actions/download-artifact@v3
with:
name: m3_lightmeter_bundle