From 1d0329a065f627de17c97ff5224dfc90504b83f8 Mon Sep 17 00:00:00 2001
From: liushuyu <liushuyu011@gmail.com>
Date: Fri, 3 Mar 2023 22:38:56 -0700
Subject: [PATCH] CI: add Android build systems

---
 .ci/scripts/android/build.sh  | 12 +++++++++++
 .ci/scripts/android/upload.sh | 24 ++++++++++++++++++++++
 .github/workflows/verify.yml  | 38 +++++++++++++++++++++++++++++++++++
 src/android/gradlew           |  0
 4 files changed, 74 insertions(+)
 create mode 100755 .ci/scripts/android/build.sh
 create mode 100755 .ci/scripts/android/upload.sh
 mode change 100644 => 100755 src/android/gradlew

diff --git a/.ci/scripts/android/build.sh b/.ci/scripts/android/build.sh
new file mode 100755
index 0000000000..1d669919c2
--- /dev/null
+++ b/.ci/scripts/android/build.sh
@@ -0,0 +1,12 @@
+#!/bin/bash -ex
+
+export NDK_CCACHE="$(which ccache)"
+ccache -s
+
+BUILD_FLAVOR=mainline
+
+cd src/android
+chmod +x ./gradlew
+./gradlew "assemble${BUILD_FLAVOR}Release" "bundle${BUILD_FLAVOR}Release"
+
+ccache -s
diff --git a/.ci/scripts/android/upload.sh b/.ci/scripts/android/upload.sh
new file mode 100755
index 0000000000..269684178e
--- /dev/null
+++ b/.ci/scripts/android/upload.sh
@@ -0,0 +1,24 @@
+#!/bin/bash -ex
+
+. ./.ci/scripts/common/pre-upload.sh
+
+REV_NAME="yuzu-${GITDATE}-${GITREV}"
+
+BUILD_FLAVOR=mainline
+
+cp src/android/app/build/outputs/apk/"${BUILD_FLAVOR}/release/app-${BUILD_FLAVOR}-release.apk" \
+  "artifacts/${REV_NAME}.apk"
+cp src/android/app/build/outputs/bundle/"${BUILD_FLAVOR}Release"/"app-${BUILD_FLAVOR}-release.aab" \
+  "artifacts/${REV_NAME}.aab"
+
+if [ -n "${ANDROID_KEYSTORE_B64}" ]
+then
+  echo "Signing apk..."
+  base64 --decode <<< "${ANDROID_KEYSTORE_B64}" > ks.jks
+
+  apksigner sign --ks ks.jks \
+    --ks-key-alias "${ANDROID_KEY_ALIAS}" \
+    --ks-pass env:ANDROID_KEYSTORE_PASS "artifacts/${REV_NAME}.apk"
+else
+  echo "No keystore specified, not signing the APK files."
+fi
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml
index 7cde8380bb..c65e0bc5b9 100644
--- a/.github/workflows/verify.yml
+++ b/.github/workflows/verify.yml
@@ -122,3 +122,41 @@ jobs:
         with:
           name: ${{ env.INDIVIDUAL_EXE }}
           path: ${{ env.INDIVIDUAL_EXE }}
+  android:
+    runs-on: ubuntu-latest
+    needs: format
+    steps:
+      - uses: actions/checkout@v3
+        with:
+          submodules: recursive
+      - name: Set up cache
+        uses: actions/cache@v3
+        with:
+          path: |
+            ~/.gradle/caches
+            ~/.gradle/wrapper
+            ~/.ccache
+          key: ${{ runner.os }}-android-${{ github.sha }}
+          restore-keys: |
+            ${{ runner.os }}-android-
+      - name: Query tag name
+        uses: little-core-labs/get-git-tag@v3.0.2
+        id: tagName
+      - name: Install dependencies
+        run: |
+          sudo apt-get update
+          sudo apt-get install -y ccache apksigner glslang-dev glslang-tools
+          git -C ./externals/vcpkg/ fetch --all --unshallow
+      - name: Build
+        run: ./.ci/scripts/android/build.sh
+      - name: Copy and sign artifacts
+        env:
+          ANDROID_KEYSTORE_B64: ${{ secrets.ANDROID_KEYSTORE_B64 }}
+          ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
+          ANDROID_KEYSTORE_PASS: ${{ secrets.ANDROID_KEYSTORE_PASS }}
+        run: ./.ci/scripts/android/upload.sh
+      - name: Upload
+        uses: actions/upload-artifact@v3
+        with:
+          name: android
+          path: artifacts/
diff --git a/src/android/gradlew b/src/android/gradlew
old mode 100644
new mode 100755