2 replace all actions have been performed: - "SPDX-License-Identifier: AGPL-3.0-only" to "SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial" - "Please see LICENSE in the repository root for full details." to "Please see LICENSE files in the repository root for full details."
218 lines
8.3 KiB
Kotlin
218 lines
8.3 KiB
Kotlin
/*
|
|
* Copyright 2022-2024 New Vector Ltd.
|
|
*
|
|
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
|
|
* Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
buildscript {
|
|
dependencies {
|
|
classpath(libs.kotlin.gradle.plugin)
|
|
classpath(libs.gms.google.services)
|
|
}
|
|
}
|
|
|
|
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
|
plugins {
|
|
id("io.element.android-root")
|
|
alias(libs.plugins.android.application) apply false
|
|
alias(libs.plugins.android.library) apply false
|
|
alias(libs.plugins.kotlin.android) apply false
|
|
alias(libs.plugins.compose.compiler) apply false
|
|
alias(libs.plugins.ksp) apply false
|
|
alias(libs.plugins.anvil) apply false
|
|
alias(libs.plugins.kotlin.jvm) apply false
|
|
alias(libs.plugins.kapt) apply false
|
|
alias(libs.plugins.dependencycheck) apply false
|
|
alias(libs.plugins.dependencyanalysis)
|
|
alias(libs.plugins.detekt)
|
|
alias(libs.plugins.ktlint)
|
|
alias(libs.plugins.dependencygraph)
|
|
alias(libs.plugins.sonarqube)
|
|
}
|
|
|
|
tasks.register<Delete>("clean").configure {
|
|
delete(rootProject.layout.buildDirectory)
|
|
}
|
|
|
|
allprojects {
|
|
// Detekt
|
|
apply {
|
|
plugin("io.gitlab.arturbosch.detekt")
|
|
}
|
|
detekt {
|
|
// preconfigure defaults
|
|
buildUponDefaultConfig = true
|
|
// activate all available (even unstable) rules.
|
|
allRules = true
|
|
// point to your custom config defining rules to run, overwriting default behavior
|
|
config.from(files("$rootDir/tools/detekt/detekt.yml"))
|
|
}
|
|
dependencies {
|
|
detektPlugins("io.nlopez.compose.rules:detekt:0.4.22")
|
|
}
|
|
|
|
tasks.withType<io.gitlab.arturbosch.detekt.Detekt>().configureEach {
|
|
exclude("io/element/android/tests/konsist/failures/**")
|
|
}
|
|
|
|
// KtLint
|
|
apply {
|
|
plugin("org.jlleitschuh.gradle.ktlint")
|
|
}
|
|
|
|
// See https://github.com/JLLeitschuh/ktlint-gradle#configuration
|
|
configure<org.jlleitschuh.gradle.ktlint.KtlintExtension> {
|
|
// See https://github.com/pinterest/ktlint/releases/
|
|
// TODO Regularly check for new version here ^
|
|
version.set("1.1.1")
|
|
android.set(true)
|
|
ignoreFailures.set(false)
|
|
enableExperimentalRules.set(true)
|
|
// display the corresponding rule
|
|
verbose.set(true)
|
|
reporters {
|
|
reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.PLAIN)
|
|
// To have XML report for Danger
|
|
reporter(org.jlleitschuh.gradle.ktlint.reporter.ReporterType.CHECKSTYLE)
|
|
}
|
|
val generatedPath = "${layout.buildDirectory.asFile.get()}/generated/"
|
|
filter {
|
|
exclude { element -> element.file.path.contains(generatedPath) }
|
|
exclude("io/element/android/tests/konsist/failures/**")
|
|
}
|
|
}
|
|
// Dependency check
|
|
apply {
|
|
plugin("org.owasp.dependencycheck")
|
|
}
|
|
|
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
|
|
compilerOptions {
|
|
// Warnings are potential errors, so stop ignoring them
|
|
// This is disabled by default, but the CI will enforce this.
|
|
// You can override by passing `-PallWarningsAsErrors=true` in the command line
|
|
// Or add a line with "allWarningsAsErrors=true" in your ~/.gradle/gradle.properties file
|
|
allWarningsAsErrors = project.properties["allWarningsAsErrors"] == "true"
|
|
|
|
// Uncomment to suppress Compose Kotlin compiler compatibility warning
|
|
// freeCompilerArgs.addAll(listOf("-P", "plugin:androidx.compose.compiler.plugins.kotlin:suppressKotlinVersionCompatibilityCheck=true"))
|
|
}
|
|
}
|
|
}
|
|
|
|
// See https://github.com/autonomousapps/dependency-analysis-android-gradle-plugin/wiki/Customizing-plugin-behavior
|
|
dependencyAnalysis {
|
|
issues {
|
|
all {
|
|
onUnusedDependencies {
|
|
exclude("com.jakewharton.timber:timber")
|
|
}
|
|
onUnusedAnnotationProcessors {}
|
|
onRedundantPlugins {}
|
|
onIncorrectConfiguration {}
|
|
}
|
|
}
|
|
}
|
|
|
|
// To run a sonar analysis:
|
|
// Run './gradlew sonar -Dsonar.login=<SONAR_LOGIN>'
|
|
// The SONAR_LOGIN is stored in passbolt as Token Sonar Cloud Bma
|
|
// Sonar result can be found here: https://sonarcloud.io/project/overview?id=element-x-android
|
|
sonar {
|
|
properties {
|
|
property("sonar.projectName", "element-x-android")
|
|
property("sonar.projectKey", "element-x-android")
|
|
property("sonar.host.url", "https://sonarcloud.io")
|
|
property("sonar.projectVersion", "1.0") // TODO project(":app").android.defaultConfig.versionName)
|
|
property("sonar.sourceEncoding", "UTF-8")
|
|
property("sonar.links.homepage", "https://github.com/element-hq/element-x-android/")
|
|
property("sonar.links.ci", "https://github.com/element-hq/element-x-android/actions")
|
|
property("sonar.links.scm", "https://github.com/element-hq/element-x-android/")
|
|
property("sonar.links.issue", "https://github.com/element-hq/element-x-android/issues")
|
|
property("sonar.organization", "element-hq")
|
|
property("sonar.login", if (project.hasProperty("SONAR_LOGIN")) project.property("SONAR_LOGIN")!! else "invalid")
|
|
|
|
// exclude source code from analyses separated by a colon (:)
|
|
// Exclude Java source
|
|
property("sonar.exclusions", "**/BugReporterMultipartBody.java")
|
|
}
|
|
}
|
|
|
|
allprojects {
|
|
tasks.withType<Test> {
|
|
maxParallelForks = (Runtime.getRuntime().availableProcessors() / 2).coerceAtLeast(1)
|
|
|
|
val isScreenshotTest = project.gradle.startParameter.taskNames.any { it.contains("paparazzi", ignoreCase = true) }
|
|
if (isScreenshotTest) {
|
|
// Increase heap size for screenshot tests
|
|
maxHeapSize = "2g"
|
|
// Record all the languages?
|
|
if (project.hasProperty("allLanguagesNoEnglish")) {
|
|
// Do not record English language
|
|
exclude("ui/*.class")
|
|
} else if (project.hasProperty("allLanguages").not()) {
|
|
// Do not record other languages
|
|
exclude("translations/*.class")
|
|
}
|
|
} else {
|
|
// Disable screenshot tests by default
|
|
exclude("ui/*.class")
|
|
exclude("translations/*.class")
|
|
}
|
|
}
|
|
}
|
|
|
|
// Register quality check tasks.
|
|
tasks.register("runQualityChecks") {
|
|
dependsOn(":tests:konsist:testDebugUnitTest")
|
|
project.subprojects {
|
|
// For some reason `findByName("lint")` doesn't work
|
|
tasks.findByPath("$path:lint")?.let { dependsOn(it) }
|
|
tasks.findByName("detekt")?.let { dependsOn(it) }
|
|
tasks.findByName("ktlintCheck")?.let { dependsOn(it) }
|
|
// tasks.findByName("buildHealth")?.let { dependsOn(it) }
|
|
}
|
|
dependsOn(":app:knitCheck")
|
|
}
|
|
|
|
// Make sure to delete old screenshots before recording new ones
|
|
subprojects {
|
|
val snapshotsDir = File("${project.projectDir}/src/test/snapshots")
|
|
val removeOldScreenshotsTask = tasks.register("removeOldSnapshots") {
|
|
onlyIf { snapshotsDir.exists() }
|
|
doFirst {
|
|
println("Delete previous screenshots located at $snapshotsDir\n")
|
|
snapshotsDir.deleteRecursively()
|
|
}
|
|
}
|
|
tasks.findByName("recordPaparazzi")?.dependsOn(removeOldScreenshotsTask)
|
|
tasks.findByName("recordPaparazziDebug")?.dependsOn(removeOldScreenshotsTask)
|
|
tasks.findByName("recordPaparazziRelease")?.dependsOn(removeOldScreenshotsTask)
|
|
}
|
|
|
|
subprojects {
|
|
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
|
|
compilerOptions {
|
|
if (project.findProperty("composeCompilerReports") == "true") {
|
|
freeCompilerArgs.addAll(
|
|
listOf(
|
|
"-P",
|
|
"plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" +
|
|
"${project.layout.buildDirectory.asFile.get().absolutePath}/compose_compiler"
|
|
)
|
|
)
|
|
}
|
|
if (project.findProperty("composeCompilerMetrics") == "true") {
|
|
freeCompilerArgs.addAll(
|
|
listOf(
|
|
"-P",
|
|
"plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" +
|
|
"${project.layout.buildDirectory.asFile.get().absolutePath}/compose_compiler"
|
|
)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|