Let's try this again :) Since cache entries with the same key are not updated/replaced and there is no option to do so, we manually delete the previous entry for the current branch. This reduces the cache storage for active branches, which can cause caches of the master branch to get evicted, which in turn will slow down builds of not only master but also new branches as they can't fall back on those caches. Permission has to be explicitly granted in order to delete the cache entries when not using the legacy all-write tokens that are the default for old repositories. The continue-on-error option is set for the step that deletes the old cache entry as it's expected that cache-hit will be true for a new feature branch when restoring the cache from the master branch. However, because there won't be anything to delete for this branch yet, the command will fail. The --succeed-on-no-caches option of the command unfortunately only works with --all. For the Linux tests, several jobs use the same cache key. So there is a chance that two jobs try to store a new entry concurrently, which will fail (it works if there was a cache hit and they are slightly off as previous entries are first deleted). To avoid that, we store the cache only for one particular config. Also made sure that the "openssl" test does not remove "openssl-3/4" caches by adding a suffix to the former. For alpine, the repository had to be set explicitly as gh wasn't able to determine it (didn't detect the Git working dir).
81 lines
2.6 KiB
YAML
81 lines
2.6 KiB
YAML
name: Android
|
|
|
|
on: [push, pull_request]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
actions: write
|
|
|
|
env:
|
|
CCACHE_BASEDIR: ${{ github.workspace }}
|
|
CCACHE_COMPRESS: true
|
|
CCACHE_MAXSIZE: 400M
|
|
CC: gcc
|
|
OS_NAME: linux
|
|
|
|
jobs:
|
|
pre-check:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
should_skip: ${{ steps.skip-check.outputs.should_skip }}
|
|
steps:
|
|
- id: skip-check
|
|
uses: fkirc/skip-duplicate-actions@master
|
|
with:
|
|
concurrent_skipping: 'same_content_newer'
|
|
|
|
android:
|
|
needs: pre-check
|
|
if: ${{ needs.pre-check.outputs.should_skip != 'true' }}
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
TEST: android
|
|
# since the NDK might be newly installed, we have to use this to avoid cache misses
|
|
CCACHE_COMPILERCHECK: content
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
# make sure the NDK we reference is installed and exported so we can use it to build OpenSSL
|
|
- name: Install NDK
|
|
id: ndk-install
|
|
run: |
|
|
NDK_VERSION=$(grep "ndkVersion" src/frontends/android/app/build.gradle | sed -e 's/.*"\(.*\)"/\1/')
|
|
echo Using NDK ${NDK_VERSION}
|
|
yes | ${ANDROID_HOME}/cmdline-tools/latest/bin/sdkmanager --install "ndk;${NDK_VERSION}"
|
|
echo "ANDROID_NDK_ROOT=${ANDROID_HOME}/ndk/${NDK_VERSION}" >> "$GITHUB_OUTPUT"
|
|
- uses: actions/cache/restore@v5
|
|
id: cache-restore
|
|
with:
|
|
path: ~/.cache/ccache
|
|
key: ccache-android
|
|
# necessary for newer versions of the Gradle plugin
|
|
- uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 17
|
|
cache: 'gradle'
|
|
- run: |
|
|
sudo apt-get install -qq ccache
|
|
echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
|
|
ccache -z
|
|
- uses: ./.github/actions/default
|
|
env:
|
|
ANDROID_NDK_ROOT: ${{ steps.ndk-install.outputs.ANDROID_NDK_ROOT }}
|
|
- run: ccache -sv
|
|
- uses: actions/upload-artifact@v6
|
|
with:
|
|
name: Lint Results
|
|
path: src/frontends/android/app/build/reports/lint-results*.xml
|
|
# delete old cache entry as we currently can't update it any other way
|
|
- env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
if: steps.cache-restore.outputs.cache-hit
|
|
continue-on-error: true
|
|
run: gh cache delete -r ${{ github.ref }} ${{ steps.cache-restore.outputs.cache-primary-key }}
|
|
- uses: actions/cache/save@v5
|
|
with:
|
|
path: ~/.cache/ccache
|
|
key: ${{ steps.cache-restore.outputs.cache-primary-key }}
|