Browse Source

Merge pull request #2213 from element-hq/feature/bma/fdroid

Feature/bma/fdroid
pull/2245/head
Benoit Marty 8 months ago committed by GitHub
parent
commit
e2c9389d36
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 9
      .github/workflows/build.yml
  2. 2
      .github/workflows/maestro.yml
  3. 2
      .github/workflows/nightly.yml
  4. 6
      .github/workflows/release.yml
  5. 32
      app/build.gradle.kts
  6. 6
      app/src/main/kotlin/io/element/android/x/di/AppModule.kt
  7. 1
      features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt
  8. 8
      features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt
  9. 4
      plugins/src/main/kotlin/extension/DependencyHandleScope.kt
  10. 6
      plugins/src/main/kotlin/extension/KoverExtension.kt
  11. 5
      plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts
  12. 6
      samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt
  13. 6
      tools/release/release.sh

9
.github/workflows/build.yml

@ -47,14 +47,15 @@ jobs: @@ -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: @@ -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: @@ -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

2
.github/workflows/maestro.yml

@ -53,7 +53,7 @@ jobs: @@ -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 }}

2
.github/workflows/nightly.yml

@ -45,7 +45,7 @@ jobs: @@ -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 }}

6
.github/workflows/release.yml

@ -31,10 +31,10 @@ jobs: @@ -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

32
app/build.gradle.kts

@ -20,6 +20,8 @@ import com.android.build.api.variant.FilterConfiguration.FilterType.ABI @@ -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 { @@ -36,6 +38,8 @@ plugins {
// id("com.google.gms.google-services")
}
setupKover()
android {
namespace = "io.element.android.x"
@ -69,7 +73,7 @@ android { @@ -69,7 +73,7 @@ android {
}
signingConfigs {
named("debug") {
getByName("debug") {
keyAlias = "androiddebugkey"
keyPassword = "android"
storeFile = file("./signature/debug.keystore")
@ -87,13 +91,13 @@ android { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -251,4 +274,5 @@ dependencies {
testImplementation(projects.libraries.matrix.test)
ksp(libs.showkase.processor)
koverDependencies()
}

6
app/src/main/kotlin/io/element/android/x/di/AppModule.kt

@ -91,10 +91,8 @@ object AppModule { @@ -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

1
features/rageshake/impl/src/main/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporter.kt

@ -199,6 +199,7 @@ class DefaultBugReporter @Inject constructor( @@ -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")
}

8
features/rageshake/impl/src/test/kotlin/io/element/android/features/rageshake/impl/reporter/DefaultBugReporterTest.kt

@ -48,7 +48,7 @@ class DefaultBugReporterTest { @@ -48,7 +48,7 @@ class DefaultBugReporterTest {
val sut = createDefaultBugReporter(server)
var onUploadCancelledCalled = false
var onUploadFailedCalled = false
var progressValues = mutableListOf<Int>()
val progressValues = mutableListOf<Int>()
var onUploadSucceedCalled = false
sut.sendBugReport(
withDevicesLogs = true,
@ -80,7 +80,7 @@ class DefaultBugReporterTest { @@ -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 { @@ -97,7 +97,7 @@ class DefaultBugReporterTest {
var onUploadCancelledCalled = false
var onUploadFailedCalled = false
var onUploadFailedReason: String? = null
var progressValues = mutableListOf<Int>()
val progressValues = mutableListOf<Int>()
var onUploadSucceedCalled = false
sut.sendBugReport(
withDevicesLogs = true,
@ -131,7 +131,7 @@ class DefaultBugReporterTest { @@ -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()
}

4
plugins/src/main/kotlin/extension/DependencyHandleScope.kt

@ -87,10 +87,6 @@ fun DependencyHandlerScope.allLibrariesImpl() { @@ -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"))

6
plugins/src/main/kotlin/extension/KoverExtension.kt

@ -97,8 +97,8 @@ fun Project.setupKover() { @@ -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() { @@ -202,7 +202,7 @@ fun Project.setupKover() {
}
}
androidReports("release") {}
androidReports("gplayRelease") {}
}
}

5
plugins/src/main/kotlin/io.element.android-compose-application.gradle.kts

@ -17,12 +17,10 @@ @@ -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<LibrariesForLibs>()
@ -32,8 +30,6 @@ plugins { @@ -32,8 +30,6 @@ plugins {
id("com.autonomousapps.dependency-analysis")
}
setupKover()
android {
androidConfig(project)
composeConfig(libs)
@ -46,5 +42,4 @@ dependencies { @@ -46,5 +42,4 @@ dependencies {
commonDependencies(libs)
composeDependencies(libs)
coreLibraryDesugaring(libs.android.desugar)
koverDependencies()
}

6
samples/minimal/src/main/kotlin/io/element/android/samples/minimal/Singleton.kt

@ -43,10 +43,8 @@ object Singleton { @@ -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 {

6
tools/release/release.sh

@ -143,7 +143,7 @@ git commit -a -m "Setting version for the release ${version}" @@ -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 @@ -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 \ @@ -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"

Loading…
Cancel
Save