From acf3cb6b813dd495a8b7626b2740212ac10e0a22 Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Sat, 25 May 2024 14:14:12 +0800 Subject: [PATCH] ci: build signed apk Co-authored-by: MinoriceOwO <154642983+minoriceowo@users.noreply.github.com> --- .github/workflows/build.yml | 35 ++++++++++++++++++++++++------- .gitignore | 1 + app/build.gradle.kts | 42 +++++++++++++++++++++++++++++++++---- 3 files changed, 67 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0285da8..d9300b4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -26,20 +26,41 @@ jobs: - name: Grant execution permission to Gradle Wrapper run: chmod +x gradlew - - name: Build Debug APK - run: ./gradlew assembleDebug + - name: Build APK (testkey) + run: ./gradlew build - - name: Upload Debug APK + - name: Upload Debug APK (testkey) uses: actions/upload-artifact@v4 with: name: OwnDroid-CI-${{ env.SHORT_SHA }}-debug-testkey.apk path: app/build/outputs/apk/debug/app-debug.apk - - name: Build Release APK - run: ./gradlew assembleRelease - - - name: Upload Release APK + - name: Upload Release APK (testkey) uses: actions/upload-artifact@v4 with: name: OwnDroid-CI-${{ env.SHORT_SHA }}-release-testkey.apk path: app/build/outputs/apk/release/app-release.apk + + - name: Export key + env: + KEY_BASE64: ${{ secret.KEY_BASE64 }} + run: echo $KEY_BASE64 | base64 --decode - > app/signature.jks + + - name: Build APK + env: + KEYSTORE_PASSWORD: ${{ secret.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secret.KEY_PASSWORD }} + KEY_ALIAS: ${{ secret.KEY_ALIAS }} + run: ./gradlew build + + - name: Upload Debug APK + uses: actions/upload-artifact@v4 + with: + name: OwnDroid-CI-${{ env.SHORT_SHA }}-debug-signed.apk + path: app/build/outputs/apk/debug/app-debug.apk + + - name: Upload Release APK + uses: actions/upload-artifact@v4 + with: + name: OwnDroid-CI-${{ env.SHORT_SHA }}-release-signed.apk + path: app/build/outputs/apk/debug/app-debug.apk diff --git a/.gitignore b/.gitignore index 38e98fa..14d0ffa 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ captures app/build app/release app/debug +app/signature.jks .androidide diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 17ecc6d..11852a2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -3,19 +3,24 @@ plugins { alias(libs.plugins.kotlin.android) } +var keyPassword: String? = null +var keystorePassword: String? = null +var keyAlias: String? = null + android { signingConfigs { create("testkey") { - storeFile = file("testkey.jks") - storePassword = "testkey" - keyPassword = "testkey" - keyAlias = "testkey" + storeFile = file("signature.jks") + storePassword = keystorePassword ?: "testkey" + keyPassword = keyPassword ?: "testkey" + keyAlias = keyAlias ?: "testkey" } } namespace = "com.bintianqi.owndroid" compileSdk = 34 lint.checkReleaseBuilds = false + lint.disable += "All" defaultConfig { applicationId = "com.bintianqi.owndroid" @@ -68,6 +73,35 @@ android { } } +gradle.taskGraph.whenReady { + project.tasks.findByPath(":app:test")?.enabled = false + project.tasks.findByPath(":app:lint")?.enabled = false + project.tasks.findByPath(":app:lintAnalyzeDebug")?.enabled = false +} + +tasks.findByName("preBuild")?.dependsOn?.plusAssign("prepareSignature") + +tasks.register("prepareSignature") { + doFirst { + file("signature.jks").let { + if(!it.exists()) file("testkey.jks").copyTo(it) + } + keystorePassword = System.getenv("KEYSTORE_PASSWORD") + keyAlias = System.getenv("KEY_ALIAS") + keyPassword = System.getenv("KEY_PASSWORD") + } +} + +tasks.findByName("clean")?.dependsOn?.plusAssign("cleanKey") + +tasks.register("cleanKey") { + doFirst { + file("signature.jks").let { + if(it.exists()) it.delete() + } + } +} + dependencies { implementation(libs.androidx.activity.compose) implementation(libs.androidx.ui)