Skip to content

Commit fd48bf4

Browse files
authored
Merge pull request #753 from square/rick/dependency-guard
Add the dependency-guard plugin
2 parents 8e92cea + 97b30d4 commit fd48bf4

File tree

23 files changed

+606
-5
lines changed

23 files changed

+606
-5
lines changed

.buildscript/binary-validation.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@ apiValidation {
1515
ignoredProjects += project('samples').subprojects.collect { it.name }
1616
ignoredProjects += project('benchmarks').subprojects.collect { it.name }
1717
}
18-

.buildscript/configure-maven-publish.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
apply plugin: 'com.vanniktech.maven.publish'
2+
// track all runtime classpath dependencies for anything we ship
3+
apply plugin: 'dependency-guard'
24

35
group = GROUP
46
version = VERSION_NAME

.github/workflows/kotlin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ jobs :
7878
gradle-dependencies-cache-key : |
7979
gradle/libs.versions.toml
8080
arguments : |
81-
test apiCheck artifactsCheck lint ktlintCheck jmhJar --no-daemon --stacktrace --continue
81+
test apiCheck artifactsCheck dependencyGuard lint ktlintCheck jmhJar --no-daemon --stacktrace --continue
8282
concurrent : true
8383
gradle-build-scan-report : false
8484
gradle-distribution-sha-256-sum-warning : false

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ buildscript {
2828
plugins {
2929
base
3030
`artifacts-check`
31+
`dependency-guard`
3132
}
3233

3334
// See https://stackoverflow.com/questions/25324880/detect-ide-environment-with-gradle

buildSrc/build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ repositories {
1212
dependencies {
1313
compileOnly(gradleApi())
1414

15+
implementation(libs.android.gradle.plugin)
16+
implementation(libs.dropbox.dependencyGuard)
17+
implementation(libs.kotlin.gradle.plugin)
1518
implementation(libs.squareup.moshi)
1619
implementation(libs.squareup.moshi.adapters)
1720

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import com.android.build.gradle.TestedExtension
2+
import com.dropbox.gradle.plugins.dependencyguard.DependencyGuardPluginExtension
3+
4+
val configurationNames = when {
5+
// record the root project's *build* classpath
6+
project == rootProject -> listOf("classpath")
7+
// Android variants and their configurations are added later in the configuration phase,
8+
// so we can't look them up now using the `configurations` property.
9+
// Instead we can just hard-code "releaseRuntimeClasspath" for any module which has AGP applied.
10+
// This is actually pretty robust, since if this configuration ever changes,
11+
// dependency-guard will fail when trying to look it up.
12+
extensions.findByType<TestedExtension>() != null -> listOf("releaseRuntimeClasspath")
13+
// If we got here, we're either in an empty "parent" module without a build plugin
14+
// (and no configurations), or we're in a vanilla Kotlin module. In this case, we can just look
15+
// at configuration names.
16+
else -> configurations
17+
.map { it.name }
18+
// anything ending with 'runtimeClasspath' but not 'testRuntimeClasspath'
19+
.filter { it.matches("^(?!test)\\w*[rR]untimeClasspath$".toRegex()) }
20+
}
21+
22+
if (configurationNames.isNotEmpty()) {
23+
apply(plugin = "com.dropbox.dependency-guard")
24+
25+
configure<DependencyGuardPluginExtension> {
26+
configurationNames.forEach { configName ->
27+
// Tell dependency-guard to check the `configName` configuration's dependencies.
28+
configuration(configName)
29+
}
30+
}
31+
}

dependencies/classpath.txt

Lines changed: 176 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,176 @@
1+
androidx.databinding:databinding-common:7.1.3
2+
androidx.databinding:databinding-compiler-common:7.1.3
3+
com.android.databinding:baseLibrary:7.1.3
4+
com.android.tools.analytics-library:crash:30.1.3
5+
com.android.tools.analytics-library:protos:30.1.3
6+
com.android.tools.analytics-library:shared:30.1.3
7+
com.android.tools.analytics-library:tracker:30.1.3
8+
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09
9+
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
10+
com.android.tools.build:aapt2-proto:7.1.3-7984345
11+
com.android.tools.build:aaptcompiler:7.1.3
12+
com.android.tools.build:apksig:7.1.3
13+
com.android.tools.build:apkzlib:7.1.3
14+
com.android.tools.build:builder-model:7.1.3
15+
com.android.tools.build:builder-test-api:7.1.3
16+
com.android.tools.build:builder:7.1.3
17+
com.android.tools.build:bundletool:1.8.0
18+
com.android.tools.build:gradle-api:7.1.3
19+
com.android.tools.build:gradle:7.1.3
20+
com.android.tools.build:manifest-merger:30.1.3
21+
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api
22+
com.android.tools.ddms:ddmlib:30.1.3
23+
com.android.tools.layoutlib:layoutlib-api:30.1.3
24+
com.android.tools.lint:lint-model:30.1.3
25+
com.android.tools.utp:android-device-provider-ddmlib-proto:30.1.3
26+
com.android.tools.utp:android-device-provider-gradle-proto:30.1.3
27+
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:30.1.3
28+
com.android.tools.utp:android-test-plugin-host-coverage-proto:30.1.3
29+
com.android.tools.utp:android-test-plugin-host-retention-proto:30.1.3
30+
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:30.1.3
31+
com.android.tools:annotations:30.1.3
32+
com.android.tools:common:30.1.3
33+
com.android.tools:dvlib:30.1.3
34+
com.android.tools:repository:30.1.3
35+
com.android.tools:sdk-common:30.1.3
36+
com.android.tools:sdklib:30.1.3
37+
com.android:signflinger:7.1.3
38+
com.android:zipflinger:7.1.3
39+
com.fasterxml.jackson.core:jackson-annotations:2.12.4
40+
com.fasterxml.jackson.core:jackson-core:2.12.4
41+
com.fasterxml.jackson.core:jackson-databind:2.12.4
42+
com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.12.4
43+
com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.12.4
44+
com.fasterxml.jackson.module:jackson-module-kotlin:2.12.4
45+
com.fasterxml.jackson:jackson-bom:2.12.4
46+
com.fasterxml.woodstox:woodstox-core:6.2.4
47+
com.github.gundy:semver4j:0.16.4
48+
com.google.android:annotations:4.1.1.4
49+
com.google.api.grpc:proto-google-common-protos:1.12.0
50+
com.google.auto.value:auto-value-annotations:1.6.2
51+
com.google.code.findbugs:jsr305:3.0.2
52+
com.google.code.gson:gson:2.8.6
53+
com.google.crypto.tink:tink:1.3.0-rc2
54+
com.google.dagger:dagger:2.28.3
55+
com.google.devtools.ksp:symbol-processing-gradle-plugin:1.6.10-1.0.2
56+
com.google.errorprone:error_prone_annotations:2.3.4
57+
com.google.flatbuffers:flatbuffers-java:1.12.0
58+
com.google.guava:failureaccess:1.0.1
59+
com.google.guava:guava:30.1-jre
60+
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
61+
com.google.j2objc:j2objc-annotations:1.3
62+
com.google.jimfs:jimfs:1.1
63+
com.google.protobuf:protobuf-java-util:3.10.0
64+
com.google.protobuf:protobuf-java:3.10.0
65+
com.google.testing.platform:core-proto:0.0.8-alpha07
66+
com.googlecode.java-diff-utils:diffutils:1.3.0
67+
com.googlecode.json-simple:json-simple:1.1
68+
com.googlecode.juniversalchardet:juniversalchardet:1.0.3
69+
com.squareup.moshi:moshi:1.12.0
70+
com.squareup.okhttp3:okhttp:3.14.9
71+
com.squareup.okio:okio:2.10.0
72+
com.squareup.retrofit2:converter-moshi:2.9.0
73+
com.squareup.retrofit2:retrofit:2.9.0
74+
com.squareup:javapoet:1.10.0
75+
com.squareup:javawriter:2.5.0
76+
com.sun.activation:javax.activation:1.2.0
77+
com.sun.istack:istack-commons-runtime:3.0.8
78+
com.sun.xml.fastinfoset:FastInfoset:1.2.16
79+
com.vanniktech:gradle-maven-publish-plugin:0.18.0
80+
commons-codec:commons-codec:1.10
81+
commons-io:commons-io:2.4
82+
commons-logging:commons-logging:1.2
83+
de.undercouch:gradle-download-task:4.1.1
84+
io.grpc:grpc-api:1.21.1
85+
io.grpc:grpc-context:1.21.1
86+
io.grpc:grpc-core:1.21.1
87+
io.grpc:grpc-netty:1.21.1
88+
io.grpc:grpc-protobuf-lite:1.21.1
89+
io.grpc:grpc-protobuf:1.21.1
90+
io.grpc:grpc-stub:1.21.1
91+
io.netty:netty-buffer:4.1.34.Final
92+
io.netty:netty-codec-http2:4.1.34.Final
93+
io.netty:netty-codec-http:4.1.34.Final
94+
io.netty:netty-codec-socks:4.1.34.Final
95+
io.netty:netty-codec:4.1.34.Final
96+
io.netty:netty-common:4.1.34.Final
97+
io.netty:netty-handler-proxy:4.1.34.Final
98+
io.netty:netty-handler:4.1.34.Final
99+
io.netty:netty-resolver:4.1.34.Final
100+
io.netty:netty-transport:4.1.34.Final
101+
io.opencensus:opencensus-api:0.21.0
102+
io.opencensus:opencensus-contrib-grpc-metrics:0.21.0
103+
it.unimi.dsi:fastutil:8.4.0
104+
jakarta.activation:jakarta.activation-api:1.2.1
105+
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2
106+
javax.inject:javax.inject:1
107+
me.champeau.gradle:jmh-gradle-plugin:0.5.3
108+
net.java.dev.jna:jna-platform:5.6.0
109+
net.java.dev.jna:jna:5.6.0
110+
net.sf.jopt-simple:jopt-simple:4.9
111+
net.sf.kxml:kxml2:2.3.0
112+
org.antlr:antlr4:4.5.3
113+
org.apache.commons:commons-compress:1.20
114+
org.apache.commons:commons-math3:3.2
115+
org.apache.httpcomponents:httpclient:4.5.6
116+
org.apache.httpcomponents:httpcore:4.4.10
117+
org.apache.httpcomponents:httpmime:4.5.6
118+
org.bitbucket.b_c:jose4j:0.7.0
119+
org.bouncycastle:bcpkix-jdk15on:1.56
120+
org.bouncycastle:bcprov-jdk15on:1.56
121+
org.checkerframework:checker-qual:3.5.0
122+
org.codehaus.mojo:animal-sniffer-annotations:1.17
123+
org.codehaus.woodstox:stax2-api:4.2.1
124+
org.glassfish.jaxb:jaxb-runtime:2.3.2
125+
org.glassfish.jaxb:txw2:2.3.2
126+
org.jdom:jdom2:2.0.6
127+
org.jetbrains.dokka:dokka-core:1.5.31
128+
org.jetbrains.dokka:dokka-gradle-plugin:1.5.31
129+
org.jetbrains.intellij.deps:trove4j:1.0.20181211
130+
org.jetbrains.kotlin:kotlin-android-extensions:1.6.10
131+
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.6.10
132+
org.jetbrains.kotlin:kotlin-build-common:1.6.10
133+
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.10
134+
org.jetbrains.kotlin:kotlin-compiler-runner:1.6.10
135+
org.jetbrains.kotlin:kotlin-daemon-client:1.6.10
136+
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.6.10
137+
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.6.10
138+
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.6.10
139+
org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10
140+
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.6.10
141+
org.jetbrains.kotlin:kotlin-native-utils:1.6.10
142+
org.jetbrains.kotlin:kotlin-project-model:1.6.10
143+
org.jetbrains.kotlin:kotlin-reflect:1.5.31
144+
org.jetbrains.kotlin:kotlin-scripting-common:1.6.10
145+
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.10
146+
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.6.10
147+
org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.10
148+
org.jetbrains.kotlin:kotlin-serialization:1.6.10
149+
org.jetbrains.kotlin:kotlin-stdlib-common:1.5.31
150+
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.31
151+
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31
152+
org.jetbrains.kotlin:kotlin-stdlib:1.5.31
153+
org.jetbrains.kotlin:kotlin-tooling-metadata:1.6.10
154+
org.jetbrains.kotlin:kotlin-util-io:1.6.10
155+
org.jetbrains.kotlin:kotlin-util-klib:1.6.10
156+
org.jetbrains.kotlinx:binary-compatibility-validator:0.6.0
157+
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.1
158+
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1
159+
org.jetbrains.kotlinx:kotlinx-metadata-jvm:0.2.0
160+
org.jetbrains:annotations:13.0
161+
org.jetbrains:markdown-jvm:0.2.4
162+
org.jetbrains:markdown:0.2.4
163+
org.jlleitschuh.gradle:ktlint-gradle:10.2.1
164+
org.json:json:20180813
165+
org.jsoup:jsoup:1.13.1
166+
org.jvnet.staxex:stax-ex:1.8.1
167+
org.openjdk.jmh:jmh-core:1.27
168+
org.ow2.asm:asm-analysis:9.1
169+
org.ow2.asm:asm-commons:9.1
170+
org.ow2.asm:asm-tree:9.1
171+
org.ow2.asm:asm-util:9.1
172+
org.ow2.asm:asm:9.1
173+
org.slf4j:slf4j-api:1.7.30
174+
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2
175+
xerces:xercesImpl:2.12.0
176+
xml-apis:xml-apis:1.4.01

gradle/libs.versions.toml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ androidx-work = "2.6.0"
3434

3535
detekt = "1.19.0"
3636
dokka = "1.5.31"
37+
dependencyGuard = "0.1.0"
3738

3839
google-accompanist = "0.18.0"
3940
google-dagger = "2.40.5"
@@ -84,7 +85,9 @@ kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
8485

8586
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
8687

87-
google-ksp = { id = "com.google.devtools.ksp", version.ref = "google-ksp"}
88+
dropbox-dependencyGuard = { id = "com.dropbox.dependency-guard", version.ref = "dependencyGuard" }
89+
90+
google-ksp = { id = "com.google.devtools.ksp", version.ref = "google-ksp" }
8891

8992
kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
9093
kotlinx-apiBinaryCompatibility = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "kotlinx-binary-compatibility" }
@@ -101,7 +104,7 @@ androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref
101104

102105
androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidx-appcompat" }
103106

104-
androidx-macro-benchmark = { module ="androidx.benchmark:benchmark-macro-junit4", version.ref = "androidx-benchmark" }
107+
androidx-macro-benchmark = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "androidx-benchmark" }
105108

106109
androidx-compose-foundation = { module = "androidx.compose.foundation:foundation", version.ref = "androidx-compose" }
107110

@@ -142,14 +145,16 @@ androidx-test-truth = { module = "androidx.test.ext:truth", version.ref = "andro
142145

143146
androidx-test-uiautomator = "androidx.test.uiautomator:uiautomator:2.2.0"
144147

145-
androidx-tracing-ktx = { module = "androidx.tracing:tracing-ktx", version.ref = "androidx-tracing"}
148+
androidx-tracing-ktx = { module = "androidx.tracing:tracing-ktx", version.ref = "androidx-tracing" }
146149

147150
androidx-transition = { module = "androidx.transition:transition", version.ref = "androidx-transition" }
148151

149152
androidx-viewbinding = { module = "androidx.databinding:viewbinding", version.ref = "androidTools" }
150153

151154
dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
152155

156+
dropbox-dependencyGuard = { module = "com.dropbox.dependency-guard:dependency-guard", version.ref = "dependencyGuard" }
157+
153158
google-android-material = { module = "com.google.android.material:material", version.ref = "material" }
154159
google-ksp = { module = "com.google.devtools.ksp:symbol-processing-gradle-plugin", version.ref = "google-ksp" }
155160

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10
2+
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10
3+
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10
4+
org.jetbrains.kotlin:kotlin-stdlib:1.6.10
5+
org.jetbrains:annotations:13.0
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
com.squareup.moshi:moshi-adapters:1.13.0
2+
com.squareup.moshi:moshi:1.13.0
3+
com.squareup.okio:okio:2.10.0
4+
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.10
5+
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.10
6+
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10
7+
org.jetbrains.kotlin:kotlin-stdlib:1.6.10
8+
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.1
9+
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1
10+
org.jetbrains:annotations:13.0

0 commit comments

Comments
 (0)