// Top-level build file where you can add configuration options common to all sub-projects/modules. import io.gitlab.arturbosch.detekt.Detekt import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask import net.waterfox.android.gradle.tasks.GithubDetailsTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile buildscript { // This logic is duplicated in the allprojects block: I don't know how to fix that. repositories { maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" content { // Improve performance: only check moz maven for mozilla deps. includeGroupByRegex RepoMatching.mozilla } } maven { name "Mozilla" url "https://maven.mozilla.org/maven2" content { // Improve performance: only check moz maven for mozilla deps. includeGroupByRegex RepoMatching.mozilla } } if (project.hasProperty("googleRepo")) { maven { name "Google" allowInsecureProtocol true // Local Nexus in CI uses HTTP url project.property("googleRepo") } } else { google() { content { // Improve performance: only check google maven for google deps. includeGroupByRegex RepoMatching.androidx includeGroupByRegex RepoMatching.comAndroid includeGroupByRegex RepoMatching.comGoogle } } } if (project.hasProperty("centralRepo")) { maven { name "MavenCentral" url project.property("centralRepo") allowInsecureProtocol true // Local Nexus in CI uses HTTP } } else { mavenCentral() { content { // Improve security: don't search deps with known repos. excludeGroupByRegex RepoMatching.mozilla excludeGroupByRegex RepoMatching.androidx excludeGroupByRegex RepoMatching.comAndroid } } } } dependencies { classpath Deps.tools_androidgradle classpath Deps.tools_kotlingradle classpath Deps.tools_benchmarkgradle classpath Deps.androidx_safeargs classpath Deps.osslicenses_plugin } } plugins { id("io.gitlab.arturbosch.detekt").version("1.19.0") } allprojects { // This logic is duplicated in the buildscript block: I don't know how to fix that. repositories { maven { name "Mozilla Nightly" url "https://nightly.maven.mozilla.org/maven2" content { // Improve performance: only check moz maven for mozilla deps. includeGroupByRegex RepoMatching.mozilla } } maven { name "Mozilla" url "https://maven.mozilla.org/maven2" content { // Improve performance: only check moz maven for mozilla deps. includeGroupByRegex RepoMatching.mozilla } } if (project.hasProperty("googleRepo")) { maven { name "Google" url project.property("googleRepo") allowInsecureProtocol true // Local Nexus in CI uses HTTP } } else { google() { content { // Improve performance: only check google maven for google deps. includeGroupByRegex RepoMatching.androidx includeGroupByRegex RepoMatching.comAndroid includeGroupByRegex RepoMatching.comGoogle } } } if (project.hasProperty("centralRepo")) { maven { name "MavenCentral" url project.property("centralRepo") allowInsecureProtocol true // Local Nexus in CI uses HTTP } } else { mavenCentral() { content { // Improve security: don't search deps with known repos. excludeGroupByRegex RepoMatching.mozilla excludeGroupByRegex RepoMatching.androidx excludeGroupByRegex RepoMatching.comAndroid } } } } tasks.withType(KotlinCompile).configureEach { kotlinOptions.jvmTarget = "17" kotlinOptions.allWarningsAsErrors = false kotlinOptions.freeCompilerArgs += [ "-opt-in=kotlin.RequiresOptIn", "-Xjvm-default=all" ] } } subprojects { afterEvaluate { if (it.hasProperty('android')) { android { compileOptions { sourceCompatibility JavaVersion.VERSION_17 targetCompatibility JavaVersion.VERSION_17 } } } } } tasks.register('clean', Delete) { delete rootProject.layout.buildDirectory } detekt { input = files("$projectDir/app/src") config = files("$projectDir/config/detekt.yml") reports { html { enabled = true destination = file("$projectDir/build/reports/detekt.html") } xml { enabled = false } txt { enabled = false } } } tasks.withType(Detekt).configureEach() { autoCorrect = true exclude "**/test/**" exclude "**/androidTest/**" exclude "**/build/**" exclude "**/resources/**" exclude "**/tmp/**" } // Apply same path exclusions as for the main task tasks.withType(DetektCreateBaselineTask).configureEach() { exclude "**/test/**" exclude "**/androidTest/**" exclude "**/build/**" exclude "**/resources/**" exclude "**/tmp/**" } configurations { ktlint } dependencies { ktlint("com.pinterest:ktlint:0.47.0") { attributes { attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL)) } } detekt project(":mozilla-detekt-rules") detekt "io.gitlab.arturbosch.detekt:detekt-cli:${Versions.detekt}" } tasks.register('ktlint', JavaExec) { group = "verification" description = "Check Kotlin code style." classpath = configurations.ktlint mainClass.set("com.pinterest.ktlint.Main") args "app/src/**/*.kt", "!**/build/**/*.kt", "--baseline=ktlint-baseline.xml" } tasks.register('ktlintFormat', JavaExec) { description = "Fix Kotlin code style deviations." classpath = configurations.ktlint mainClass.set("com.pinterest.ktlint.Main") args "-F", "app/src/**/*.kt", "!**/build/**/*.kt", "--baseline=ktlint-baseline.xml" jvmArgs("--add-opens", "java.base/java.lang=ALL-UNNAMED") } tasks.withType(Detekt.class).configureEach { exclude("**/resources/**") exclude("**/tmp/**") } tasks.register("listRepositories") { doLast { println "Repositories:" project.repositories.each { println "Name: " + it.name + "; url: " + it.url } } } tasks.register("githubTestDetails", GithubDetailsTask) { text = "### [Unit Test Results]({reportsUrl}/test/testDebugUnitTest/index.html)" } tasks.register("githubLintDetektDetails", GithubDetailsTask) { text = "### [Detekt Results]({reportsUrl}/detekt.html)" } tasks.register("githubLintAndroidDetails", GithubDetailsTask) { text = "### [Android Lint Results]({reportsUrl}/lint-results-debug.html)" }