@@ -43,19 +43,37 @@ android {
4343
4444 signingConfigs {
4545 create(" release" ) {
46- keyAlias = keystoreProperties[" keyAlias" ] as String
47- keyPassword = keystoreProperties[" keyPassword" ] as String
48- storeFile = keystoreProperties[" storeFile" ]?.let { file(it) }
49- storePassword = keystoreProperties[" storePassword" ] as String
46+ if (keystorePropertiesFile.exists()) {
47+ // use Properties.getProperty which returns null if missing (safer than cast)
48+ keyAlias = keystoreProperties.getProperty(" keyAlias" )
49+ keyPassword = keystoreProperties.getProperty(" keyPassword" )
50+ keystoreProperties.getProperty(" storeFile" )?.let { storeFile = file(it) }
51+ storePassword = keystoreProperties.getProperty(" storePassword" )
52+ } else if (System .getenv(" KEYSTORE_BASE64" ) != null ) {
53+ // Decode base64 keystore provided via environment (CI secret)
54+ val keystoreBytes = java.util.Base64 .getDecoder().decode(System .getenv(" KEYSTORE_BASE64" ))
55+ val keystoreOut = rootProject.file(" ci_keystore.jks" )
56+ keystoreOut.writeBytes(keystoreBytes)
57+ storeFile = keystoreOut
58+ keyAlias = System .getenv(" KEY_ALIAS" )
59+ keyPassword = System .getenv(" KEY_PASSWORD" )
60+ storePassword = System .getenv(" STORE_PASSWORD" )
61+ } else {
62+ // Leave release signing empty so CI can build without a keystore present
63+ }
5064 }
5165 }
5266 buildTypes {
5367 release {
5468 // TODO: Add your own signing config for the release build.
5569 // Signing with the debug keys for now,
5670 // so `flutter run --release` works.
57- signingConfig = signingConfigs.getByName(" debug" )
58- signingConfig = signingConfigs.getByName(" release" )
71+ // Use release signing when key.properties exists or CI keystore env var is set
72+ if (keystorePropertiesFile.exists() || System .getenv(" KEYSTORE_BASE64" ) != null ) {
73+ signingConfig = signingConfigs.getByName(" release" )
74+ } else {
75+ signingConfig = signingConfigs.getByName(" debug" )
76+ }
5977 }
6078 }
6179
0 commit comments