/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // Top-level build file where you can add configuration options common to all sub-projects/modules. // This is based off: // https://github.com/mozilla/application-services/blob/84e077d1534dc287bbd472da658ce22eea5af032/build.gradle buildscript { // Define the version of the used dependencies in a single place, to ease // changing them. Please note that, for using in Android-Components, the // versions below must match the ones in that repository. ext.versions = [ android_components: '5.0.0', android_gradle_plugin: '3.4.1', android_maven_publish_plugin: '3.6.2', coroutines: '1.2.2', dokka: '0.9.17', jna: '5.2.0', junit: '4.12', mockito: '2.24.5', mockwebserver: '3.10.0', kotlin: '1.3.40', robolectric: '4.2.1', // This is different than a-c, but we're fine, it's only tests. rust_android_plugin: '0.8.1', // Android X dependencies androidx_annotation: '1.0.2', androidx_appcompat: '1.0.0', androidx_browser: '1.0.0', androidx_core: '1.0.0', androidx_espresso: '3.2.0', androidx_junit: '1.1.1', androidx_test: '1.2.0', androidx_work: '2.0.1', ] ext.build = [ compileSdkVersion: 29, targetSdkVersion: 28, minSdkVersion: 21, // So that we can publish for aarch64. ] repositories { google() jcenter() maven { url "https://plugins.gradle.org/m2/" } } dependencies { classpath "com.android.tools.build:gradle:$versions.android_gradle_plugin" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin" // Publish. classpath "digital.wup:android-maven-publish:$versions.android_maven_publish_plugin" classpath "gradle.plugin.org.mozilla.rust-android-gradle:plugin:$versions.rust_android_plugin" // Yes, this is unusual. We want to access some host-specific // computation at build time. classpath "net.java.dev.jna:jna:$versions.jna" // Docs generation classpath "org.jetbrains.dokka:dokka-android-gradle-plugin:$versions.dokka" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } plugins { id("io.gitlab.arturbosch.detekt").version("1.0.0-RC16") } allprojects { repositories { google() jcenter() maven { url "https://maven.mozilla.org/maven2" } } } task clean(type: Delete) { delete rootProject.buildDir } // Avoid Gradle namespace collision. This is here, rather than in `buildscript // { ... }`, to avoid issues with importing. import com.sun.jna.Platform as DefaultPlatform // application-services has hooks to download external dependencies here. This // has been removed since `glean-core` doesn't have any external dependencies for now. Properties localProperties = null if (file('local.properties').canRead()) { localProperties = new Properties() localProperties.load(file('local.properties').newDataInputStream()) logger.lifecycle('Local configuration: loaded local.properties') } // For non-megazord builds, don't do a release build unless we explicitly want // it (e.g. in CI, or if specified in local.properties). This avoids some cases // where two builds of some crates are required when they wouldn't otherwise be, // as well as improving build times for local development. ext.nonMegazordProfile = "debug" // Additionally, we require `--locked` in CI, but not for local builds. // Unlike the above, this can't be overridden by `local.properties` (mainly // because doing so seems pointless, not for any security reason) ext.extraCargoBuildArguments = [] if (System.getenv("CI")) { // Note: CI can still override this (and does for PRs), this // is just the default ext.nonMegazordProfile = "release" ext.extraCargoBuildArguments = ["--locked"] } if (localProperties != null) { String localNonMegazordProfile = localProperties.getProperty( "application-services.nonmegazord-profile") if (localNonMegazordProfile != null) { ext.nonMegazordProfile = localNonMegazordProfile } } // The Cargo targets to invoke. The mapping from short name to target // triple is defined by the `rust-android-gradle` plugin. // They can be overwritten in `local.properties` by the `rust.targets` // attribute. ext.rustTargets = [ 'arm', 'arm64', 'x86_64', 'x86', ] // Generate libs for our current platform so we can run unit tests. switch (DefaultPlatform.RESOURCE_PREFIX) { case 'darwin': ext.rustTargets += 'darwin' break case 'linux-x86-64': ext.rustTargets += 'linux-x86-64' break case 'win32-x86-64': ext.rustTargets += 'win32-x86-64-msvc' break } subprojects { apply plugin: 'digital.wup.android-maven-publish' // Enable Kotlin warnings as errors for all modules tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all { kotlinOptions.allWarningsAsErrors = true } // This allows to invoke Gradle like `./gradlew publishToRootProjectBuildDir` (equivalent to // `./gradlew publish`) and also `./gradlew publishToProjectBuildDir`. publishing { repositories { maven { name = "rootProjectBuildDir" url "file://${project.rootProject.buildDir}/maven" } maven { name = "projectBuildDir" url "file://${project.buildDir}/maven" } } } } // Configure some environment variables, per toolchain, that will apply during // the Cargo build. We assume that the `libs/` directory has been populated // before invoking Gradle (or Cargo). ext.cargoExec = { spec, toolchain -> // Intentionally empty. Removing this block breaks build. } detekt { // The version number is duplicated, please refer to plugins block for more details toolVersion = "1.0.0-RC14" input = files("${projectDir}/glean-core", "${projectDir}/samples/android", "buildSrc") filters = ".*test.*,.*/resources/.*,.*/tmp/.*,.*/build/.*" failFast = false config = files("${projectDir}/.detekt.yml") buildUponDefaultConfig = true reports { xml.enabled = false } } configurations { ktlint } dependencies { ktlint "com.github.shyiko:ktlint:0.31.0" } task ktlint(type: JavaExec, group: "verification") { description = "Check Kotlin code style." classpath = configurations.ktlint main = "com.github.shyiko.ktlint.Main" args "${projectDir}/glean-core/**/*.kt", "${projectDir}/samples/android/**/*.kt", "buildSrc/**/*.kt", "!**/build" } task ktlintFormat(type: JavaExec, group: "formatting") { description = "Fix Kotlin code style deviations." classpath = configurations.ktlint main = "com.github.shyiko.ktlint.Main" args "-F", "${projectDir}/components/**/*.kt", "${projectDir}/gradle-plugin/**/*.kt", "buildSrc/**/*.kt", "!**/build" }