forked from mozilla/glean
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.gradle
201 lines (173 loc) · 6.52 KB
/
build.gradle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
/* 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_gradle_plugin: '7.0.0',
android_maven_publish_plugin: '3.6.2',
coroutines: '1.5.0',
jna: '5.8.0',
junit: '4.12',
mockito: '3.11.2', // This is different than a-c, but we're fine, it's only tests.
mockwebserver: '4.9.1', // This is different than a-c, but we're fine, it's only tests.
kotlin: '1.5.20',
robolectric: '4.5.1', // This is different than a-c, but we're fine, it's only tests.
rust_android_plugin: '0.9.0',
// Android X dependencies
androidx_annotation: '1.1.0',
androidx_appcompat: '1.2.0',
androidx_browser: '1.2.0',
androidx_core: '1.3.0',
androidx_espresso: '3.3.0',
androidx_junit: '1.1.2',
androidx_lifecycle_extensions: '2.2.0',
androidx_test: '1.3.0',
androidx_work: '2.4.0',
androidx_uiautomator: '2.2.0',
]
ext.build = [
ndkVersion: "21.3.6528147", // Keep it in sync in TC Dockerfile.
compileSdkVersion: 29,
targetSdkVersion: 28,
minSdkVersion: 21, // So that we can publish for aarch64.
]
repositories {
google()
mavenCentral()
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 "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"
// 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.18.1")
}
allprojects {
repositories {
google()
mavenCentral()
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')
}
// Default to debug builds, but force release builds on CI
ext.cargoProfile = "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.cargoProfile = "release"
ext.extraCargoBuildArguments = ["--locked"]
}
// 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':
case 'darwin-x86-64':
case 'darwin-aarch64':
ext.nativeRustTarget = 'darwin'
break
case 'linux-x86-64':
ext.nativeRustTarget = 'linux-x86-64'
break
case 'win32-x86-64':
ext.nativeRustTarget = 'win32-x86-64-gnu'
break
}
ext.rustTargets += ext.nativeRustTarget
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"
}
}
}
}
detekt {
input = files("${projectDir}/glean-core", "${projectDir}/samples/android", "buildSrc")
failFast = false
config = files("${projectDir}/.detekt.yml")
buildUponDefaultConfig = true
reports {
xml.enabled = false
}
}
tasks.withType(io.gitlab.arturbosch.detekt.Detekt) {
exclude(".*test.*,.*/resources/.*,.*/tmp/.*,.*/build/.*")
}
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"
}