glean/build.gradle

218 строки
7.2 KiB
Groovy

/* 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"
}