Skip to content

Commit

Permalink
Integrate the dependency-guard Gradle plugin
Browse files Browse the repository at this point in the history
The plugin is applied to every module of the project, on the `runtime*Classpath`
  • Loading branch information
MGaetan89 committed Feb 23, 2024
1 parent 1d8e66c commit 2bbee10
Show file tree
Hide file tree
Showing 88 changed files with 769 additions and 4 deletions.
28 changes: 28 additions & 0 deletions .github/workflows/dependency_guard.yml
@@ -0,0 +1,28 @@
name: Dependency guard

on:
push:
pull_request:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
dependency-guard:
name: Dependency guard
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'adopt'
java-version: 17

- uses: gradle/actions/setup-gradle@v3

- name: Run dependency guard
run: ./gradlew dependencyGuard
2 changes: 2 additions & 0 deletions annotations/build.gradle
@@ -1,8 +1,10 @@
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.DeployedRoboJavaModulePlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: DeployedRoboJavaModulePlugin
apply plugin: DependencyGuardPlugin

dependencies {
compileOnly libs.findbugs.jsr305
Expand Down
Empty file.
1 change: 1 addition & 0 deletions build.gradle
Expand Up @@ -18,6 +18,7 @@ buildscript {
classpath libs.spotless.gradle
classpath libs.detekt.gradle
classpath libs.roborazzi.gradle
classpath libs.dependency.guard.gradle
}
}

Expand Down
@@ -0,0 +1,28 @@
package org.robolectric.gradle

import org.gradle.api.Plugin
import org.gradle.api.Project

class DependencyGuardPlugin implements Plugin<Project> {
Closure<Project> doApply = {
project.apply plugin: "com.dropbox.dependency-guard"

dependencyGuard {
def configurationName
if (project.plugins.hasPlugin("com.android.library")) {
configurationName = "releaseRuntimeClasspath"
} else {
configurationName = "runtimeClasspath"
}

configuration(configurationName)
}
}

@Override
void apply(Project project) {
doApply.delegate = project
doApply.resolveStrategy = Closure.DELEGATE_ONLY
doApply()
}
}
2 changes: 2 additions & 0 deletions errorprone/build.gradle
@@ -1,9 +1,11 @@
import org.gradle.internal.jvm.Jvm
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.DeployedRoboJavaModulePlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: DeployedRoboJavaModulePlugin
apply plugin: DependencyGuardPlugin

// Disable annotation processor for tests
compileTestJava {
Expand Down
26 changes: 26 additions & 0 deletions errorprone/dependencies/runtimeClasspath.txt
@@ -0,0 +1,26 @@
aopalliance:aopalliance:1.0
com.github.ben-manes.caffeine:caffeine:3.0.5
com.github.kevinstern:software-and-algorithms:1.0
com.google.auto.service:auto-service-annotations:1.0.1
com.google.auto.value:auto-value-annotations:1.9
com.google.auto:auto-common:1.2.1
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotation:2.19.1
com.google.errorprone:error_prone_annotations:2.19.1
com.google.errorprone:error_prone_check_api:2.19.1
com.google.errorprone:error_prone_core:2.19.1
com.google.errorprone:error_prone_refaster:2.19.1
com.google.errorprone:error_prone_type_annotations:2.19.1
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:31.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.inject:guice:5.1.0
com.google.j2objc:j2objc-annotations:1.3
com.google.protobuf:protobuf-java:3.19.2
io.github.java-diff-utils:java-diff-utils:4.0
javax.annotation:javax.annotation-api:1.3.2
javax.inject:javax.inject:1
org.checkerframework:checker-qual:3.12.0
org.checkerframework:dataflow-errorprone:3.27.0
org.eclipse.jgit:org.eclipse.jgit:4.4.1.201607150455-r
org.pcollections:pcollections:3.1.4
5 changes: 5 additions & 0 deletions gradle/libs.versions.toml
Expand Up @@ -126,6 +126,9 @@ play-services-base-for-shadows = "8.4.0"
# https://developers.google.com/android/guides/releases
play-services-basement = "18.0.1"

# https://github.com/dropbox/dependency-guard/releases
dependency-guard-plugin = "0.5.0"

[libraries]
android-gradle = { module = "com.android.tools.build:gradle", version.ref = "android-gradle" }
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
Expand Down Expand Up @@ -241,6 +244,8 @@ play-services-basement-for-shadows = { module = "com.google.android.gms:play-ser

play-services-basement = { module = "com.google.android.gms:play-services-basement", version.ref = "play-services-basement" }

dependency-guard-gradle = { module = "com.dropbox.dependency-guard:dependency-guard", version.ref = "dependency-guard-plugin" }

[bundles]
play-services-base-for-shadows = ["androidx-fragment-for-shadows", "play-services-base-for-shadows", "play-services-basement-for-shadows"]
powermock = ["powermock-module-junit4", "powermock-module-junit4-rule", "powermock-api-mockito2", "powermock-classloading-xstream"]
Expand Down
2 changes: 2 additions & 0 deletions integration_tests/agp/build.gradle
@@ -1,7 +1,9 @@
import org.robolectric.gradle.AndroidProjectConfigPlugin
import org.robolectric.gradle.DependencyGuardPlugin

apply plugin: 'com.android.library'
apply plugin: AndroidProjectConfigPlugin
apply plugin: DependencyGuardPlugin

android {
compileSdk 34
Expand Down
Empty file.
3 changes: 3 additions & 0 deletions integration_tests/agp/testsupport/build.gradle
@@ -1,4 +1,7 @@
import org.robolectric.gradle.DependencyGuardPlugin

apply plugin: 'com.android.library'
apply plugin: DependencyGuardPlugin

android {
compileSdk 34
Expand Down
Empty file.
2 changes: 2 additions & 0 deletions integration_tests/androidx/build.gradle
@@ -1,7 +1,9 @@
import org.robolectric.gradle.AndroidProjectConfigPlugin
import org.robolectric.gradle.DependencyGuardPlugin

apply plugin: 'com.android.library'
apply plugin: AndroidProjectConfigPlugin
apply plugin: DependencyGuardPlugin

android {
compileSdk 34
Expand Down
@@ -0,0 +1,44 @@
androidx.activity:activity:1.6.0
androidx.annotation:annotation-experimental:1.3.0
androidx.annotation:annotation-jvm:1.6.0
androidx.annotation:annotation:1.6.0
androidx.appcompat:appcompat-resources:1.6.1
androidx.appcompat:appcompat:1.6.1
androidx.arch.core:core-common:2.1.0
androidx.arch.core:core-runtime:2.1.0
androidx.collection:collection:1.1.0
androidx.concurrent:concurrent-futures:1.0.0
androidx.core:core-ktx:1.9.0
androidx.core:core:1.9.0
androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview:1.0.0
androidx.drawerlayout:drawerlayout:1.0.0
androidx.emoji2:emoji2-views-helper:1.2.0
androidx.emoji2:emoji2:1.2.0
androidx.fragment:fragment:1.3.6
androidx.interpolator:interpolator:1.0.0
androidx.lifecycle:lifecycle-common:2.5.1
androidx.lifecycle:lifecycle-livedata-core:2.5.1
androidx.lifecycle:lifecycle-livedata:2.0.0
androidx.lifecycle:lifecycle-process:2.4.1
androidx.lifecycle:lifecycle-runtime:2.5.1
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1
androidx.lifecycle:lifecycle-viewmodel:2.5.1
androidx.loader:loader:1.0.0
androidx.resourceinspection:resourceinspection-annotation:1.0.1
androidx.savedstate:savedstate:1.2.0
androidx.startup:startup-runtime:1.1.1
androidx.tracing:tracing:1.0.0
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.vectordrawable:vectordrawable:1.1.0
androidx.versionedparcelable:versionedparcelable:1.1.1
androidx.viewpager:viewpager:1.0.0
androidx.window.extensions.core:core:1.0.0
androidx.window:window:1.2.0
com.google.guava:listenablefuture:1.0
org.jetbrains.kotlin:kotlin-stdlib:1.9.21
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0
org.jetbrains:annotations:23.0.0
2 changes: 2 additions & 0 deletions integration_tests/androidx_test/build.gradle
@@ -1,9 +1,11 @@
import org.robolectric.gradle.AndroidProjectConfigPlugin
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.GradleManagedDevicePlugin

apply plugin: 'com.android.library'
apply plugin: AndroidProjectConfigPlugin
apply plugin: GradleManagedDevicePlugin
apply plugin: DependencyGuardPlugin

android {
compileSdk 34
Expand Down
@@ -0,0 +1,47 @@
androidx.activity:activity:1.6.0
androidx.annotation:annotation-experimental:1.3.0
androidx.annotation:annotation:1.3.0
androidx.appcompat:appcompat-resources:1.6.1
androidx.appcompat:appcompat:1.6.1
androidx.arch.core:core-common:2.1.0
androidx.arch.core:core-runtime:2.1.0
androidx.collection:collection:1.1.0
androidx.concurrent:concurrent-futures:1.0.0
androidx.constraintlayout:constraintlayout-core:1.0.4
androidx.constraintlayout:constraintlayout:2.1.4
androidx.core:core-ktx:1.9.0
androidx.core:core:1.9.0
androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview:1.0.0
androidx.drawerlayout:drawerlayout:1.0.0
androidx.emoji2:emoji2-views-helper:1.2.0
androidx.emoji2:emoji2:1.2.0
androidx.fragment:fragment:1.3.6
androidx.interpolator:interpolator:1.0.0
androidx.lifecycle:lifecycle-common:2.5.1
androidx.lifecycle:lifecycle-livedata-core:2.5.1
androidx.lifecycle:lifecycle-livedata:2.0.0
androidx.lifecycle:lifecycle-process:2.4.1
androidx.lifecycle:lifecycle-runtime:2.5.1
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.5.1
androidx.lifecycle:lifecycle-viewmodel:2.5.1
androidx.loader:loader:1.0.0
androidx.multidex:multidex:2.0.1
androidx.resourceinspection:resourceinspection-annotation:1.0.1
androidx.savedstate:savedstate:1.2.0
androidx.startup:startup-runtime:1.1.1
androidx.tracing:tracing:1.0.0
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.vectordrawable:vectordrawable:1.1.0
androidx.versionedparcelable:versionedparcelable:1.1.1
androidx.viewpager:viewpager:1.0.0
com.google.guava:listenablefuture:1.0
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0
org.jetbrains.kotlin:kotlin-stdlib:1.7.10
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1
org.jetbrains:annotations:13.0
2 changes: 2 additions & 0 deletions integration_tests/compat-target28/build.gradle
@@ -1,10 +1,12 @@
import org.robolectric.gradle.AndroidProjectConfigPlugin
import org.robolectric.gradle.DependencyGuardPlugin

apply plugin: 'com.android.library'
apply plugin: AndroidProjectConfigPlugin
apply plugin: 'kotlin-android'
apply plugin: "com.diffplug.spotless"
apply plugin: "io.gitlab.arturbosch.detekt"
apply plugin: DependencyGuardPlugin

spotless {
kotlin {
Expand Down
@@ -0,0 +1,2 @@
org.jetbrains.kotlin:kotlin-stdlib:1.9.22
org.jetbrains:annotations:13.0
2 changes: 2 additions & 0 deletions integration_tests/ctesque/build.gradle
@@ -1,9 +1,11 @@
import org.robolectric.gradle.AndroidProjectConfigPlugin
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.GradleManagedDevicePlugin

apply plugin: 'com.android.library'
apply plugin: AndroidProjectConfigPlugin
apply plugin: GradleManagedDevicePlugin
apply plugin: DependencyGuardPlugin

android {
compileSdk 34
Expand Down
Empty file.
2 changes: 2 additions & 0 deletions integration_tests/dependency-on-stubs/build.gradle
@@ -1,6 +1,8 @@
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: DependencyGuardPlugin

// test with a project that depends on the stubs jar, not org.robolectric:android-all

Expand Down
@@ -0,0 +1,25 @@
androidx.test.espresso:espresso-idling-resource:3.5.1
androidx.test:monitor:1.6.1
com.almworks.sqlite4java:sqlite4java:1.0.392
com.google.auto.value:auto-value-annotations:1.10.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotation:2.19.1
com.google.errorprone:error_prone_annotations:2.11.0
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:31.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.j2objc:j2objc-annotations:1.3
com.ibm.icu:icu4j:74.2
javax.annotation:javax.annotation-api:1.3.2
javax.inject:javax.inject:1
junit:junit:4.13.2
org.bouncycastle:bcprov-jdk18on:1.77
org.checkerframework:checker-qual:3.12.0
org.conscrypt:conscrypt-openjdk-uber:2.5.2
org.hamcrest:hamcrest-core:1.3
org.ow2.asm:asm-analysis:9.6
org.ow2.asm:asm-commons:9.6
org.ow2.asm:asm-tree:9.6
org.ow2.asm:asm-util:9.6
org.ow2.asm:asm:9.6
org.robolectric:nativeruntime-dist-compat:1.0.8
2 changes: 2 additions & 0 deletions integration_tests/jacoco-offline/build.gradle
@@ -1,7 +1,9 @@
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: "jacoco"
apply plugin: DependencyGuardPlugin

def jacocoVersion = libs.versions.jacoco.get()

Expand Down
Empty file.
2 changes: 2 additions & 0 deletions integration_tests/kotlin/build.gradle
@@ -1,9 +1,11 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: 'kotlin'
apply plugin: "com.diffplug.spotless"
apply plugin: DependencyGuardPlugin

spotless {
kotlin {
Expand Down
28 changes: 28 additions & 0 deletions integration_tests/kotlin/dependencies/runtimeClasspath.txt
@@ -0,0 +1,28 @@
androidx.annotation:annotation-jvm:1.7.1
androidx.annotation:annotation:1.7.1
androidx.test.espresso:espresso-idling-resource:3.5.1
androidx.test:monitor:1.6.1
com.almworks.sqlite4java:sqlite4java:1.0.392
com.google.auto.value:auto-value-annotations:1.10.4
com.google.code.findbugs:jsr305:3.0.2
com.google.errorprone:error_prone_annotation:2.19.1
com.google.errorprone:error_prone_annotations:2.11.0
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:31.1-jre
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.j2objc:j2objc-annotations:1.3
com.ibm.icu:icu4j:74.2
javax.annotation:javax.annotation-api:1.3.2
javax.inject:javax.inject:1
org.bouncycastle:bcprov-jdk18on:1.77
org.checkerframework:checker-qual:3.12.0
org.conscrypt:conscrypt-openjdk-uber:2.5.2
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10
org.jetbrains.kotlin:kotlin-stdlib:1.7.10
org.jetbrains:annotations:13.0
org.ow2.asm:asm-analysis:9.6
org.ow2.asm:asm-commons:9.6
org.ow2.asm:asm-tree:9.6
org.ow2.asm:asm-util:9.6
org.ow2.asm:asm:9.6
org.robolectric:nativeruntime-dist-compat:1.0.8
2 changes: 2 additions & 0 deletions integration_tests/libphonenumber/build.gradle
@@ -1,6 +1,8 @@
import org.robolectric.gradle.DependencyGuardPlugin
import org.robolectric.gradle.RoboJavaModulePlugin

apply plugin: RoboJavaModulePlugin
apply plugin: DependencyGuardPlugin

dependencies {
api project(":robolectric")
Expand Down

0 comments on commit 2bbee10

Please sign in to comment.