From c22d59428cfad172728fe0e93a51d0a7c4327e1c Mon Sep 17 00:00:00 2001 From: Lennoard Date: Thu, 20 Aug 2026 21:52:38 -0300 Subject: [PATCH] refactor: improve signing configuration and release workflow - Sets up signing logic in `build.gradle.kts` to conditionally create the release configuration based on the availability of credentials Signed-off-by: Lennoard --- .github/workflows/release-apk.yml | 17 ++++---- app/build.gradle.kts | 69 ++++++++++++------------------- 2 files changed, 36 insertions(+), 50 deletions(-) diff --git a/.github/workflows/release-apk.yml b/.github/workflows/release-apk.yml index 00c8e9c..2260d9f 100644 --- a/.github/workflows/release-apk.yml +++ b/.github/workflows/release-apk.yml @@ -46,13 +46,16 @@ jobs: KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: | - if [ -n "$KEYSTORE_BASE64" ] && [ -n "$KEYSTORE_PASSWORD" ] && [ -n "$KEY_ALIAS" ] && [ -n "$KEY_PASSWORD" ]; then - echo "$KEYSTORE_BASE64" | base64 --decode > "$GITHUB_WORKSPACE/release-keystore.jks" - echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/release-keystore.jks" >> "$GITHUB_ENV" - echo "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> "$GITHUB_ENV" - echo "KEY_ALIAS=$KEY_ALIAS" >> "$GITHUB_ENV" - echo "KEY_PASSWORD=$KEY_PASSWORD" >> "$GITHUB_ENV" - fi + test -n "$KEYSTORE_BASE64" || { echo "KEYSTORE_BASE64 is required"; exit 1; } + test -n "$KEYSTORE_PASSWORD" || { echo "KEYSTORE_PASSWORD is required"; exit 1; } + test -n "$KEY_ALIAS" || { echo "KEY_ALIAS is required"; exit 1; } + test -n "$KEY_PASSWORD" || { echo "KEY_PASSWORD is required"; exit 1; } + echo "$KEYSTORE_BASE64" | base64 --decode > "$GITHUB_WORKSPACE/release-keystore.jks" + test -s "$GITHUB_WORKSPACE/release-keystore.jks" || { echo "Decoded keystore is empty"; exit 1; } + echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/release-keystore.jks" >> "$GITHUB_ENV" + echo "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> "$GITHUB_ENV" + echo "KEY_ALIAS=$KEY_ALIAS" >> "$GITHUB_ENV" + echo "KEY_PASSWORD=$KEY_PASSWORD" >> "$GITHUB_ENV" - name: Grant execute permission for gradlew run: chmod +x ./gradlew diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c2bd03e..3075e55 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -38,38 +38,33 @@ android { multiDexEnabled = true } - signingConfigs { - create("release") { - val envStorePath = System.getenv("KEYSTORE_PATH") - val envStorePassword = System.getenv("KEYSTORE_PASSWORD") - val envKeyAlias = System.getenv("KEY_ALIAS") - val envKeyPassword = System.getenv("KEY_PASSWORD") - - if (!envStorePath.isNullOrBlank()) { - storeFile = file(envStorePath) - storePassword = envStorePassword ?: "" - keyAlias = envKeyAlias ?: "" - keyPassword = envKeyPassword ?: "" - return@create - } + val envStorePath = System.getenv("KEYSTORE_PATH") + val envStorePassword = System.getenv("KEYSTORE_PASSWORD") + val envKeyAlias = System.getenv("KEY_ALIAS") + val envKeyPassword = System.getenv("KEY_PASSWORD") + val propFile = rootProject.file("keystore.properties") + val keystoreProps = Properties().apply { + if (propFile.exists()) { + load(propFile.inputStream()) + } + } + val storeFilePath = envStorePath ?: keystoreProps["storeFile"] as? String + val storePasswordValue = envStorePassword ?: keystoreProps["storePassword"] as? String + val keyAliasValue = envKeyAlias ?: keystoreProps["keyAlias"] as? String + val keyPasswordValue = envKeyPassword ?: keystoreProps["keyPassword"] as? String + val hasReleaseSigning = !storeFilePath.isNullOrBlank() && + !storePasswordValue.isNullOrBlank() && + !keyAliasValue.isNullOrBlank() && + !keyPasswordValue.isNullOrBlank() - val propFile = rootProject.file("keystore.properties") - if (!propFile.exists()) { - propFile.createNewFile() - } - val keystoreProps = Properties().apply { - load(propFile.inputStream()) + signingConfigs { + if (hasReleaseSigning) { + create("release") { + storeFile = file(storeFilePath) + storePassword = storePasswordValue + keyAlias = keyAliasValue + keyPassword = keyPasswordValue } - - val storeFilePath = keystoreProps["storeFile"] as? String - val keyAliasValue = keystoreProps["keyAlias"] as? String - val keyPasswordValue = keystoreProps["keyPassword"] as? String - val storePasswordValue = keystoreProps["storePassword"] as? String - - keyAlias = keyAliasValue ?: "" - keyPassword = keyPasswordValue ?: "" - storeFile = if (!storeFilePath.isNullOrBlank()) file(storeFilePath) else file("/dev/null") - storePassword = storePasswordValue ?: "" } } @@ -78,19 +73,7 @@ android { isMinifyEnabled = true isShrinkResources = true isDebuggable = false - val envEnabled = !System.getenv("KEYSTORE_PATH").isNullOrBlank() && - !System.getenv("KEYSTORE_PASSWORD").isNullOrBlank() && - !System.getenv("KEY_ALIAS").isNullOrBlank() && - !System.getenv("KEY_PASSWORD").isNullOrBlank() - val propFile = rootProject.file("keystore.properties") - val keyStoreExists = propFile.exists() && propFile.readText().contains("storeFile") - val hasSigningValues = keyStoreExists && propFile.readText().contains("keyAlias") && - propFile.readText().contains("storePassword") - signingConfig = if (envEnabled || hasSigningValues) { - signingConfigs.getByName("release") - } else { - signingConfigs.getByName("debug") - } + signingConfig = if (hasReleaseSigning) signingConfigs.findByName("release") else null proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro"