From 43e82857615ce4afac87dcc8b50c6c3eb65cbc80 Mon Sep 17 00:00:00 2001 From: Florian Buenzli Date: Tue, 12 May 2026 22:47:04 +0200 Subject: [PATCH 1/4] split alpaka job into build and upload --- .../workflows/android_build_alpaka_upload.yml | 80 +++++++++++++++++-- .../workflows/android_build_store_upload.yml | 11 ++- 2 files changed, 77 insertions(+), 14 deletions(-) diff --git a/.github/workflows/android_build_alpaka_upload.yml b/.github/workflows/android_build_alpaka_upload.yml index 296877d..3cceec7 100644 --- a/.github/workflows/android_build_alpaka_upload.yml +++ b/.github/workflows/android_build_alpaka_upload.yml @@ -99,9 +99,14 @@ jobs: working-directory: ${{ inputs.working-directory }} timeout-minutes: 60 concurrency: - # Cancel any previous runs that have not yet finished for the configured concurrency group - group: ${{ inputs.concurrency-group }} + group: ${{ inputs.concurrency-group }}-build cancel-in-progress: true + outputs: + flavor_capitalized: ${{ steps.setup.outputs.flavor_capitalized }} + app_module_path: ${{ steps.setup.outputs.app_module_path }} + build_batch: ${{ steps.setup.outputs.build_batch }} + build_id: ${{ steps.setup.outputs.build_id }} + build_number: ${{ steps.setup.outputs.build_number }} steps: - name: Setup Android app build environment id: setup @@ -140,14 +145,13 @@ jobs: compression-level: 0 path: ${{ inputs.working-directory }}/build_id.txt - # Build and upload app to Alpaka - name: Build app shell: bash run: | if [ -n "${{ inputs.working-directory-suffix }}" ]; then cd "${{ inputs.working-directory-suffix }}" fi - ./gradlew :${{ inputs.app-module }}:clean :${{ inputs.app-module }}:assembleAndPublishToAlpaka${{ steps.setup.outputs.flavor_capitalized }}Release \ + ./gradlew :${{ inputs.app-module }}:clean :${{ inputs.app-module }}:assemble${{ steps.setup.outputs.flavor_capitalized }}Release \ ${{ github.run_attempt > 1 && '--stacktrace --info' || '' }} \ -PubiqueMavenUrl=${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} \ -PubiqueMavenUser=${{ secrets.UB_ARTIFACTORY_USER }} \ @@ -162,13 +166,73 @@ jobs: env: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_LOG_LEVEL: ${{ github.run_attempt > 1 && 'debug' || inputs.sentry-log-level }} - ALPAKA_UPLOAD_KEY: ${{ secrets.ALPAKA_UPLOAD_KEY }} + + - name: Stash build output + uses: actions/upload-artifact@v7.0.1 + with: + name: ${{ inputs.flavor }}_app_outputs + path: | + ${{ steps.setup.outputs.app_module_path }}/build/outputs/** + !${{ steps.setup.outputs.app_module_path }}/build/outputs/**/logs/** + compression-level: 6 + retention-days: 1 + if-no-files-found: error + + upload: + name: Upload flavor ${{ inputs.flavor }} to Alpaka + needs: build + runs-on: ${{ fromJSON(inputs.runs-on) }} + container: + image: cimg/android:${{ inputs.android-image-version }} + defaults: + run: + working-directory: ${{ inputs.working-directory }} + timeout-minutes: 30 + concurrency: + group: ${{ inputs.concurrency-group }}-upload + cancel-in-progress: true + steps: + - name: Setup Android app build environment + id: setup + uses: UbiqueInnovation/actions-android/.github/actions/android-app-setup@v2 + with: + checkout-token: ${{ secrets.ANDROID_JENKINS_PAT }} + use-git-lfs: ${{ inputs.use-git-lfs }} + jdk: ${{ inputs.jdk }} + setup-rust: false + flavor: ${{ inputs.flavor }} + app-module: ${{ inputs.app-module }} + maven-proxy-url: ${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} + maven-proxy-username: ${{ secrets.UB_ARTIFACTORY_USER }} + maven-proxy-password: ${{ secrets.UB_ARTIFACTORY_PASSWORD }} + gradle-cache-job-id: '${{ inputs.jdk }}-${{ inputs.app-module }}' + + - name: Unstash build output + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.flavor }}_app_outputs + path: ${{ needs.build.outputs.app_module_path }}/build/outputs/ # Write Alpaka build info to GitHub job summary - name: Alpaka Build Summary run: | echo '| **Alpaka Build Info** | |' >> $GITHUB_STEP_SUMMARY echo '|---|---|' >> $GITHUB_STEP_SUMMARY - echo '| Build Batch | ${{ steps.setup.outputs.build_batch }} |' >> $GITHUB_STEP_SUMMARY - echo '| Build ID | ${{ steps.setup.outputs.build_id }} |' >> $GITHUB_STEP_SUMMARY - echo '| Build Number | ${{ steps.setup.outputs.build_number }} |' >> $GITHUB_STEP_SUMMARY + echo '| Build Batch | ${{ needs.build.outputs.build_batch }} |' >> $GITHUB_STEP_SUMMARY + echo '| Build ID | ${{ needs.build.outputs.build_id }} |' >> $GITHUB_STEP_SUMMARY + echo '| Build Number | ${{ needs.build.outputs.build_number }} |' >> $GITHUB_STEP_SUMMARY + + - name: Upload app to Alpaka + shell: bash + run: | + if [ -n "${{ inputs.working-directory-suffix }}" ]; then + cd "${{ inputs.working-directory-suffix }}" + fi + ./gradlew :${{ inputs.app-module }}:publishToAlpaka${{ needs.build.outputs.flavor_capitalized }}Release \ + ${{ github.run_attempt > 1 && '--stacktrace --info' || '' }} \ + -PubiqueMavenUrl=${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} \ + -PubiqueMavenUser=${{ secrets.UB_ARTIFACTORY_USER }} \ + -PubiqueMavenPass=${{ secrets.UB_ARTIFACTORY_PASSWORD }} \ + ${{ secrets.ADDITIONAL_GRADLE_PROPS }} + env: + ALPAKA_UPLOAD_KEY: ${{ secrets.ALPAKA_UPLOAD_KEY }} diff --git a/.github/workflows/android_build_store_upload.yml b/.github/workflows/android_build_store_upload.yml index 2d056a8..4bfab7f 100644 --- a/.github/workflows/android_build_store_upload.yml +++ b/.github/workflows/android_build_store_upload.yml @@ -121,12 +121,14 @@ jobs: cp "${{ steps.setup.outputs.app_module_path }}"/build/outputs/bundle/${{ inputs.flavor }}ReleaseUpload/*.aab "$AAB_STAGING_DIR" # Upload the .aab artifact so the upload job (and humans) can download it - - name: Save app artifact + - name: Stash app bundle uses: actions/upload-artifact@v7.0.1 with: name: app-bundle path: ${{ env.AAB_STAGING_DIR }}/*.aab - compression-level: 0 + compression-level: 1 + retention-days: 7 + if-no-files-found: error upload: name: Upload flavor ${{ inputs.flavor }} to Play Store @@ -152,7 +154,7 @@ jobs: maven-proxy-password: ${{ secrets.UB_ARTIFACTORY_PASSWORD }} gradle-cache-job-id: '${{ inputs.jdk }}-${{ inputs.app-module }}' - - name: Download app bundle + - name: Unstash app bundle uses: actions/download-artifact@v4 with: name: app-bundle @@ -166,9 +168,6 @@ jobs: -PubiqueMavenUrl=${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} \ -PubiqueMavenUser=${{ secrets.UB_ARTIFACTORY_USER }} \ -PubiqueMavenPass=${{ secrets.UB_ARTIFACTORY_PASSWORD }} \ - -PubiquePoEditorAPIKey=${{ secrets.UBIQUE_POEDITOR_API_KEY }} \ ${{ secrets.ADDITIONAL_GRADLE_PROPS }} env: ANDROID_PUBLISHER_CREDENTIALS: ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - SENTRY_LOG_LEVEL: ${{ github.run_attempt > 1 && 'debug' || inputs.sentry-log-level }} From a525cf3885ec5249fdc0c29e6a6f70128b07e3b6 Mon Sep 17 00:00:00 2001 From: Florian Buenzli Date: Thu, 14 May 2026 13:50:50 +0200 Subject: [PATCH 2/4] shortened redundant job names --- .github/workflows/android_build_alpaka_upload.yml | 4 ++-- .github/workflows/android_build_store_upload.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/android_build_alpaka_upload.yml b/.github/workflows/android_build_alpaka_upload.yml index 3cceec7..b867aeb 100644 --- a/.github/workflows/android_build_alpaka_upload.yml +++ b/.github/workflows/android_build_alpaka_upload.yml @@ -90,7 +90,7 @@ on: jobs: build: - name: Build flavor ${{ inputs.flavor }} + name: Build runs-on: ${{ fromJSON(inputs.runs-on) }} container: image: cimg/android:${{ inputs.android-image-version }} @@ -179,7 +179,7 @@ jobs: if-no-files-found: error upload: - name: Upload flavor ${{ inputs.flavor }} to Alpaka + name: Upload needs: build runs-on: ${{ fromJSON(inputs.runs-on) }} container: diff --git a/.github/workflows/android_build_store_upload.yml b/.github/workflows/android_build_store_upload.yml index 4bfab7f..888614e 100644 --- a/.github/workflows/android_build_store_upload.yml +++ b/.github/workflows/android_build_store_upload.yml @@ -63,7 +63,7 @@ on: jobs: build: - name: Build flavor ${{ inputs.flavor }} + name: Build runs-on: ${{ fromJSON(inputs.runs-on) }} container: image: cimg/android:${{ inputs.android-image-version }} @@ -131,7 +131,7 @@ jobs: if-no-files-found: error upload: - name: Upload flavor ${{ inputs.flavor }} to Play Store + name: Upload needs: build runs-on: ${{ fromJSON(inputs.runs-on) }} container: From a7a4e42d29643cfcacae302ab149beeff1ae0da9 Mon Sep 17 00:00:00 2001 From: Florian Buenzli Date: Thu, 14 May 2026 15:03:13 +0200 Subject: [PATCH 3/4] pre-build script for upload, removed working dir suffix input --- .../workflows/android_build_alpaka_upload.yml | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/.github/workflows/android_build_alpaka_upload.yml b/.github/workflows/android_build_alpaka_upload.yml index b867aeb..f4d9eae 100644 --- a/.github/workflows/android_build_alpaka_upload.yml +++ b/.github/workflows/android_build_alpaka_upload.yml @@ -20,11 +20,6 @@ on: default: './' required: false description: 'The working directory of the script, for projects where the gradle project is not in the root folder. Must end with a slash.' - working-directory-suffix: - type: string - default: '' - required: false - description: 'Suffix to the working directory of the script, only used for gradle build. Must end with a slash or be empty.' setup-rust: required: false default: false @@ -148,9 +143,6 @@ jobs: - name: Build app shell: bash run: | - if [ -n "${{ inputs.working-directory-suffix }}" ]; then - cd "${{ inputs.working-directory-suffix }}" - fi ./gradlew :${{ inputs.app-module }}:clean :${{ inputs.app-module }}:assemble${{ steps.setup.outputs.flavor_capitalized }}Release \ ${{ github.run_attempt > 1 && '--stacktrace --info' || '' }} \ -PubiqueMavenUrl=${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} \ @@ -207,6 +199,18 @@ jobs: maven-proxy-password: ${{ secrets.UB_ARTIFACTORY_PASSWORD }} gradle-cache-job-id: '${{ inputs.jdk }}-${{ inputs.app-module }}' + - name: Setup SSH + env: + SSH_KEY: ${{ secrets.SSH_KEY }} + if: ${{ env.SSH_KEY != '' }} + uses: UbiqueInnovation/actions-android/.github/actions/ssh-setup@v2 + with: + ssh-private-key: ${{ secrets.SSH_KEY }} + + - name: Pre Build Script + if: ${{ inputs.pre-build-script }} + run: ${{ inputs.pre-build-script }} + - name: Unstash build output uses: actions/download-artifact@v4 with: @@ -225,9 +229,6 @@ jobs: - name: Upload app to Alpaka shell: bash run: | - if [ -n "${{ inputs.working-directory-suffix }}" ]; then - cd "${{ inputs.working-directory-suffix }}" - fi ./gradlew :${{ inputs.app-module }}:publishToAlpaka${{ needs.build.outputs.flavor_capitalized }}Release \ ${{ github.run_attempt > 1 && '--stacktrace --info' || '' }} \ -PubiqueMavenUrl=${{ secrets.UB_ARTIFACTORY_URL_ANDROID }} \ From 2305ab22cfc13f7af3070f2fd9b2bb33218075f3 Mon Sep 17 00:00:00 2001 From: Florian Buenzli Date: Thu, 14 May 2026 15:55:48 +0200 Subject: [PATCH 4/4] fixed working directory --- .github/workflows/android_build_alpaka_upload.yml | 6 +++--- .github/workflows/android_build_store_upload.yml | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/.github/workflows/android_build_alpaka_upload.yml b/.github/workflows/android_build_alpaka_upload.yml index f4d9eae..99dcbd0 100644 --- a/.github/workflows/android_build_alpaka_upload.yml +++ b/.github/workflows/android_build_alpaka_upload.yml @@ -164,8 +164,8 @@ jobs: with: name: ${{ inputs.flavor }}_app_outputs path: | - ${{ steps.setup.outputs.app_module_path }}/build/outputs/** - !${{ steps.setup.outputs.app_module_path }}/build/outputs/**/logs/** + ${{ inputs.working-directory }}${{ steps.setup.outputs.app_module_path }}/build/outputs/** + !${{ inputs.working-directory }}${{ steps.setup.outputs.app_module_path }}/build/outputs/**/logs/** compression-level: 6 retention-days: 1 if-no-files-found: error @@ -215,7 +215,7 @@ jobs: uses: actions/download-artifact@v4 with: name: ${{ inputs.flavor }}_app_outputs - path: ${{ needs.build.outputs.app_module_path }}/build/outputs/ + path: ${{ inputs.working-directory }}${{ needs.build.outputs.app_module_path }}/build/outputs/ # Write Alpaka build info to GitHub job summary - name: Alpaka Build Summary diff --git a/.github/workflows/android_build_store_upload.yml b/.github/workflows/android_build_store_upload.yml index 888614e..273c638 100644 --- a/.github/workflows/android_build_store_upload.yml +++ b/.github/workflows/android_build_store_upload.yml @@ -34,6 +34,11 @@ on: required: false default: 'warn' description: 'The Sentry log level to use. Default is "warn". Other options are "trace", "debug", "info" and "error"' + working-directory: + type: string + default: './' + required: false + description: 'The working directory of the script, for projects where the gradle project is not in the root folder. Must end with a slash.' use-git-lfs: type: boolean required: false @@ -67,6 +72,9 @@ jobs: runs-on: ${{ fromJSON(inputs.runs-on) }} container: image: cimg/android:${{ inputs.android-image-version }} + defaults: + run: + working-directory: ${{ inputs.working-directory }} timeout-minutes: 60 concurrency: # Cancel any previous runs that have not yet finished for this workflow, git ref and app module (for apps that have multiple apps in the same workflow) @@ -125,7 +133,7 @@ jobs: uses: actions/upload-artifact@v7.0.1 with: name: app-bundle - path: ${{ env.AAB_STAGING_DIR }}/*.aab + path: ${{ inputs.working-directory }}${{ env.AAB_STAGING_DIR }}/*.aab compression-level: 1 retention-days: 7 if-no-files-found: error @@ -136,6 +144,9 @@ jobs: runs-on: ${{ fromJSON(inputs.runs-on) }} container: image: cimg/android:${{ inputs.android-image-version }} + defaults: + run: + working-directory: ${{ inputs.working-directory }} timeout-minutes: 30 env: AAB_STAGING_DIR: .tmp/publishing_aab @@ -158,7 +169,7 @@ jobs: uses: actions/download-artifact@v4 with: name: app-bundle - path: ${{ env.AAB_STAGING_DIR }} + path: ${{ inputs.working-directory }}${{ env.AAB_STAGING_DIR }} - name: Upload to Play Store run: |