diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e220ec76e4..dd138f8e67 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,14 +47,15 @@ jobs: ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} - run: ./gradlew :app:assembleDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES + run: ./gradlew :app:assembleGplayDebug :app:assembleFDroidDebug -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES - name: Upload APK APKs if: ${{ matrix.variant == 'debug' }} uses: actions/upload-artifact@v4 with: name: elementx-debug path: | - app/build/outputs/apk/debug/*.apk + app/build/outputs/apk/gplay/debug/*.apk + app/build/outputs/apk/fdroid/debug/*.apk - uses: rnkdsh/action-upload-diawi@v1.5.4 id: diawi # Do not fail the whole build if Diawi upload fails @@ -64,7 +65,7 @@ jobs: if: ${{ matrix.variant == 'debug' && github.event_name == 'pull_request' && env.token != '' }} with: token: ${{ env.token }} - file: app/build/outputs/apk/debug/app-arm64-v8a-debug.apk + file: app/build/outputs/apk/gplay/debug/app-gplay-arm64-v8a-debug.apk - name: Add or update PR comment with QR Code to download APK. if: ${{ matrix.variant == 'debug' && github.event_name == 'pull_request' && steps.diawi.conclusion == 'success' }} uses: NejcZdovc/comment-pr@v2 @@ -82,7 +83,7 @@ jobs: run: ./gradlew compileReleaseSources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES - name: Compile nightly sources if: ${{ matrix.variant == 'nightly' }} - run: ./gradlew compileNightlySources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES + run: ./gradlew compileGplayNightlySources -PallWarningsAsErrors=true $CI_GRADLE_ARG_PROPERTIES - name: Compile samples minimal if: ${{ matrix.variant == 'samples' }} run: ./gradlew :samples:minimal:assemble $CI_GRADLE_ARG_PROPERTIES diff --git a/.github/workflows/maestro.yml b/.github/workflows/maestro.yml index 0e2dc74b92..c6d4c44d80 100644 --- a/.github/workflows/maestro.yml +++ b/.github/workflows/maestro.yml @@ -53,7 +53,7 @@ jobs: api-key: ${{ secrets.MAESTRO_CLOUD_API_KEY }} # Doc says (https://github.com/mobile-dev-inc/action-maestro-cloud#android): # app-file should point to an x86 compatible APK file, so upload the x86_64 one (much smaller than the universal APK). - app-file: app/build/outputs/apk/debug/app-x86_64-debug.apk + app-file: app/build/outputs/apk/gplay/debug/app-gplay-x86_64-debug.apk env: | USERNAME=maestroelement PASSWORD=${{ secrets.MATRIX_MAESTRO_ACCOUNT_PASSWORD }} diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 91976f56a0..b1e9dddde9 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -45,7 +45,7 @@ jobs: - name: Additionally upload Nightly APK to browserstack for testing continue-on-error: true # don't block anything by this upload failing (for now) run: | - curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/nightly/app-universal-nightly.apk" -F "custom_id=element-x-android-nightly" + curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_PASSWORD" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@app/build/outputs/apk/gplay/nightly/app-gplay-universal-nightly.apk" -F "custom_id=element-x-android-nightly" env: BROWSERSTACK_USERNAME: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_USERNAME }} BROWSERSTACK_PASSWORD: ${{ secrets.ELEMENT_ANDROID_BROWSERSTACK_ACCESS_KEY }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 59b5f60cec..97e3634a6a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,10 +31,10 @@ jobs: ELEMENT_ANDROID_MAPTILER_API_KEY: ${{ secrets.MAPTILER_KEY }} ELEMENT_ANDROID_MAPTILER_LIGHT_MAP_ID: ${{ secrets.MAPTILER_LIGHT_MAP_ID }} ELEMENT_ANDROID_MAPTILER_DARK_MAP_ID: ${{ secrets.MAPTILER_DARK_MAP_ID }} - run: ./gradlew bundleRelease $CI_GRADLE_ARG_PROPERTIES + run: ./gradlew bundleGplayRelease $CI_GRADLE_ARG_PROPERTIES - name: Upload bundle as artifact uses: actions/upload-artifact@v4 with: - name: elementx-app-bundle-unsigned + name: elementx-app-gplay-bundle-unsigned path: | - app/build/outputs/bundle/release/app-release.aab + app/build/outputs/bundle/gplayRelease/app-gplay-release.aab diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 543a414091..e977af4c86 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -20,6 +20,8 @@ import com.android.build.api.variant.FilterConfiguration.FilterType.ABI import extension.allFeaturesImpl import extension.allLibrariesImpl import extension.allServicesImpl +import extension.koverDependencies +import extension.setupKover import org.jetbrains.kotlin.cli.common.toBooleanLenient plugins { @@ -36,6 +38,8 @@ plugins { // id("com.google.gms.google-services") } +setupKover() + android { namespace = "io.element.android.x" @@ -69,7 +73,7 @@ android { } signingConfigs { - named("debug") { + getByName("debug") { keyAlias = "androiddebugkey" keyPassword = "android" storeFile = file("./signature/debug.keystore") @@ -87,13 +91,13 @@ android { } buildTypes { - named("debug") { + getByName("debug") { resValue("string", "app_name", "Element X dbg") applicationIdSuffix = ".debug" signingConfig = signingConfigs.getByName("debug") } - named("release") { + getByName("release") { resValue("string", "app_name", "Element X") signingConfig = signingConfigs.getByName("debug") @@ -124,7 +128,7 @@ android { // We upload the universal APK to fix this error: // "App Distribution found more than 1 output file for this variant. // Please contact firebase-support@google.com for help using APK splits with App Distribution." - artifactPath = "$rootDir/app/build/outputs/apk/nightly/app-universal-nightly.apk" + artifactPath = "$rootDir/app/build/outputs/apk/gplay/nightly/app-gplay-universal-nightly.apk" // artifactType = "AAB" // artifactPath = "$rootDir/app/build/outputs/bundle/nightly/app-nightly.aab" // This file will be generated by the GitHub action @@ -143,6 +147,20 @@ android { buildFeatures { buildConfig = true } + flavorDimensions += "store" + productFlavors { + create("gplay") { + dimension = "store" + isDefault = true + buildConfigField("String", "SHORT_FLAVOR_DESCRIPTION", "\"G\"") + buildConfigField("String", "FLAVOR_DESCRIPTION", "\"GooglePlay\"") + } + create("fdroid") { + dimension = "store" + buildConfigField("String", "SHORT_FLAVOR_DESCRIPTION", "\"F\"") + buildConfigField("String", "FLAVOR_DESCRIPTION", "\"FDroid\"") + } + } } androidComponents { @@ -222,6 +240,11 @@ dependencies { implementation(projects.appconfig) anvil(projects.anvilcodegen) + // Comment to not include firebase in the project + "gplayImplementation"(projects.libraries.pushproviders.firebase) + // Comment to not include unified push in the project + implementation(projects.libraries.pushproviders.unifiedpush) + implementation(libs.appyx.core) implementation(libs.androidx.splash) implementation(libs.androidx.core) @@ -251,4 +274,5 @@ dependencies { testImplementation(projects.libraries.matrix.test) ksp(libs.showkase.processor) + koverDependencies() } diff --git a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt index 995dcf61e5..bf4880b372 100644 --- a/app/src/main/kotlin/io/element/android/x/di/AppModule.kt +++ b/app/src/main/kotlin/io/element/android/x/di/AppModule.kt @@ -91,10 +91,8 @@ object AppModule { gitRevisionDate = "TODO", // BuildConfig.GIT_BRANCH_NAME, gitBranchName = "TODO", - // BuildConfig.FLAVOR_DESCRIPTION, - flavorDescription = "TODO", - // BuildConfig.SHORT_FLAVOR_DESCRIPTION, - flavorShortDescription = "TODO", + flavorDescription = BuildConfig.FLAVOR_DESCRIPTION, + flavorShortDescription = BuildConfig.SHORT_FLAVOR_DESCRIPTION, ) @Provides diff --git a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt index 2fc834086a..2123717f8e 100755 --- a/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt +++ b/features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt @@ -199,6 +199,7 @@ class DefaultBugReporter @Inject constructor( // add some github labels builder.addFormDataPart("label", buildMeta.versionName) + builder.addFormDataPart("label", buildMeta.flavorDescription) if (crashCallStack.isNotEmpty() && withCrashLogs) { builder.addFormDataPart("label", "crash") } diff --git a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt index 44e085c569..c5317e5e48 100755 --- a/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt +++ b/features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt @@ -48,7 +48,7 @@ class DefaultBugReporterTest { val sut = createDefaultBugReporter(server) var onUploadCancelledCalled = false var onUploadFailedCalled = false - var progressValues = mutableListOf() + val progressValues = mutableListOf() var onUploadSucceedCalled = false sut.sendBugReport( withDevicesLogs = true, @@ -80,7 +80,7 @@ class DefaultBugReporterTest { server.shutdown() assertThat(onUploadCancelledCalled).isFalse() assertThat(onUploadFailedCalled).isFalse() - assertThat(progressValues.size).isEqualTo(10) + assertThat(progressValues.size).isEqualTo(11) assertThat(onUploadSucceedCalled).isTrue() } @@ -97,7 +97,7 @@ class DefaultBugReporterTest { var onUploadCancelledCalled = false var onUploadFailedCalled = false var onUploadFailedReason: String? = null - var progressValues = mutableListOf() + val progressValues = mutableListOf() var onUploadSucceedCalled = false sut.sendBugReport( withDevicesLogs = true, @@ -131,7 +131,7 @@ class DefaultBugReporterTest { assertThat(onUploadCancelledCalled).isFalse() assertThat(onUploadFailedCalled).isTrue() assertThat(onUploadFailedReason).isEqualTo("An error body") - assertThat(progressValues.size).isEqualTo(10) + assertThat(progressValues.size).isEqualTo(11) assertThat(onUploadSucceedCalled).isFalse() } diff --git a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt index 625d2cf7dc..caa928c51d 100644 --- a/plugins/src/main/kotlin/extension/DependencyHandleScope.kt +++ b/plugins/src/main/kotlin/extension/DependencyHandleScope.kt @@ -87,10 +87,6 @@ fun DependencyHandlerScope.allLibrariesImpl() { implementation(project(":libraries:permissions:impl")) implementation(project(":libraries:push:impl")) implementation(project(":libraries:push:impl")) - // Comment to not include firebase in the project - implementation(project(":libraries:pushproviders:firebase")) - // Comment to not include unified push in the project - implementation(project(":libraries:pushproviders:unifiedpush")) implementation(project(":libraries:featureflag:impl")) implementation(project(":libraries:pushstore:impl")) implementation(project(":libraries:preferences:impl")) diff --git a/plugins/src/main/kotlin/extension/KoverExtension.kt b/plugins/src/main/kotlin/extension/KoverExtension.kt index 42b7a5bc1f..9185bfb1b0 100644 --- a/plugins/src/main/kotlin/extension/KoverExtension.kt +++ b/plugins/src/main/kotlin/extension/KoverExtension.kt @@ -97,8 +97,8 @@ fun Project.setupKover() { defaults { // add reports of both 'debug' and 'release' Android build variants to default reports - mergeWith("debug") - mergeWith("release") + mergeWith("gplayDebug") + mergeWith("gplayRelease") verify { onCheck = true @@ -202,7 +202,7 @@ fun Project.setupKover() { } } - androidReports("release") {} + androidReports("gplayRelease") {} } } diff --git a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts index 015f0d4db8..2ac8fb8b72 100644 --- a/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts +++ b/plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts @@ -17,12 +17,10 @@ /** * This will generate the plugin "io.element.android-compose-application" to use by app and samples modules */ -import extension.koverDependencies import extension.androidConfig import extension.commonDependencies import extension.composeConfig import extension.composeDependencies -import extension.setupKover import org.gradle.accessors.dm.LibrariesForLibs val libs = the() @@ -32,8 +30,6 @@ plugins { id("com.autonomousapps.dependency-analysis") } -setupKover() - android { androidConfig(project) composeConfig(libs) @@ -46,5 +42,4 @@ dependencies { commonDependencies(libs) composeDependencies(libs) coreLibraryDesugaring(libs.android.desugar) - koverDependencies() } diff --git a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt index cc54fd051f..fc8fe81d8a 100644 --- a/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt +++ b/samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt @@ -43,10 +43,8 @@ object Singleton { gitRevisionDate = "TODO", // BuildConfig.GIT_BRANCH_NAME, gitBranchName = "TODO", - // BuildConfig.FLAVOR_DESCRIPTION, - flavorDescription = "TODO", - // BuildConfig.SHORT_FLAVOR_DESCRIPTION, - flavorShortDescription = "TODO", + flavorDescription = "NA", + flavorShortDescription = "NA", ) init { diff --git a/tools/release/release.sh b/tools/release/release.sh index 26a94cb09e..f793ac2a4e 100755 --- a/tools/release/release.sh +++ b/tools/release/release.sh @@ -143,7 +143,7 @@ git commit -a -m "Setting version for the release ${version}" printf "\n================================================================================\n" printf "Building the bundle locally first...\n" -./gradlew clean app:bundleRelease +./gradlew clean app:bundleGplayRelease printf "\n================================================================================\n" printf "Running towncrier...\n" @@ -218,7 +218,7 @@ fi printf "\n================================================================================\n" printf "Wait for the GitHub action https://github.com/element-hq/element-x-android/actions/workflows/release.yml?query=branch%%3Amain to build the 'main' branch.\n" -read -p "After GHA is finished, please enter the artifact URL (for 'elementx-app-bundle-unsigned'): " artifactUrl +read -p "After GHA is finished, please enter the artifact URL (for 'elementx-app-gplay-bundle-unsigned'): " artifactUrl printf "\n================================================================================\n" printf "Downloading the artifact...\n" @@ -235,7 +235,7 @@ python3 ./tools/github/download_github_artifacts.py \ printf "\n================================================================================\n" printf "Unzipping the artifact...\n" -unzip ${targetPath}/elementx-app-bundle-unsigned.zip -d ${targetPath} +unzip ${targetPath}/elementx-app-gplay-bundle-unsigned.zip -d ${targetPath} unsignedBundlePath="${targetPath}/app-release.aab" signedBundlePath="${targetPath}/app-release-signed.aab"