Skip to content

Commit 9f79b8e

Browse files
committed
fix aggregate report collecting invalid configurations
1 parent 5b45c6c commit 9f79b8e

File tree

2 files changed

+55
-14
lines changed

2 files changed

+55
-14
lines changed

nebula-archrules-gradle-plugin/src/main/kotlin/com/netflix/nebula/archrules/gradle/ArchrulesAggregateConsoleReportPlugin.kt

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.netflix.nebula.archrules.gradle
33
import com.tngtech.archunit.lang.Priority
44
import org.gradle.api.Plugin
55
import org.gradle.api.Project
6+
import org.gradle.api.artifacts.result.ResolvedArtifactResult
67
import org.gradle.api.attributes.Category
78
import org.gradle.api.attributes.VerificationType
89
import org.gradle.kotlin.dsl.named
@@ -11,7 +12,9 @@ import org.gradle.kotlin.dsl.register
1112

1213
class ArchrulesAggregateConsoleReportPlugin : Plugin<Project> {
1314
override fun apply(project: Project) {
14-
val ext = project.extensions.create("archRulesAggregate", ArchrulesAggregateExtension::class.java)
15+
val verification: Category = project.objects.named(Category.VERIFICATION)
16+
val archRulesVerificationType: VerificationType = project.objects.named("arch-rules")
17+
val ext = project.extensions.create("archRulesAggregate", ArchrulesAggregateExtension::class.java)
1518
ext.skipPassingSummaries.set(false)
1619
ext.consoleDetailsThreshold(Priority.MEDIUM)
1720
val archRulesAggregateDependencies = project.configurations.dependencyScope("archRulesAggregateDependencies") {
@@ -20,8 +23,8 @@ class ArchrulesAggregateConsoleReportPlugin : Plugin<Project> {
2023
val archRulesDataFiles = project.configurations.resolvable("archRulesDataFiles") {
2124
extendsFrom(archRulesAggregateDependencies.get())
2225
attributes {
23-
attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.VERIFICATION))
24-
attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, project.objects.named("arch-rules"))
26+
attribute(Category.CATEGORY_ATTRIBUTE, verification)
27+
attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, archRulesVerificationType)
2528
}
2629
}
2730
project.subprojects {
@@ -30,11 +33,19 @@ class ArchrulesAggregateConsoleReportPlugin : Plugin<Project> {
3033
project.tasks.register<PrintConsoleReportTask>("archRulesAggregateConsoleReport") {
3134
dataFiles.from(archRulesDataFiles.map {
3235
it.incoming.artifactView {
33-
lenient(true) // to handle the case where a subproject doesn't have archrules runner
34-
}.files
36+
lenient(true) // to handle the case where a subproject doesn't have archrules runner
37+
}.artifacts.filter {
38+
it.hasCategory(verification) && it.hasVerificationType(archRulesVerificationType)
39+
}.map { it.file }
3540
})
3641
summaryForPassingDisabled.set(ext.skipPassingSummaries)
3742
detailsThreshold.set(ext.consoleDetailsThreshold)
3843
}
3944
}
45+
46+
fun ResolvedArtifactResult.hasCategory(category: Category): Boolean =
47+
variant.attributes.getAttribute(Category.CATEGORY_ATTRIBUTE) == category
48+
49+
fun ResolvedArtifactResult.hasVerificationType(type: VerificationType): Boolean =
50+
variant.attributes.getAttribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE) == type
4051
}

nebula-archrules-gradle-plugin/src/test/kotlin/com/netflix/nebula/archrules/gradle/ArchrulesAggregateConsoleReportPluginTest.kt

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import nebula.test.dsl.subProject
1414
import nebula.test.dsl.testProject
1515
import org.gradle.kotlin.dsl.findByType
1616
import org.gradle.testfixtures.ProjectBuilder
17+
import org.gradle.testkit.runner.TaskOutcome
1718
import org.junit.jupiter.api.Test
1819
import org.junit.jupiter.api.io.TempDir
1920
import java.io.File
@@ -22,9 +23,11 @@ class ArchrulesAggregateConsoleReportPluginTest {
2223
@TempDir
2324
lateinit var projectDir: File
2425

25-
private fun TestProjectBuilder.setup(withFailures : Boolean = true) {
26+
private fun TestProjectBuilder.setup(withFailures: Boolean = true) {
2627
properties {
2728
buildCache(true)
29+
configurationCache(true)
30+
property("org.gradle.unsafe.isolated-projects","true")
2831
}
2932
rootProject {
3033
plugins {
@@ -55,7 +58,7 @@ class ArchrulesAggregateConsoleReportPluginTest {
5558
)
5659
src {
5760
main {
58-
if(withFailures) {
61+
if (withFailures) {
5962
exampleDeprecatedUsage("FailingCode1")
6063
}
6164
}
@@ -66,7 +69,7 @@ class ArchrulesAggregateConsoleReportPluginTest {
6669
id("java")
6770
id("com.netflix.nebula.archrules.runner")
6871
}
69-
repositories{
72+
repositories {
7073
mavenCentral()
7174
}
7275
dependencies(
@@ -75,7 +78,7 @@ class ArchrulesAggregateConsoleReportPluginTest {
7578
)
7679
src {
7780
main {
78-
if(withFailures) {
81+
if (withFailures) {
7982
exampleDeprecatedUsage("FailingCode2")
8083
}
8184
}
@@ -96,7 +99,7 @@ class ArchrulesAggregateConsoleReportPluginTest {
9699
@Test
97100
fun test() {
98101
val runner = testProject(projectDir) {
99-
setup()
102+
setup()
100103
}
101104
val result = runner.run("archRulesAggregateConsoleReport") {
102105
forwardOutput()
@@ -110,8 +113,9 @@ class ArchrulesAggregateConsoleReportPluginTest {
110113
fun `test passing skip`() {
111114
val runner = testProject(projectDir) {
112115
setup(withFailures = false)
113-
rootProject{
114-
rawBuildScript("""
116+
rootProject {
117+
rawBuildScript(
118+
"""
115119
archRulesAggregate {
116120
skipPassingSummaries = true
117121
}
@@ -132,8 +136,9 @@ archRulesAggregate {
132136
fun `test details threshold`() {
133137
val runner = testProject(projectDir) {
134138
setup()
135-
rootProject{
136-
rawBuildScript("""
139+
rootProject {
140+
rawBuildScript(
141+
"""
137142
archRulesAggregate {
138143
consoleDetailsThreshold("LOW")
139144
}
@@ -147,4 +152,29 @@ archRulesAggregate {
147152
assertThat(result.output)
148153
.contains("Method <com.example.consumer.FailingCode1.aMethod()> calls method <com.example.library.LibraryClass.deprecatedApi()>")
149154
}
155+
156+
@Test
157+
fun `test empty subproject`() {
158+
val runner = testProject(projectDir) {
159+
setup()
160+
subProject("empty") {
161+
plugins {
162+
id("base")
163+
}
164+
rawBuildScript(
165+
// language=kotlin
166+
"""
167+
val jarTask = tasks.register<Jar>("someJar")
168+
artifacts {
169+
add("default", jarTask)
170+
}
171+
"""
172+
)
173+
}
174+
}
175+
val result = runner.run("archRulesAggregateConsoleReport")
176+
assertThat(result.task(":archRulesAggregateConsoleReport"))
177+
.hasOutcome(TaskOutcome.SUCCESS)
178+
assertThat(result.output).doesNotContain("Archrules data read failed")
179+
}
150180
}

0 commit comments

Comments
 (0)