You've already forked element-x-android
mirror of
https://github.com/element-hq/element-x-android.git
synced 2026-10-23 18:49:00 +03:00
The GitHub cache is limited to 10 GB per repository. About 15 jobs were writing the Gradle cache on develop, each adding up to several GB (dependencies, transforms and build cache), so the cache was always at the limit and entries were evicted. A job could then restore a Gradle User Home without its matching dependencies entry, which broke the nightly build on all the PRs. Only the debug build job and the unit tests job now write the cache on develop. All the other jobs only read it. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
126 lines
6.2 KiB
YAML
126 lines
6.2 KiB
YAML
name: APK Build
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
pull_request:
|
|
merge_group:
|
|
push:
|
|
branches: [ develop ]
|
|
|
|
permissions: {}
|
|
|
|
# Enrich gradle.properties for CI/CD
|
|
env:
|
|
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx8g -XX:MaxMetaspaceSize=512m -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -Dkotlin.daemon.jvm.options=-Xmx4g
|
|
CI_GRADLE_ARG_PROPERTIES: --stacktrace -Dsonar.gradle.skipCompile=true --no-configuration-cache
|
|
|
|
jobs:
|
|
build:
|
|
name: Build APKs
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
# For NejcZdovc/comment-pr
|
|
pull-requests: write
|
|
strategy:
|
|
matrix:
|
|
variant: [debug, release, nightly]
|
|
fail-fast: false
|
|
# Allow all jobs on develop. Just one per PR.
|
|
concurrency:
|
|
group: ${{ github.ref == 'refs/heads/develop' && format('build-develop-{0}-{1}', matrix.variant, github.sha) || format('build-{0}-{1}', matrix.variant, github.ref) }}
|
|
cancel-in-progress: true
|
|
steps:
|
|
- name: Free Disk Space (Ubuntu)
|
|
uses: jlumbroso/free-disk-space@54081f138730dfa15788a46383842cd2f914a1be
|
|
with:
|
|
# This might remove tools that are actually needed, if set to "true" but frees about 6 GB
|
|
tool-cache: true
|
|
# All of these default to true, but we should only need the 'android' one (and maybe swap-storage?)
|
|
android: false
|
|
dotnet: true
|
|
haskell: true
|
|
# This takes way too long to run (~2 minutes) and it saves only ~5.5GB
|
|
large-packages: false
|
|
docker-images: true
|
|
swap-storage: false
|
|
|
|
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
with:
|
|
# Ensure we are building the branch and not the branch after being merged on develop
|
|
# https://github.com/actions/checkout/issues/881
|
|
ref: ${{ github.event_name == 'pull_request' && github.event.pull_request.head.sha || github.ref }}
|
|
persist-credentials: false
|
|
- name: Use JDK 21
|
|
uses: actions/setup-java@de7274f081f381c8f8158605e0321c36c376e2e6 # v6.0.1
|
|
with:
|
|
distribution: 'temurin' # See 'Supported distributions' for available options
|
|
java-version: '21'
|
|
- name: Configure gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
with:
|
|
# The GitHub cache is limited to 10 GB per repository, and each job writing the cache adds several GB
|
|
# (dependencies, transforms and build cache), so older entries get evicted and jobs can restore an incomplete cache.
|
|
# To stay under the limit, only this job (debug variant) and the unit tests job (tests.yml) write the cache on develop.
|
|
# All the other jobs only read it.
|
|
cache-read-only: ${{ github.ref != 'refs/heads/develop' || matrix.variant != 'debug' }}
|
|
- name: Assemble debug APKs
|
|
if: ${{ matrix.variant == 'debug' }}
|
|
env:
|
|
ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }}
|
|
ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }}
|
|
ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }}
|
|
ELEMENT_ANDROID_SENTRY_DSN: ${{ secrets.ELEMENT_ANDROID_SENTRY_DSN }}
|
|
ELEMENT_SDK_SENTRY_DSN: ${{ secrets.ELEMENT_SDK_SENTRY_DSN }}
|
|
ELEMENT_CALL_SENTRY_DSN: ${{ secrets.ELEMENT_CALL_SENTRY_DSN }}
|
|
ELEMENT_CALL_POSTHOG_API_HOST: ${{ secrets.ELEMENT_CALL_POSTHOG_API_HOST }}
|
|
ELEMENT_CALL_POSTHOG_API_KEY: ${{ secrets.ELEMENT_CALL_POSTHOG_API_KEY }}
|
|
ELEMENT_CALL_RAGESHAKE_URL: ${{ secrets.ELEMENT_CALL_RAGESHAKE_URL }}
|
|
run: ./gradlew :app:assembleGplayDebug app:assembleFDroidDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
|
|
- name: Upload debug APKs
|
|
if: ${{ matrix.variant == 'debug' }}
|
|
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
with:
|
|
name: elementx-debug
|
|
path: |
|
|
app/build/outputs/apk/gplay/debug/*-universal-debug.apk
|
|
app/build/outputs/apk/fdroid/debug/*-universal-debug.apk
|
|
- uses: rnkdsh/action-upload-diawi@76778fcd1f9f589efaaa62f63d5f03430bbb1306 # v1.5.13
|
|
id: diawi
|
|
# Do not fail the whole build if Diawi upload fails
|
|
continue-on-error: true
|
|
env:
|
|
token: ${{ secrets.DIAWI_TOKEN }}
|
|
if: ${{ matrix.variant == 'debug' && github.event_name == 'pull_request' && env.token != '' }}
|
|
with:
|
|
token: ${{ env.token }}
|
|
file: app/build/outputs/apk/gplay/debug/app-gplay-arm64-v8a-debug.apk
|
|
- name: Add or update PR comment with QR Code to download APK.
|
|
if: ${{ matrix.variant == 'debug' && github.event_name == 'pull_request' && steps.diawi.conclusion == 'success' }}
|
|
uses: NejcZdovc/comment-pr@a423635d183a8259308e80593c96fecf31539c26 # v2.1.0
|
|
with:
|
|
message: |
|
|
:iphone: Scan the QR code below to install the build (arm64 only) for this PR.
|
|

|
|
If you can't scan the QR code you can install the build via this link: ${{ steps.diawi.outputs['url'] }}
|
|
# Enables to identify and update existing Ad-hoc release message on new commit in the PR
|
|
identifier: "GITHUB_COMMENT_QR_CODE"
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
- name: Compile release sources
|
|
if: ${{ matrix.variant == 'release' }}
|
|
run: |
|
|
./gradlew assembleGplayRelease -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
|
|
./gradlew bundleGplayRelease -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
|
|
- name: Run aapt dump
|
|
if: ${{ matrix.variant == 'release' }}
|
|
run: |
|
|
$ANDROID_HOME/build-tools/37.0.0/aapt dump badging \
|
|
./app/build/outputs/apk/gplay/release/app-gplay-universal-release.apk \
|
|
> /tmp/currentAaptDump.txt
|
|
- name: Check manifest has not changed
|
|
if: ${{ matrix.variant == 'release' }}
|
|
run: diff /tmp/currentAaptDump.txt ./tools/manifest/gplay/release/aaptDump.txt
|
|
- name: Compile nightly sources
|
|
if: ${{ matrix.variant == 'nightly' }}
|
|
run: ./gradlew compileGplayNightlySources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES
|