From ad2f9710fd2fffb465fc0a829536157ee85f3912 Mon Sep 17 00:00:00 2001 From: Hector Date: Mon, 21 Oct 2024 14:46:34 +0100 Subject: [PATCH] Improve workflows --- .github/workflows/android_build.yml | 73 +++++++++++++ .github/workflows/android_emerge_main.yml | 37 +++++++ ...merge_upload.yml => android_emerge_pr.yml} | 10 +- .github/workflows/android_emerge_release.yml | 36 +++++++ .github/workflows/android_release_build.yml | 100 ------------------ 5 files changed, 152 insertions(+), 104 deletions(-) create mode 100644 .github/workflows/android_build.yml create mode 100644 .github/workflows/android_emerge_main.yml rename .github/workflows/{android_emerge_upload.yml => android_emerge_pr.yml} (88%) create mode 100644 .github/workflows/android_emerge_release.yml delete mode 100644 .github/workflows/android_release_build.yml diff --git a/.github/workflows/android_build.yml b/.github/workflows/android_build.yml new file mode 100644 index 00000000..86509333 --- /dev/null +++ b/.github/workflows/android_build.yml @@ -0,0 +1,73 @@ +name: Android Build + +on: + workflow_call: + inputs: + config-path: + required: true + type: string + secrets: + personal_access_token: + required: true + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: ./android + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up JDK + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'adopt' + + - name: Install Bundletool + run: | + wget https://github.com/google/bundletool/releases/download/1.17.0/bundletool-all-1.17.0.jar -O /usr/local/bin/bundletool.jar + + - name: Decode Keystore + env: + ENCODED_KEYSTORE: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} + DECODED_KEYSTORE_PATH: ${{ secrets.ANDROID_RELEASE_KEYSTORE_PATH }} + run: | + echo $ENCODED_KEYSTORE > keystore_base64.txt + base64 -d keystore_base64.txt > ./app/$DECODED_KEYSTORE_PATH + + - name: Build AAB + env: + RUNNING_ENV: release_workflow + DECODED_KEYSTORE_PATH: ${{ secrets.ANDROID_RELEASE_KEYSTORE_PATH }} + RELEASE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEY_ALIAS }} + RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }} + RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }} + EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} + REAPER_API_KEY: ${{ secrets.REAPER_API_KEY }} + ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + run: ./gradlew :app:bundleRelease + + - name: Build universal .apk + run: | + java -jar /usr/local/bin/bundletool.jar build-apks \ + --mode=universal \ + --bundle=./app/build/outputs/bundle/release/app-release.aab \ + --output=./app/build/outputs/bundle/release/app-release.apks \ + --ks=./app/$DECODED_KEYSTORE_PATH \ + --ks-pass=pass:${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }} \ + --ks-key-alias=${{ secrets.ANDROID_RELEASE_KEY_ALIAS }} \ + --key-pass=${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }} + cd ${{ github.workspace }} && unzip ./app/build/outputs/bundle/release/app-release.apks + + - name: Upload .apk + uses: actions/upload-artifact@v3 + with: + path: ${{ github.workspace }}/universal.apk + name: hackernews-universal-${{github.sha}}.apk + if-no-files-found: error diff --git a/.github/workflows/android_emerge_main.yml b/.github/workflows/android_emerge_main.yml new file mode 100644 index 00000000..66bd99db --- /dev/null +++ b/.github/workflows/android_emerge_main.yml @@ -0,0 +1,37 @@ +name: Emerge Android (on main commit) + +on: + push: + branches: [ main ] + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: ./android + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'adopt' + + - name: Emerge analysis + run: ./gradlew :app:emergeUploadReleaseAab + env: + EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} + ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}} + PR_SHA: ${{ github.event.after }} + PR_BASE_SHA: ${{ github.event.before }} + + + + + diff --git a/.github/workflows/android_emerge_upload.yml b/.github/workflows/android_emerge_pr.yml similarity index 88% rename from .github/workflows/android_emerge_upload.yml rename to .github/workflows/android_emerge_pr.yml index 81e57a15..c388a409 100644 --- a/.github/workflows/android_emerge_upload.yml +++ b/.github/workflows/android_emerge_pr.yml @@ -1,8 +1,6 @@ -name: Emerge Android size analysis +name: Emerge Android (on pull request) on: - push: - branches: [ main ] pull_request: branches: [ main ] paths: [ android/** ] @@ -19,15 +17,19 @@ jobs: - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} + - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' - - name: Emerge size analysis + + - name: Emerge analysis run: ./gradlew :app:emergeUploadReleaseAab env: EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}} PR_SHA: ${{ github.event.pull_request.head.sha }} PR_BASE_SHA: ${{ github.event.pull_request.base.sha }} + + diff --git a/.github/workflows/android_emerge_release.yml b/.github/workflows/android_emerge_release.yml new file mode 100644 index 00000000..85e4f4d7 --- /dev/null +++ b/.github/workflows/android_emerge_release.yml @@ -0,0 +1,36 @@ +name: Emerge Android (on release) + +on: + release: + types: [ draft ] + +jobs: + build: + runs-on: ubuntu-latest + + defaults: + run: + working-directory: ./android + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'adopt' + + - name: Emerge analysis + run: ./gradlew :app:emergeUploadReleaseAab + env: + EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} + ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}} + PR_SHA: ${{ github.event.pull_request.head.sha }} # TODO: fix + PR_BASE_SHA: ${{ github.event.pull_request.base.sha }} # TODO: fix + + + + diff --git a/.github/workflows/android_release_build.yml b/.github/workflows/android_release_build.yml deleted file mode 100644 index f929f7fe..00000000 --- a/.github/workflows/android_release_build.yml +++ /dev/null @@ -1,100 +0,0 @@ -name: Android Release Build - -on: - push: - branches: [ main ] - tags: [ '*' ] - pull_request: - branches: [ main ] - paths: [ android/** ] - release: - types: [ published ] - -jobs: - build: - runs-on: ubuntu-latest - - defaults: - run: - working-directory: ./android - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Set up JDK - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'adopt' - - - name: Decode Keystore - env: - ENCODED_KEYSTORE: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} - DECODED_KEYSTORE_PATH: ${{ secrets.ANDROID_RELEASE_KEYSTORE_PATH }} - run: | - echo $ENCODED_KEYSTORE > keystore_base64.txt - base64 -d keystore_base64.txt > ./app/$DECODED_KEYSTORE_PATH - - - name: Build AAB - env: - RUNNING_ENV: release_workflow - DECODED_KEYSTORE_PATH: ${{ secrets.ANDROID_RELEASE_KEYSTORE_PATH }} - RELEASE_KEY_ALIAS: ${{ secrets.ANDROID_RELEASE_KEY_ALIAS }} - RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }} - RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }} - EMERGE_API_TOKEN: ${{ secrets.EMERGE_API_KEY }} - REAPER_API_KEY: ${{ secrets.REAPER_API_KEY }} - ANDROID_DISTRIBUTION_API_KEY: ${{ secrets.ANDROID_DISTRIBUTION_API_KEY}} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - run: ./gradlew :app:bundleRelease - - - name: Debug path issues - run: find . - - - name: Convert AAB to APK - uses: mukeshsolanki/bundletool-action@v1.0.2 - with: - aabFile: android/app/build/outputs/bundle/release/app-release.aab - base64Keystore: ${{ secrets.ANDROID_RELEASE_KEYSTORE_BASE64 }} - keystoreAlias: ${{ secrets.ANDROID_RELEASE_KEY_ALIAS }} - keyPassword: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }} - keystorePassword: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }} - bundletoolVersion: '1.9.0' - - - uses: actions/upload-artifact@v3 - with: - name: release-apk - path: ${{ steps.convert_aab.outputs.apkPath }} - - # All the below should only run if we are doing a release. - - - name: Add APK to GitHub release - uses: softprops/action-gh-release@v2 - if: ${{ startsWith(github.event.release.tag_name, 'android-') }} - with: - name: ${{ github.ref_name }} - fail_on_unmatched_files: true - # see https://github.com/softprops/action-gh-release/issues/158 - files: | - ${{ steps.convert_aab.outputs.apkPath }} - - - name: Configure AWS Credentials - uses: aws-actions/configure-aws-credentials@v4 - if: ${{ startsWith(github.event.release.tag_name, 'android-') }} - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: us-west-1 - - - name: Extract version from tag - if: ${{ startsWith(github.event.release.tag_name, 'android-') }} - run: echo "VERSION_NAME=$(echo ${{ github.event.release.tag_name }} | sed 's/android-//')" >> $GITHUB_ENV - - - name: Upload AAB to S3 - if: ${{ startsWith(github.event.release.tag_name, 'android-') }} - env: - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - run: | - aws s3 cp app/build/outputs/bundle/release/app-release.aab s3://hn-artifacts/app-release-${{ env.VERSION_NAME }}.aab