Skip to content

Commit cb228aa

Browse files
authored
Add Dependency Analysis Gradle Plugin (#57)
* Setup Dependency Analysis Gradle Plugin * Add missing dependencies to `:demo` * Add missing dependencies to `:mediarouter-compose` * Update to DAGP 2.13.3
1 parent 8ccd49e commit cb228aa

File tree

6 files changed

+100
-1
lines changed

6 files changed

+100
-1
lines changed

.github/workflows/quality.yml

+33
Original file line numberDiff line numberDiff line change
@@ -178,3 +178,36 @@ jobs:
178178
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
179179
- name: Generate documentation
180180
run: ./gradlew :dokkaGenerate
181+
182+
analyse-dependencies:
183+
name: Analyse Dependencies
184+
runs-on: ubuntu-latest
185+
permissions:
186+
pull-requests: write
187+
steps:
188+
- name: Checkout
189+
uses: actions/checkout@v4
190+
- name: Set up Java
191+
uses: actions/setup-java@v4
192+
with:
193+
java-version-file: .github/workflows/.java-version
194+
distribution: 'temurin'
195+
- name: Set up Gradle
196+
uses: gradle/actions/setup-gradle@v4
197+
with:
198+
cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }}
199+
- name: Analyse Dependencies
200+
id: analyse_dependencies
201+
continue-on-error: true
202+
run: ./gradlew :buildHealth
203+
- name: Comment Analysis Report
204+
if: ${{ github.event_name == 'pull_request' }}
205+
uses: marocchino/sticky-pull-request-comment@v2
206+
with:
207+
path: build/reports/dependency-analysis/build-health-report.txt
208+
delete: ${{ steps.analyse_dependencies.outcome == 'success' }}
209+
- name: Dependency Analysis failed
210+
if: ${{ steps.analyse_dependencies.outcome == 'failure' }}
211+
run: |
212+
echo "::error ::Dependency Analysis failed."
213+
exit 1

build.gradle.kts

+15
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import io.gitlab.arturbosch.detekt.extensions.DetektExtension
99
plugins {
1010
alias(libs.plugins.android.application) apply false
1111
alias(libs.plugins.android.library) apply false
12+
alias(libs.plugins.dependency.analysis.gralde.plugin)
1213
alias(libs.plugins.detekt) apply false
1314
alias(libs.plugins.dokka)
1415
alias(libs.plugins.dokka.javadoc) apply false
@@ -57,12 +58,26 @@ allprojects {
5758
}
5859
}
5960

61+
subprojects {
62+
pluginManager.apply("com.autonomousapps.dependency-analysis")
63+
}
64+
6065
dokka {
6166
dokkaPublications.html {
6267
includes.from(layout.settingsDirectory.file("docs/${project.name}.md"))
6368
}
6469
}
6570

71+
dependencyAnalysis {
72+
issues {
73+
all {
74+
onAny {
75+
severity("fail")
76+
}
77+
}
78+
}
79+
}
80+
6681
dependencies {
6782
dokka(project(":mediarouter-compose"))
6883

demo/build.gradle.kts

+5
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,20 @@ android {
5252

5353
dependencies {
5454
implementation(project(":mediarouter-compose"))
55+
implementation(libs.androidx.activity)
5556
implementation(libs.androidx.activity.compose)
5657
implementation(platform(libs.androidx.compose.bom))
5758
implementation(libs.androidx.compose.foundation)
59+
implementation(libs.androidx.compose.foundation.layout)
60+
implementation(libs.androidx.compose.material.icons.core)
5861
implementation(libs.androidx.compose.material.icons.extended)
5962
implementation(libs.androidx.compose.material3)
6063
implementation(libs.androidx.compose.runtime)
6164
implementation(libs.androidx.compose.ui)
65+
implementation(libs.androidx.compose.ui.text)
6266
implementation(libs.androidx.compose.ui.tooling.preview)
6367
debugImplementation(libs.androidx.compose.ui.tooling)
68+
implementation(libs.androidx.compose.ui.unit)
6469
implementation(libs.androidx.fragment)
6570
implementation(libs.androidx.mediarouter)
6671
}

gradle.properties

+9
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
#
2+
# Copyright (c) SRG SSR. All rights reserved.
3+
# License information is available from the LICENSE file.
4+
#
5+
16
# Project-wide Gradle settings.
27
# IDE (e.g. Android Studio) users:
38
# Gradle settings configured through the IDE *will override*
@@ -45,3 +50,7 @@ org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
4550
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
4651
org.jetbrains.dokka.experimental.tryK2=true
4752
org.jetbrains.dokka.experimental.tryK2.nowarn=true
53+
54+
# Print the Dependency Analysis report to the console
55+
# https://github.com/autonomousapps/dependency-analysis-gradle-plugin#add-to-your-project-and-use
56+
dependency.analysis.print.build.health=true

gradle/libs.versions.toml

+22-1
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22
android-compose-screenshot = "0.0.1-alpha09"
33
android-gradle-plugin = "8.9.1"
44
androidx-activity = "1.10.1"
5+
androidx-annotation = "1.9.1"
56
androidx-compose = "2025.03.01"
67
androidx-core = "1.15.0"
78
androidx-fragment = "1.8.6"
89
androidx-lifecycle = "2.8.7"
10+
androidx-media = "1.7.0"
911
androidx-mediarouter = "1.7.0"
1012
androidx-test-core = "1.6.1"
1113
androidx-test-ext-junit = "1.2.1"
14+
androidx-test-monitor = "1.7.2"
1215
coil = "3.1.0"
16+
dependency-analysis-gradle-plugin = "2.13.3"
1317
detekt = "1.23.8"
1418
dokka = "2.0.0"
1519
junit = "4.13.2"
@@ -22,34 +26,51 @@ turbine = "1.2.0"
2226
[libraries]
2327
androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "androidx-activity" }
2428
androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidx-activity" }
29+
androidx-annotation = { group = "androidx.annotation", name = "annotation", version.ref = "androidx-annotation" }
30+
androidx-compose-animation = { group = "androidx.compose.animation", name = "animation" }
31+
androidx-compose-animation-core = { group = "androidx.compose.animation", name = "animation-core" }
2532
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidx-compose" }
2633
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
34+
androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" }
35+
androidx-compose-material-icons-core = { group = "androidx.compose.material", name = "material-icons-core" }
2736
androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" }
2837
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
2938
androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" }
3039
androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" }
40+
androidx-compose-ui-geometry = { group = "androidx.compose.ui", name = "ui-geometry" }
41+
androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
42+
androidx-compose-ui-text = { group = "androidx.compose.ui", name = "ui-text" }
3143
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
3244
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
33-
androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }
45+
androidx-compose-ui-unit = { group = "androidx.compose.ui", name = "ui-unit" }
46+
androidx-core = { group = "androidx.core", name = "core", version.ref = "androidx-core" }
47+
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "androidx-core" }
3448
androidx-fragment = { group = "androidx.fragment", name = "fragment", version.ref = "androidx-fragment" }
3549
androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "androidx-lifecycle" }
3650
androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "androidx-lifecycle" }
51+
androidx-lifecycle-viewmodel-savedstate = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-savedstate", version.ref = "androidx-lifecycle" }
52+
androidx-media = { group = "androidx.media", name = "media", version.ref = "androidx-media" }
3753
androidx-mediarouter = { group = "androidx.mediarouter", name = "mediarouter", version.ref = "androidx-mediarouter" }
3854
androidx-test-core = { group = "androidx.test", name = "core", version.ref = "androidx-test-core" }
3955
androidx-test-ext-junit = { group = "androidx.test.ext", name = "junit", version.ref = "androidx-test-ext-junit" }
56+
androidx-test-monitor = { group = "androidx.test", name = "monitor", version.ref = "androidx-test-monitor" }
4057
coil-compose = { group = "io.coil-kt.coil3", name = "coil-compose", version.ref = "coil" }
4158
coil-network-okhttp = { group = "io.coil-kt.coil3", name = "coil-network-okhttp", version.ref = "coil" }
4259
junit = { group = "junit", name = "junit", version.ref = "junit" }
4360
kotlin-bom = { group = "org.jetbrains.kotlin", name = "kotlin-bom", version.ref = "kotlin" }
4461
kotlin-test = { group = "org.jetbrains.kotlin", name = "kotlin-test" }
62+
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
4563
kotlinx-coroutines-test = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
4664
robolectric = { group = "org.robolectric", name = "robolectric", version.ref = "robolectric" }
65+
robolectric-annotations = { group = "org.robolectric", name = "annotations", version.ref = "robolectric" }
66+
robolectric-shadows-framework = { group = "org.robolectric", name = "shadows-framework", version.ref = "robolectric" }
4767
turbine = { group = "app.cash.turbine", name = "turbine", version.ref = "turbine" }
4868

4969
[plugins]
5070
android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" }
5171
android-compose-screenshot = { id = "com.android.compose.screenshot", version.ref = "android-compose-screenshot" }
5272
android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
73+
dependency-analysis-gralde-plugin = { id = "com.autonomousapps.dependency-analysis", version.ref = "dependency-analysis-gradle-plugin" }
5374
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
5475
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
5576
dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version.ref = "dokka" }

mediarouter-compose/build.gradle.kts

+16
Original file line numberDiff line numberDiff line change
@@ -95,27 +95,43 @@ kover {
9595
}
9696

9797
dependencies {
98+
implementation(libs.androidx.annotation)
99+
implementation(libs.androidx.compose.animation)
100+
implementation(libs.androidx.compose.animation.core)
98101
implementation(platform(libs.androidx.compose.bom))
102+
implementation(libs.androidx.compose.foundation)
103+
api(libs.androidx.compose.foundation.layout)
99104
implementation(libs.androidx.compose.material3)
100105
implementation(libs.androidx.compose.runtime)
101106
implementation(libs.androidx.compose.ui)
107+
implementation(libs.androidx.compose.ui.geometry)
108+
implementation(libs.androidx.compose.ui.graphics)
109+
implementation(libs.androidx.compose.ui.text)
102110
implementation(libs.androidx.compose.ui.tooling.preview)
103111
debugImplementation(libs.androidx.compose.ui.tooling)
112+
implementation(libs.androidx.compose.ui.unit)
104113
implementation(libs.androidx.core)
114+
implementation(libs.androidx.core.ktx)
105115
implementation(libs.androidx.lifecycle.viewmodel)
106116
implementation(libs.androidx.lifecycle.viewmodel.compose)
117+
implementation(libs.androidx.lifecycle.viewmodel.savedstate)
118+
implementation(libs.androidx.media)
107119
api(libs.androidx.mediarouter)
108120
implementation(libs.coil.compose)
109121
implementation(libs.coil.network.okhttp)
110122
implementation(platform(libs.kotlin.bom))
123+
testImplementation(libs.kotlinx.coroutines.core)
111124

112125
testImplementation(libs.androidx.activity)
113126
testImplementation(libs.androidx.test.core)
114127
testImplementation(libs.androidx.test.ext.junit)
128+
testImplementation(libs.androidx.test.monitor)
115129
testImplementation(libs.junit)
116130
testImplementation(libs.kotlin.test)
117131
testImplementation(libs.kotlinx.coroutines.test)
118132
testImplementation(libs.robolectric)
133+
testImplementation(libs.robolectric.annotations)
134+
testImplementation(libs.robolectric.shadows.framework)
119135
testImplementation(libs.turbine)
120136

121137
screenshotTestImplementation(libs.androidx.compose.ui.tooling)

0 commit comments

Comments
 (0)