Loading .gitlab-ci.yml +32 −7 Original line number Diff line number Diff line Loading @@ -8,8 +8,8 @@ variables: GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle" GRADLE_OPTS: "-Dorg.gradle.daemon=false" SENTRY_DSN: $SENTRY_DSN APK_PATH: "app/build/outputs/apk/release" UNSIGNED_APK: "AppLounge_release.apk" APK_PATH: "app/build/outputs/apk/full/release" UNSIGNED_APK: "AppLounge_fullRelease.apk" COMMUNITY_APK: "AppLounge_release_community.apk" OFFICIAL_APK: "AppLounge_release_official.apk" TEST_APK: "AppLounge_release_test.apk" Loading Loading @@ -95,10 +95,35 @@ build-release: <<: *build_rules stage: build script: - ./gradlew assembleRelease - ./gradlew assembleFullRelease artifacts: paths: - app/build/outputs/apk/release - app/build/outputs/apk/full/release build-release-anonymous-less: stage: build rules: - when: manual allow_failure: true interruptible: false tags: - android-app cache: - key: prefix: "android-app-${CI_PROJECT_ID}-${CI_DEFAULT_BRANCH}" files: - gradle/wrapper/gradle-wrapper.properties - gradle/libs.versions.toml paths: - .gradle/wrapper/dists/ - .gradle/caches/modules-2/ - .gradle/caches/build-cache-1/ policy: pull script: - ./gradlew assembleAnonymousLessRelease artifacts: paths: - app/build/outputs/apk/anonymousLess/release analysis: stage: code-quality Loading @@ -116,8 +141,8 @@ tests: <<: *build_rules needs: [] script: - ./gradlew testReleaseUnitTest jacocoReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml - ./gradlew testFullReleaseUnitTest jacocoFullReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoFullReleaseReport/jacocoFullReleaseReport.xml coverage: "/Total.*?([0-9]{1,3})%/" artifacts: paths: Loading @@ -126,7 +151,7 @@ tests: junit: app/build/test-results/*/TEST-*.xml coverage_report: coverage_format: jacoco path: app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml path: app/build/reports/jacoco/jacocoFullReleaseReport/jacocoFullReleaseReport.xml generate-apks: stage: build Loading app/build.gradle +26 −10 Original line number Diff line number Diff line Loading @@ -89,15 +89,16 @@ def isAndroidProject = { Project module -> return module.plugins.hasPlugin('com.android.application') || module.plugins.hasPlugin('com.android.library') } def collectJacocoTestTaskNames = { Project module, String unitTestTaskName -> def collectJacocoTestTaskNames = { Project module, String appTestTaskName, String libraryTestTaskName -> if (isAndroidProject(module)) { return [unitTestTaskName] return module.plugins.hasPlugin('com.android.application') ? [appTestTaskName] : [libraryTestTaskName] } return ['test'] } def collectJacocoClassDirectories = { Project module, String variantName -> def collectJacocoClassDirectories = { Project module, String appVariantName, String libraryVariantName -> def variantName = module.plugins.hasPlugin('com.android.application') ? appVariantName : libraryVariantName def variantCap = variantName.capitalize() def classDirectories = [ module.fileTree(module.layout.buildDirectory.dir("intermediates/javac/${variantName}/classes").get().asFile) { Loading Loading @@ -135,8 +136,8 @@ def collectJacocoSourceDirectories = { Project module -> ] } def collectJacocoExecutionData = { Project module, String unitTestTaskName -> return collectJacocoTestTaskNames(module, unitTestTaskName).collect { testTaskName -> def collectJacocoExecutionData = { Project module, String appTestTaskName, String libraryTestTaskName -> return collectJacocoTestTaskNames(module, appTestTaskName, libraryTestTaskName).collect { testTaskName -> module.fileTree(dir: module.layout.buildDirectory.get().asFile, includes: [ "jacoco/${testTaskName}.exec", "outputs/unit_test_code_coverage/**/${testTaskName}.exec", Loading Loading @@ -202,6 +203,19 @@ android { } } flavorDimensions "variant" productFlavors { full { dimension "variant" buildConfigField "boolean", "ANONYMOUS_MODE_ENABLED", "true" } anonymousLess { dimension "variant" buildConfigField "boolean", "ANONYMOUS_MODE_ENABLED", "false" } } buildTypes { debug { signingConfig = signingConfigs.platformConfig Loading Loading @@ -234,16 +248,18 @@ android { androidComponents { onVariants(selector().all()) { variant -> variant.outputs.each { output -> output.outputFileName.set("AppLounge_${variant.buildType}.apk") output.outputFileName.set("AppLounge_${variant.name}.apk") } def variantCap = variant.name.capitalize() def unitTestTaskName = "test${variantCap}UnitTest" def buildTypeCap = variant.buildType.capitalize() def appTestTaskName = "test${variantCap}UnitTest" def libraryTestTaskName = "test${buildTypeCap}UnitTest" def reportTaskName = "jacoco${variantCap}Report" tasks.register(reportTaskName, JacocoReport) { dependsOn(jacocoCoverageProjects.collectMany { module -> collectJacocoTestTaskNames(module, unitTestTaskName).collect { testTaskName -> collectJacocoTestTaskNames(module, appTestTaskName, libraryTestTaskName).collect { testTaskName -> "${module.path}:${testTaskName}" } }) Loading @@ -259,7 +275,7 @@ androidComponents { classDirectories.from = files( jacocoCoverageProjects.collectMany { module -> collectJacocoClassDirectories(module, variant.name) collectJacocoClassDirectories(module, variant.name, variant.buildType) } ) Loading @@ -271,7 +287,7 @@ androidComponents { executionData.from = files( jacocoCoverageProjects.collect { module -> collectJacocoExecutionData(module, unitTestTaskName) collectJacocoExecutionData(module, appTestTaskName, libraryTestTaskName) } ) } Loading app/src/main/java/foundation/e/apps/feature/auth/login/component/LoginSelectionContent.kt +28 −25 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import foundation.e.apps.BuildConfig import foundation.e.apps.R import foundation.e.apps.feature.auth.login.LoginSelectionTestTags Loading Loading @@ -197,6 +198,7 @@ private fun LoginSelectionButtons( ) { Text(text = stringResource(R.string.sign_in_google)) } if (BuildConfig.ANONYMOUS_MODE_ENABLED) { Spacer(modifier = Modifier.height(ButtonVerticalSpacing)) OutlinedButton( onClick = onAnonymousClick, Loading Loading @@ -225,6 +227,7 @@ private fun LoginSelectionButtons( } } Spacer(modifier = Modifier.height(ButtonVerticalSpacing)) } Text( text = stringResource(R.string.or), style = MaterialTheme.typography.bodyMedium, Loading Loading
.gitlab-ci.yml +32 −7 Original line number Diff line number Diff line Loading @@ -8,8 +8,8 @@ variables: GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle" GRADLE_OPTS: "-Dorg.gradle.daemon=false" SENTRY_DSN: $SENTRY_DSN APK_PATH: "app/build/outputs/apk/release" UNSIGNED_APK: "AppLounge_release.apk" APK_PATH: "app/build/outputs/apk/full/release" UNSIGNED_APK: "AppLounge_fullRelease.apk" COMMUNITY_APK: "AppLounge_release_community.apk" OFFICIAL_APK: "AppLounge_release_official.apk" TEST_APK: "AppLounge_release_test.apk" Loading Loading @@ -95,10 +95,35 @@ build-release: <<: *build_rules stage: build script: - ./gradlew assembleRelease - ./gradlew assembleFullRelease artifacts: paths: - app/build/outputs/apk/release - app/build/outputs/apk/full/release build-release-anonymous-less: stage: build rules: - when: manual allow_failure: true interruptible: false tags: - android-app cache: - key: prefix: "android-app-${CI_PROJECT_ID}-${CI_DEFAULT_BRANCH}" files: - gradle/wrapper/gradle-wrapper.properties - gradle/libs.versions.toml paths: - .gradle/wrapper/dists/ - .gradle/caches/modules-2/ - .gradle/caches/build-cache-1/ policy: pull script: - ./gradlew assembleAnonymousLessRelease artifacts: paths: - app/build/outputs/apk/anonymousLess/release analysis: stage: code-quality Loading @@ -116,8 +141,8 @@ tests: <<: *build_rules needs: [] script: - ./gradlew testReleaseUnitTest jacocoReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml - ./gradlew testFullReleaseUnitTest jacocoFullReleaseReport -PtestAccountName="$testAccountName" -PtestAccountPwd="$testAccountPwd" -PtestServerUrl="$testServerUrl" - python3 scripts/print_instruction_coverage.py app/build/reports/jacoco/jacocoFullReleaseReport/jacocoFullReleaseReport.xml coverage: "/Total.*?([0-9]{1,3})%/" artifacts: paths: Loading @@ -126,7 +151,7 @@ tests: junit: app/build/test-results/*/TEST-*.xml coverage_report: coverage_format: jacoco path: app/build/reports/jacoco/jacocoReleaseReport/jacocoReleaseReport.xml path: app/build/reports/jacoco/jacocoFullReleaseReport/jacocoFullReleaseReport.xml generate-apks: stage: build Loading
app/build.gradle +26 −10 Original line number Diff line number Diff line Loading @@ -89,15 +89,16 @@ def isAndroidProject = { Project module -> return module.plugins.hasPlugin('com.android.application') || module.plugins.hasPlugin('com.android.library') } def collectJacocoTestTaskNames = { Project module, String unitTestTaskName -> def collectJacocoTestTaskNames = { Project module, String appTestTaskName, String libraryTestTaskName -> if (isAndroidProject(module)) { return [unitTestTaskName] return module.plugins.hasPlugin('com.android.application') ? [appTestTaskName] : [libraryTestTaskName] } return ['test'] } def collectJacocoClassDirectories = { Project module, String variantName -> def collectJacocoClassDirectories = { Project module, String appVariantName, String libraryVariantName -> def variantName = module.plugins.hasPlugin('com.android.application') ? appVariantName : libraryVariantName def variantCap = variantName.capitalize() def classDirectories = [ module.fileTree(module.layout.buildDirectory.dir("intermediates/javac/${variantName}/classes").get().asFile) { Loading Loading @@ -135,8 +136,8 @@ def collectJacocoSourceDirectories = { Project module -> ] } def collectJacocoExecutionData = { Project module, String unitTestTaskName -> return collectJacocoTestTaskNames(module, unitTestTaskName).collect { testTaskName -> def collectJacocoExecutionData = { Project module, String appTestTaskName, String libraryTestTaskName -> return collectJacocoTestTaskNames(module, appTestTaskName, libraryTestTaskName).collect { testTaskName -> module.fileTree(dir: module.layout.buildDirectory.get().asFile, includes: [ "jacoco/${testTaskName}.exec", "outputs/unit_test_code_coverage/**/${testTaskName}.exec", Loading Loading @@ -202,6 +203,19 @@ android { } } flavorDimensions "variant" productFlavors { full { dimension "variant" buildConfigField "boolean", "ANONYMOUS_MODE_ENABLED", "true" } anonymousLess { dimension "variant" buildConfigField "boolean", "ANONYMOUS_MODE_ENABLED", "false" } } buildTypes { debug { signingConfig = signingConfigs.platformConfig Loading Loading @@ -234,16 +248,18 @@ android { androidComponents { onVariants(selector().all()) { variant -> variant.outputs.each { output -> output.outputFileName.set("AppLounge_${variant.buildType}.apk") output.outputFileName.set("AppLounge_${variant.name}.apk") } def variantCap = variant.name.capitalize() def unitTestTaskName = "test${variantCap}UnitTest" def buildTypeCap = variant.buildType.capitalize() def appTestTaskName = "test${variantCap}UnitTest" def libraryTestTaskName = "test${buildTypeCap}UnitTest" def reportTaskName = "jacoco${variantCap}Report" tasks.register(reportTaskName, JacocoReport) { dependsOn(jacocoCoverageProjects.collectMany { module -> collectJacocoTestTaskNames(module, unitTestTaskName).collect { testTaskName -> collectJacocoTestTaskNames(module, appTestTaskName, libraryTestTaskName).collect { testTaskName -> "${module.path}:${testTaskName}" } }) Loading @@ -259,7 +275,7 @@ androidComponents { classDirectories.from = files( jacocoCoverageProjects.collectMany { module -> collectJacocoClassDirectories(module, variant.name) collectJacocoClassDirectories(module, variant.name, variant.buildType) } ) Loading @@ -271,7 +287,7 @@ androidComponents { executionData.from = files( jacocoCoverageProjects.collect { module -> collectJacocoExecutionData(module, unitTestTaskName) collectJacocoExecutionData(module, appTestTaskName, libraryTestTaskName) } ) } Loading
app/src/main/java/foundation/e/apps/feature/auth/login/component/LoginSelectionContent.kt +28 −25 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import foundation.e.apps.BuildConfig import foundation.e.apps.R import foundation.e.apps.feature.auth.login.LoginSelectionTestTags Loading Loading @@ -197,6 +198,7 @@ private fun LoginSelectionButtons( ) { Text(text = stringResource(R.string.sign_in_google)) } if (BuildConfig.ANONYMOUS_MODE_ENABLED) { Spacer(modifier = Modifier.height(ButtonVerticalSpacing)) OutlinedButton( onClick = onAnonymousClick, Loading Loading @@ -225,6 +227,7 @@ private fun LoginSelectionButtons( } } Spacer(modifier = Modifier.height(ButtonVerticalSpacing)) } Text( text = stringResource(R.string.or), style = MaterialTheme.typography.bodyMedium, Loading