Last active
January 18, 2023 09:39
-
-
Save tabasavr/5c14485aec4fdf8a03173aeffd0f978a to your computer and use it in GitHub Desktop.
Detekt report merge via artifact sharing (almost working)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import io.gitlab.arturbosch.detekt.Detekt | |
import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask | |
import io.gitlab.arturbosch.detekt.report.ReportMergeTask | |
plugins { | |
id("releasing") | |
id("io.gitlab.arturbosch.detekt") | |
alias(libs.plugins.gradleVersions) | |
} | |
configurations { | |
create("reportMergeInputs") { | |
setCanBeResolved(true) | |
setCanBeConsumed(false) | |
setVisible(false) | |
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category::class, Category.VERIFICATION)) | |
attributes.attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, objects.named(VerificationType::class, "detekt-report")) | |
} | |
} | |
// this works and calls `detekt` tasks if necessary, | |
// but it doesn't merge reports if any of them fail | |
val detektReportMergeSarif = tasks.register("mergeDetektReports", ReportMergeTask::class) { | |
//input.from({ configurations.getByName("reportMergeInputs").incoming.artifactView { | |
// componentFilter{ id -> id is ProjectComponentIdentifier } | |
// setLenient(true) | |
//}.files }) | |
input.from(configurations.getByName("reportMergeInputs").incoming.artifacts.artifactFiles) | |
output.set(rootProject.layout.buildDirectory.file("reports/detekt/merge.sarif")) | |
} | |
allprojects { | |
group = "io.gitlab.arturbosch.detekt" | |
version = Versions.currentOrSnapshot() | |
apply(plugin = "io.gitlab.arturbosch.detekt") | |
detekt { | |
source = objects.fileCollection().from( | |
io.gitlab.arturbosch.detekt.extensions.DetektExtension.DEFAULT_SRC_DIR_JAVA, | |
io.gitlab.arturbosch.detekt.extensions.DetektExtension.DEFAULT_TEST_SRC_DIR_JAVA, | |
io.gitlab.arturbosch.detekt.extensions.DetektExtension.DEFAULT_SRC_DIR_KOTLIN, | |
io.gitlab.arturbosch.detekt.extensions.DetektExtension.DEFAULT_TEST_SRC_DIR_KOTLIN, | |
) | |
buildUponDefaultConfig = true | |
baseline = file("$rootDir/config/detekt/baseline.xml") | |
} | |
dependencies { | |
detekt(project(":detekt-cli")) | |
detektPlugins(project(":detekt-formatting")) | |
detektPlugins(project(":detekt-rules-libraries")) | |
detektPlugins(project(":detekt-rules-ruleauthors")) | |
} | |
val subproject = this | |
val configurationName = subproject.name + "DetektOutput" | |
subproject.configurations { | |
create(configurationName) { | |
println(subproject.name) | |
println(configurationName) | |
setCanBeResolved(false) | |
setCanBeConsumed(true) | |
setVisible(false) | |
attributes.attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category::class, Category.VERIFICATION)) | |
attributes.attribute(VerificationType.VERIFICATION_TYPE_ATTRIBUTE, objects.named(VerificationType::class, "detekt-report")) | |
} | |
} | |
tasks.withType<Detekt> detekt@{ | |
val task = this | |
jvmTarget = "1.8" | |
reports { | |
xml.required.set(true) | |
html.required.set(true) | |
txt.required.set(true) | |
sarif.required.set(true) | |
md.required.set(true) | |
} | |
basePath = rootProject.projectDir.absolutePath | |
// without afterEvaluate it will merge only `detekt.sarif` files | |
// but not any of the outputs with type resolution (e.g. `main.sarif`) | |
subproject.afterEvaluate { | |
subproject.configurations.getByName(configurationName).outgoing { | |
artifact(task.sarifReportFile) { | |
setType(ArtifactTypeDefinition.BINARY_DATA_TYPE) | |
builtBy(task) // task will be executed if we need its report | |
} | |
} | |
} | |
} | |
tasks.withType<DetektCreateBaselineTask>().configureEach { | |
jvmTarget = "1.8" | |
} | |
rootProject.dependencies { | |
"reportMergeInputs"(subproject) | |
} | |
} | |
subprojects { | |
tasks.withType<Test>().configureEach { | |
predictiveSelection { | |
enabled.set(System.getenv("CI") == null) | |
} | |
} | |
} | |
tasks.register("build") { | |
dependsOn(gradle.includedBuild("detekt-gradle-plugin").task(":build")) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment