diff --git a/.github/workflows/build-android-fcm.yml b/.github/workflows/build-android-fcm.yml index 4f02716..7603c83 100644 --- a/.github/workflows/build-android-fcm.yml +++ b/.github/workflows/build-android-fcm.yml @@ -46,6 +46,26 @@ jobs: echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Setup release signing + env: + KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + if [ -z "$KEYSTORE_BASE64" ]; then + echo "KEYSTORE_BASE64 secret not set — release will be debug-signed." + exit 0 + fi + echo "$KEYSTORE_BASE64" | base64 -d > android/app/komet-release.jks + { + echo "storePassword=$KEYSTORE_PASSWORD" + echo "keyPassword=$KEY_PASSWORD" + echo "keyAlias=$KEY_ALIAS" + echo "storeFile=komet-release.jks" + } > android/key.properties + echo "Release signing configured." + - name: Build Universal APK run: flutter build apk --release --flavor oneme diff --git a/.github/workflows/build-android.yml b/.github/workflows/build-android.yml index c41827f..1b5417a 100644 --- a/.github/workflows/build-android.yml +++ b/.github/workflows/build-android.yml @@ -46,6 +46,26 @@ jobs: echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Setup release signing + env: + KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + if [ -z "$KEYSTORE_BASE64" ]; then + echo "KEYSTORE_BASE64 secret not set — release will be debug-signed." + exit 0 + fi + echo "$KEYSTORE_BASE64" | base64 -d > android/app/komet-release.jks + { + echo "storePassword=$KEYSTORE_PASSWORD" + echo "keyPassword=$KEY_PASSWORD" + echo "keyAlias=$KEY_ALIAS" + echo "storeFile=komet-release.jks" + } > android/key.properties + echo "Release signing configured." + - name: Build Universal APK run: flutter build apk --release --flavor komet diff --git a/.github/workflows/flutter-dev.yml b/.github/workflows/flutter-dev.yml index 7e5d633..2111505 100644 --- a/.github/workflows/flutter-dev.yml +++ b/.github/workflows/flutter-dev.yml @@ -37,5 +37,25 @@ jobs: echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Setup release signing + env: + KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + if [ -z "$KEYSTORE_BASE64" ]; then + echo "KEYSTORE_BASE64 secret not set — release will be debug-signed." + exit 0 + fi + echo "$KEYSTORE_BASE64" | base64 -d > android/app/komet-release.jks + { + echo "storePassword=$KEYSTORE_PASSWORD" + echo "keyPassword=$KEY_PASSWORD" + echo "keyAlias=$KEY_ALIAS" + echo "storeFile=komet-release.jks" + } > android/key.properties + echo "Release signing configured." + - name: Build Android APK run: flutter build apk --release --flavor komet diff --git a/.github/workflows/flutter-main.yml b/.github/workflows/flutter-main.yml index f43dd96..8143418 100644 --- a/.github/workflows/flutter-main.yml +++ b/.github/workflows/flutter-main.yml @@ -36,6 +36,26 @@ jobs: echo "org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m" >> ~/.gradle/gradle.properties echo "kotlin.daemon.jvmargs=-Xmx1536m" >> ~/.gradle/gradle.properties + - name: Setup release signing + env: + KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }} + KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + run: | + if [ -z "$KEYSTORE_BASE64" ]; then + echo "KEYSTORE_BASE64 secret not set — release will be debug-signed." + exit 0 + fi + echo "$KEYSTORE_BASE64" | base64 -d > android/app/komet-release.jks + { + echo "storePassword=$KEYSTORE_PASSWORD" + echo "keyPassword=$KEY_PASSWORD" + echo "keyAlias=$KEY_ALIAS" + echo "storeFile=komet-release.jks" + } > android/key.properties + echo "Release signing configured." + - name: Build Android APK run: flutter build apk --release --flavor komet diff --git a/android/.gitignore b/android/.gitignore index be3943c..e2c2cc8 100644 --- a/android/.gitignore +++ b/android/.gitignore @@ -10,5 +10,7 @@ GeneratedPluginRegistrant.java # Remember to never publicly share your keystore. # See https://flutter.dev/to/reference-keystore key.properties +app/key.properties +app/komet-release.jks **/*.keystore **/*.jks diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 10bcf5b..1e61639 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -1,3 +1,6 @@ +import java.util.Properties +import java.io.FileInputStream + plugins { id("com.android.application") id("kotlin-android") @@ -6,6 +9,13 @@ plugins { id("com.google.gms.google-services") } +val keystoreProperties = Properties() +val keystorePropertiesFile = rootProject.file("key.properties") +val hasReleaseSigning = keystorePropertiesFile.exists() +if (hasReleaseSigning) { + keystoreProperties.load(FileInputStream(keystorePropertiesFile)) +} + android { namespace = "ru.komet.app" compileSdk = flutter.compileSdkVersion @@ -43,11 +53,24 @@ android { } } + signingConfigs { + if (hasReleaseSigning) { + create("release") { + keyAlias = keystoreProperties["keyAlias"] as String + keyPassword = keystoreProperties["keyPassword"] as String + storeFile = file(keystoreProperties["storeFile"] as String) + storePassword = keystoreProperties["storePassword"] as String + } + } + } + buildTypes { release { - // TODO: Add your own signing config for the release build. - // Signing with the debug keys for now, so `flutter run --release` works. - signingConfig = signingConfigs.getByName("debug") + signingConfig = if (hasReleaseSigning) { + signingConfigs.getByName("release") + } else { + signingConfigs.getByName("debug") + } } } }