From 7191313ce54ed76adc6d7803f91034e9dc5874c6 Mon Sep 17 00:00:00 2001 From: bxdxnn <267911624+bxdxnn@users.noreply.github.com> Date: Sat, 12 Sep 2026 18:10:53 +0000 Subject: [PATCH 1/4] Allow changing keystore path --- app/build.gradle.kts | 31 +++++++++++++++++++++++-------- docs/nightly_build.md | 1 + gradle.properties | 1 + 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a297ea7702..84eb43fc5f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -38,6 +38,12 @@ plugins { // alias(libs.plugins.gms.google.services) } +fun signingValue(envName: String, propertyName: String): String? = + providers.environmentVariable(envName) + .orElse(providers.gradleProperty(propertyName)) + .orNull + ?.takeIf { it.isNotBlank() } + android { namespace = "io.element.android.x" @@ -88,13 +94,22 @@ android { storePassword = "android" } register("nightly") { - keyAlias = System.getenv("ELEMENT_ANDROID_NIGHTLY_KEYID") - ?: project.property("signing.element.nightly.keyId") as? String? - keyPassword = System.getenv("ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD") - ?: project.property("signing.element.nightly.keyPassword") as? String? - storeFile = file("./signature/nightly.keystore") - storePassword = System.getenv("ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD") - ?: project.property("signing.element.nightly.storePassword") as? String? + keyAlias = signingValue("ELEMENT_ANDROID_NIGHTLY_KEYID", "signing.element.nightly.keyId") + keyPassword = signingValue("ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD", "signing.element.nightly.keyPassword") + storeFile = file( + signingValue("ELEMENT_ANDROID_NIGHTLY_STOREFILE", "signing.element.nightly.storeFile") + ?: "./signature/nightly.keystore" + ) + storePassword = signingValue("ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD", "signing.element.nightly.storePassword") + } + val releaseStoreFile = signingValue("ELEMENT_ANDROID_RELEASE_STOREFILE", "signing.element.release.storeFile") + if (releaseStoreFile != null) { + register("release") { + keyAlias = signingValue("ELEMENT_ANDROID_RELEASE_KEYID", "signing.element.release.keyId") + keyPassword = signingValue("ELEMENT_ANDROID_RELEASE_KEYPASSWORD", "signing.element.release.keyPassword") + storeFile = file(releaseStoreFile) + storePassword = signingValue("ELEMENT_ANDROID_RELEASE_STOREPASSWORD", "signing.element.release.storePassword") + } } } @@ -122,7 +137,7 @@ android { "login_redirect_scheme", oAuthRedirectSchemeBase, ) - signingConfig = signingConfigs.getByName("debug") + signingConfig = signingConfigs.findByName("release") ?: signingConfigs.getByName("debug") optimization { enable = true diff --git a/docs/nightly_build.md b/docs/nightly_build.md index 3a3345d662..b52b266612 100644 --- a/docs/nightly_build.md +++ b/docs/nightly_build.md @@ -27,6 +27,7 @@ Click on this link and follow the instruction: [https://appdistribution.firebase Nightly build can be built manually from your computer. You will need to retrieved some secrets from Passbolt and add them to your file `~/.gradle/gradle.properties`: ``` +signing.element.nightly.storeFile=VALUE_FROM_PASSBOLT signing.element.nightly.storePassword=VALUE_FROM_PASSBOLT signing.element.nightly.keyId=VALUE_FROM_PASSBOLT signing.element.nightly.keyPassword=VALUE_FROM_PASSBOLT diff --git a/gradle.properties b/gradle.properties index 4323d20107..813b2173a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,6 +39,7 @@ org.gradle.configuration-cache.parallel=true kotlin.incremental=true # Dummy values for signing secrets / nightly +signing.element.nightly.storeFile=./signature/nightly.keystore signing.element.nightly.storePassword=Secret signing.element.nightly.keyId=Secret signing.element.nightly.keyPassword=Secret From 9f3905e8306ea9294bbb7570a3ff147242a6bf11 Mon Sep 17 00:00:00 2001 From: bxdxnn <267911624+bxdxnn@users.noreply.github.com> Date: Tue, 15 Sep 2026 16:49:29 +0300 Subject: [PATCH 2/4] Apply suggestion from @bmarty Co-authored-by: Benoit Marty --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 813b2173a4..6715fe3472 100644 --- a/gradle.properties +++ b/gradle.properties @@ -39,7 +39,7 @@ org.gradle.configuration-cache.parallel=true kotlin.incremental=true # Dummy values for signing secrets / nightly -signing.element.nightly.storeFile=./signature/nightly.keystore +signing.element.nightly.storeFile= signing.element.nightly.storePassword=Secret signing.element.nightly.keyId=Secret signing.element.nightly.keyPassword=Secret From 903d31bbab27a78e4c894e7d9a8d8274f08b09a0 Mon Sep 17 00:00:00 2001 From: bxdxnn <267911624+bxdxnn@users.noreply.github.com> Date: Tue, 15 Sep 2026 17:26:18 +0300 Subject: [PATCH 3/4] Update docs/nightly_build.md Co-authored-by: Benoit Marty --- docs/nightly_build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/nightly_build.md b/docs/nightly_build.md index b52b266612..76fdfeb0ef 100644 --- a/docs/nightly_build.md +++ b/docs/nightly_build.md @@ -27,7 +27,7 @@ Click on this link and follow the instruction: [https://appdistribution.firebase Nightly build can be built manually from your computer. You will need to retrieved some secrets from Passbolt and add them to your file `~/.gradle/gradle.properties`: ``` -signing.element.nightly.storeFile=VALUE_FROM_PASSBOLT +signing.element.nightly.storeFile=LOCATION_OF_THE_KEYSTORE_FILE signing.element.nightly.storePassword=VALUE_FROM_PASSBOLT signing.element.nightly.keyId=VALUE_FROM_PASSBOLT signing.element.nightly.keyPassword=VALUE_FROM_PASSBOLT From b772aebf4908fa62e75c5a8ee461f15e62ce0d5f Mon Sep 17 00:00:00 2001 From: bxdxnn <267911624+bxdxnn@users.noreply.github.com> Date: Tue, 15 Sep 2026 14:45:26 +0000 Subject: [PATCH 4/4] Address review --- app/build.gradle.kts | 27 +++++-------------- .../main/kotlin/extension/CommonExtension.kt | 9 +++++++ 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 84eb43fc5f..64bc93cb6f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -21,6 +21,7 @@ import extension.allFeaturesImpl import extension.allLibrariesImpl import extension.allServicesImpl import extension.buildConfigFieldStr +import extension.environmentOrGradleValue import extension.locales import extension.setupDependencyInjection import extension.testCommonDependencies @@ -38,12 +39,6 @@ plugins { // alias(libs.plugins.gms.google.services) } -fun signingValue(envName: String, propertyName: String): String? = - providers.environmentVariable(envName) - .orElse(providers.gradleProperty(propertyName)) - .orNull - ?.takeIf { it.isNotBlank() } - android { namespace = "io.element.android.x" @@ -94,22 +89,14 @@ android { storePassword = "android" } register("nightly") { - keyAlias = signingValue("ELEMENT_ANDROID_NIGHTLY_KEYID", "signing.element.nightly.keyId") - keyPassword = signingValue("ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD", "signing.element.nightly.keyPassword") + keyAlias = environmentOrGradleValue("ELEMENT_ANDROID_NIGHTLY_KEYID", "signing.element.nightly.keyId") + keyPassword = environmentOrGradleValue("ELEMENT_ANDROID_NIGHTLY_KEYPASSWORD", "signing.element.nightly.keyPassword") storeFile = file( - signingValue("ELEMENT_ANDROID_NIGHTLY_STOREFILE", "signing.element.nightly.storeFile") + environmentOrGradleValue("ELEMENT_ANDROID_NIGHTLY_STOREFILE", "signing.element.nightly.storeFile") + ?.ifBlank { null } ?: "./signature/nightly.keystore" ) - storePassword = signingValue("ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD", "signing.element.nightly.storePassword") - } - val releaseStoreFile = signingValue("ELEMENT_ANDROID_RELEASE_STOREFILE", "signing.element.release.storeFile") - if (releaseStoreFile != null) { - register("release") { - keyAlias = signingValue("ELEMENT_ANDROID_RELEASE_KEYID", "signing.element.release.keyId") - keyPassword = signingValue("ELEMENT_ANDROID_RELEASE_KEYPASSWORD", "signing.element.release.keyPassword") - storeFile = file(releaseStoreFile) - storePassword = signingValue("ELEMENT_ANDROID_RELEASE_STOREPASSWORD", "signing.element.release.storePassword") - } + storePassword = environmentOrGradleValue("ELEMENT_ANDROID_NIGHTLY_STOREPASSWORD", "signing.element.nightly.storePassword") } } @@ -137,7 +124,7 @@ android { "login_redirect_scheme", oAuthRedirectSchemeBase, ) - signingConfig = signingConfigs.findByName("release") ?: signingConfigs.getByName("debug") + signingConfig = signingConfigs.getByName("debug") optimization { enable = true diff --git a/plugins/src/main/kotlin/extension/CommonExtension.kt b/plugins/src/main/kotlin/extension/CommonExtension.kt index 1f24473f8e..ad6badb613 100644 --- a/plugins/src/main/kotlin/extension/CommonExtension.kt +++ b/plugins/src/main/kotlin/extension/CommonExtension.kt @@ -117,3 +117,12 @@ fun Project.defaultLintOptions(lint: Lint) = lint.apply { ignoreTestFixturesSources = true checkGeneratedSources = false } + +fun Project.environmentOrGradleValue( + environmentVariableName: String, + gradlePropertyName: String, + defaultValue: String? = null, +): String? = providers.environmentVariable(environmentVariableName) + .orElse(providers.gradleProperty(gradlePropertyName)) + .orNull + ?: defaultValue