mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-06 02:35:09 +01:00
439c18d8eb
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.
108 lines
4.3 KiB
YAML
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
|