skyline/.github/workflows/ci.yml
Niccolò Betto 439c18d8eb Fix ccache not working in CI
The default `compiler_check` strategy used by ccache was causing a 0% hit rate, as it was using the compiler's "modified time" as part of the hash. Since the script installs dependencies from scratch for every run, mtime was always different, causing different hashes even when source files were unchanged. To avoid this, use the NDK version as part of the hash instead.
2023-02-12 22:09:11 +01:00

108 lines
4.3 KiB
YAML

name: CI
on:
push:
pull_request:
types: [opened, synchronize, reopened, labeled]
jobs:
build:
# Skip 'labeled' events that didn't add the 'ci' label
if: |
github.event_name != 'pull_request' ||
github.event.action != 'labeled' ||
github.event.label.name == 'ci'
runs-on: ubuntu-latest
env:
JVM_OPTS: -Xmx6G
IS_SKYLINE_SIGNED: ${{ secrets.KEYSTORE != '' }}
UPLOAD_ARTIFACTS: ${{ github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'ci') }}
CMAKE_VERSION: "3.22.1"
NDK_VERSION: "25.0.8775105"
steps:
- name: Git Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: Restore CCache
uses: hendrikmuhs/ccache-action@v1.2
with:
max-size: 3Gi
- name: Restore Gradle Cache
uses: actions/cache@v3
with:
path: ~/.gradle/
key: ${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle') }}-${{ hashFiles('app/**/*.xml') }}-${{ hashFiles('app/**.kt', 'app/**.java') }}
restore-keys: |
${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle') }}-${{ hashFiles('app/**/*.xml') }}-
${{ runner.os }}-gradle-${{ hashFiles('**/build.gradle') }}-
${{ runner.os }}-gradle-
- name: Install Ninja Build
run: |
sudo apt-get install -y ninja-build
ln -s /usr/bin/ninja .
- name: Install CMake & Android NDK
run: echo "yes" | $ANDROID_HOME/tools/bin/sdkmanager "cmake;${{ env.CMAKE_VERSION }}" "ndk;${{ env.NDK_VERSION }}" --channel=3 | grep -v = || true
- name: Decode Keystore
if: env.IS_SKYLINE_SIGNED == 'true'
env:
KEYSTORE_ENCODED: ${{ secrets.KEYSTORE }}
run: echo $KEYSTORE_ENCODED | base64 --decode > "/home/runner/keystore.jks"
- name: Android Assemble
env:
SIGNING_STORE_PATH: "/home/runner/keystore.jks"
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
CMAKE_C_COMPILER_LAUNCHER: "ccache"
CMAKE_CXX_COMPILER_LAUNCHER: "ccache"
CCACHE_COMPILERCHECK: "string:${{ env.NDK_VERSION }}"
run: ./gradlew --stacktrace --configuration-cache --build-cache --parallel --configure-on-demand assembleFull
- name: Rename APKs (Signed)
if: env.IS_SKYLINE_SIGNED == 'true' && env.UPLOAD_ARTIFACTS == 'true'
run: |
mv app/build/outputs/apk/full/debug/app-full-debug.apk skyline-$GITHUB_RUN_NUMBER-debug.apk
mv app/build/outputs/apk/full/release/app-full-release.apk skyline-$GITHUB_RUN_NUMBER-release.apk
- name: Upload Signed Debug APK
if: env.IS_SKYLINE_SIGNED == 'true' && env.UPLOAD_ARTIFACTS == 'true'
uses: actions/upload-artifact@v3
with:
name: skyline-${{ github.run_number }}-debug.apk
path: skyline-${{ github.run_number }}-debug.apk
- name: Upload Signed Release APK
if: env.IS_SKYLINE_SIGNED == 'true' && env.UPLOAD_ARTIFACTS == 'true'
uses: actions/upload-artifact@v3
with:
name: skyline-${{ github.run_number }}-release.apk
path: skyline-${{ github.run_number }}-release.apk
- name: Rename APKs (Unsigned)
if: env.IS_SKYLINE_SIGNED == 'false' && env.UPLOAD_ARTIFACTS == 'true'
run: |
mv app/build/outputs/apk/full/debug/app-full-debug.apk skyline-$GITHUB_RUN_NUMBER-unsigned-debug.apk
mv app/build/outputs/apk/full/release/app-full-release.apk skyline-$GITHUB_RUN_NUMBER-unsigned-release.apk
- name: Upload Unsigned Debug APK
if: env.IS_SKYLINE_SIGNED == 'false' && env.UPLOAD_ARTIFACTS == 'true'
uses: actions/upload-artifact@v3
with:
name: skyline-${{ github.run_number }}-unsigned-debug.apk
path: skyline-${{ github.run_number }}-unsigned-debug.apk
- name: Upload Unsigned Release APK
if: env.IS_SKYLINE_SIGNED == 'false' && env.UPLOAD_ARTIFACTS == 'true'
uses: actions/upload-artifact@v3
with:
name: skyline-${{ github.run_number }}-unsigned-release.apk
path: skyline-${{ github.run_number }}-unsigned-release.apk