From df051c24b3e6053a3ffd330a92e28014b431276b Mon Sep 17 00:00:00 2001 From: Alex Tran Date: Fri, 5 Jun 2026 15:31:20 -0500 Subject: [PATCH] chore: apk build deployment --- .github/workflows/build-mobile.yml | 49 ++++++++++++++++++++++++++++++ mobile/android/app/build.gradle | 7 ++++- 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-mobile.yml b/.github/workflows/build-mobile.yml index 1a4243ecae..8b0a7370e9 100644 --- a/.github/workflows/build-mobile.yml +++ b/.github/workflows/build-mobile.yml @@ -73,6 +73,7 @@ jobs: needs: pre-job permissions: contents: read + deployments: write pull-requests: write if: ${{ github.actor != 'dependabot[bot]' && fromJSON(needs.pre-job.outputs.should_run).mobile == true }} runs-on: mich @@ -142,9 +143,13 @@ jobs: ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }} IS_MAIN: ${{ github.ref == 'refs/heads/main' }} + IS_MAIN_DEPLOYMENT: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} PR_NUMBER: ${{ github.event.pull_request.number }} run: | if [[ $IS_MAIN == 'true' ]]; then + if [[ $IS_MAIN_DEPLOYMENT == 'true' ]]; then + export ANDROID_APPLICATION_ID=app.immich.main + fi flutter build apk --release flutter build apk --release --split-per-abi --target-platform android-arm,android-arm64,android-x64 else @@ -158,6 +163,50 @@ jobs: name: release-apk-signed path: mobile/build/app/outputs/flutter-apk/*.apk + - name: Publish Android APK deployment + if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork) }} + uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0 + env: + APK_URL: ${{ steps.upload-apk.outputs.artifact-url }} + with: + script: | + const artifactUrl = process.env.APK_URL; + const isPullRequest = context.eventName === "pull_request"; + const pullNumber = context.payload.pull_request?.number; + const environment = isPullRequest ? `mobile-android-apk-pr-${pullNumber}` : "mobile-android-apk"; + const description = isPullRequest + ? `Signed Android APK for PR #${pullNumber}` + : "Latest signed Android APK from main"; + const ref = isPullRequest ? context.payload.pull_request.head.sha : context.sha; + + if (!artifactUrl) { + throw new Error("The Android APK artifact URL was not generated"); + } + + const runUrl = `${process.env.GITHUB_SERVER_URL}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`; + const deployment = await github.rest.repos.createDeployment({ + owner: context.repo.owner, + repo: context.repo.repo, + ref, + environment, + description, + auto_merge: false, + required_contexts: [], + production_environment: false, + transient_environment: isPullRequest, + }); + + await github.rest.repos.createDeploymentStatus({ + owner: context.repo.owner, + repo: context.repo.repo, + deployment_id: deployment.data.id, + state: "success", + environment, + environment_url: artifactUrl, + log_url: runUrl, + description: "Signed APK artifact is ready for testing", + }); + - name: Comment APK download link on PR if: ${{ github.event_name == 'pull_request' && !github.event.pull_request.head.repo.fork }} uses: immich-app/devtools/actions/sticky-comment@0135acd12ad9f3369b94a2aa3c0ae8c835a4e926 # sticky-comment-action-v1.0.0 diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index 1f22eeaf52..e447792d18 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -13,6 +13,11 @@ if (keystorePropertiesFile.exists()) { keystorePropertiesFile.withInputStream { keystoreProperties.load(it) } } +def androidApplicationId = System.getenv("ANDROID_APPLICATION_ID")?.trim() +if (!androidApplicationId) { + androidApplicationId = "app.alextran.immich" +} + android { compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion @@ -37,7 +42,7 @@ android { } defaultConfig { - applicationId "app.alextran.immich" + applicationId androidApplicationId minSdk = 26 targetSdk = flutter.targetSdkVersion versionCode flutter.versionCode