Setup jacoco (#60)

This commit is contained in:
Anuraag Agrawal 2021-07-31 11:34:33 +09:00 committed by GitHub
parent ed31fbaac9
commit 2332851f38
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 120 additions and 0 deletions

1
all/README.md Normal file
View File

@ -0,0 +1 @@
This is a utility project which depends on all other projects in this repository. We use it for global checks, for example collecting all coverage reports from all modules for uploading to codecov.

68
all/build.gradle.kts Normal file
View File

@ -0,0 +1,68 @@
plugins {
id("otel.java-conventions")
}
description = "OpenTelemetry Contrib Testing"
dependencies {
rootProject.subprojects.forEach { subproject ->
// Generate aggregate coverage report for published modules that enable jacoco.
subproject.plugins.withId("jacoco") {
subproject.plugins.withId("maven-publish") {
implementation(project(subproject.path)) {
isTransitive = false
}
}
}
}
}
// https://docs.gradle.org/current/samples/sample_jvm_multi_project_with_code_coverage.html
val sourcesPath by configurations.creating {
isVisible = false
isCanBeResolved = true
isCanBeConsumed = false
extendsFrom(configurations.implementation.get())
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("source-folders"))
}
}
val coverageDataPath by configurations.creating {
isVisible = false
isCanBeResolved = true
isCanBeConsumed = false
extendsFrom(configurations.implementation.get())
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("jacoco-coverage-data"))
}
}
tasks.named<JacocoReport>("jacocoTestReport") {
enabled = true
configurations.runtimeClasspath.get().forEach {
additionalClassDirs(zipTree(it).filter {
// Exclude mrjar (jacoco complains), shaded, and generated code
!it.absolutePath.contains("META-INF/versions/") &&
!it.absolutePath.contains("AutoValue_")
})
}
additionalSourceDirs(sourcesPath.incoming.artifactView { lenient(true) }.files)
executionData(coverageDataPath.incoming.artifactView { lenient(true) }.files.filter { it.exists() })
reports {
// xml is usually used to integrate code coverage with
// other tools like SonarQube, Coveralls or Codecov
xml.required.set(true)
// HTML reports can be used to see code coverage
// without any external tools
html.required.set(true)
}
}

View File

@ -0,0 +1,49 @@
plugins {
`java-library`
jacoco
}
// https://docs.gradle.org/current/samples/sample_jvm_multi_project_with_code_coverage.html
// Do not generate reports for individual projects
tasks.named("jacocoTestReport") {
enabled = false
}
configurations {
val implementation by getting
create("transitiveSourceElements") {
isVisible = false
isCanBeResolved = false
isCanBeConsumed = true
extendsFrom(implementation)
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("source-folders"))
}
sourceSets.main.get().java.srcDirs.forEach {
outgoing.artifact(it)
}
}
create("coverageDataElements") {
isVisible = false
isCanBeResolved = false
isCanBeConsumed = true
extendsFrom(implementation)
attributes {
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("jacoco-coverage-data"))
}
// This will cause the test task to run if the coverage data is requested by the aggregation task
// The tasks must be eagerly evaluated (no configureEach) to ensure jacoco is wired up
// correctly.
tasks.withType<Test>() {
outgoing.artifact(the<JacocoTaskExtension>().destinationFile!!)
}
}
}

View File

@ -3,6 +3,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
plugins {
`java-library`
id("otel.jacoco-conventions")
id("otel.spotless-conventions")
}

View File

@ -16,6 +16,7 @@ dependencyResolutionManagement {
rootProject.name = "opentelemetry-java-contrib"
include(":all")
include(":aws-xray")
include(":dependencyManagement")
include(":example")