diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 737d83f..7198df0 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -7,39 +7,19 @@ plugins { id("com.google.gms.google-services") } +// Release signing is intentionally optional during configuration so debug/profile +// builds (including GitHub Actions CI) do not require private signing credentials. val keystoreProperties = Properties() val keystorePropertiesFile = rootProject.file("key.properties") -if (!keystorePropertiesFile.exists()) { - throw GradleException( - "Missing android/key.properties. " + - "Create it from android/key.properties.template." - ) -} - -FileInputStream(keystorePropertiesFile).use { - keystoreProperties.load(it) -} - -fun requiredKeystoreProperty(name: String): String { - val value = keystoreProperties.getProperty(name)?.trim() - - println("MotorSignal signing property [$name]: ${if (value.isNullOrEmpty()) "" else ""}") - - if (value.isNullOrEmpty()) { - println("Properties actually loaded by Gradle: ${keystoreProperties.keys}") - throw GradleException( - "Missing $name in android/key.properties" - ) +if (keystorePropertiesFile.exists()) { + FileInputStream(keystorePropertiesFile).use { + keystoreProperties.load(it) } - - return value } -val releaseStorePassword = requiredKeystoreProperty("storePassword") -val releaseKeyPassword = requiredKeystoreProperty("keyPassword") -val releaseKeyAlias = requiredKeystoreProperty("keyAlias") -val releaseStoreFile = requiredKeystoreProperty("storeFile") +fun optionalKeystoreProperty(name: String): String? = + keystoreProperties.getProperty(name)?.trim()?.takeIf { it.isNotEmpty() } android { namespace = "app.motorsignal.motorcycle" @@ -60,21 +40,38 @@ android { } signingConfigs { - create("release") { - keyAlias = releaseKeyAlias - keyPassword = releaseKeyPassword - storePassword = releaseStorePassword - storeFile = rootProject.file(releaseStoreFile) - storeType = "PKCS12" + val releaseStorePassword = optionalKeystoreProperty("storePassword") + val releaseKeyPassword = optionalKeystoreProperty("keyPassword") + val releaseKeyAlias = optionalKeystoreProperty("keyAlias") + val releaseStoreFile = optionalKeystoreProperty("storeFile") + + if (releaseStorePassword != null && + releaseKeyPassword != null && + releaseKeyAlias != null && + releaseStoreFile != null + ) { + create("release") { + keyAlias = releaseKeyAlias + keyPassword = releaseKeyPassword + storePassword = releaseStorePassword + storeFile = rootProject.file(releaseStoreFile) + storeType = "PKCS12" + } + } } -} buildTypes { - release { - signingConfig = signingConfigs.getByName("release") + release { + val releaseSigningConfig = signingConfigs.findByName("release") + ?: throw GradleException( + "Release signing is not configured. " + + "Provide android/key.properties with storePassword, keyPassword, " + + "keyAlias, and storeFile for a signed release build." + ) + signingConfig = releaseSigningConfig + } } } -} kotlin { compilerOptions { @@ -84,4 +81,4 @@ kotlin { flutter { source = "../.." -} \ No newline at end of file +}