Skip to content

Commit 2332851

Browse files
author
Anuraag Agrawal
authored
Setup jacoco (#60)
1 parent ed31fba commit 2332851

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed

all/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
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.

all/build.gradle.kts

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
plugins {
2+
id("otel.java-conventions")
3+
}
4+
5+
description = "OpenTelemetry Contrib Testing"
6+
7+
dependencies {
8+
rootProject.subprojects.forEach { subproject ->
9+
// Generate aggregate coverage report for published modules that enable jacoco.
10+
subproject.plugins.withId("jacoco") {
11+
subproject.plugins.withId("maven-publish") {
12+
implementation(project(subproject.path)) {
13+
isTransitive = false
14+
}
15+
}
16+
}
17+
}
18+
}
19+
20+
// https://docs.gradle.org/current/samples/sample_jvm_multi_project_with_code_coverage.html
21+
22+
val sourcesPath by configurations.creating {
23+
isVisible = false
24+
isCanBeResolved = true
25+
isCanBeConsumed = false
26+
extendsFrom(configurations.implementation.get())
27+
attributes {
28+
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
29+
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
30+
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("source-folders"))
31+
}
32+
}
33+
34+
val coverageDataPath by configurations.creating {
35+
isVisible = false
36+
isCanBeResolved = true
37+
isCanBeConsumed = false
38+
extendsFrom(configurations.implementation.get())
39+
attributes {
40+
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
41+
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
42+
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("jacoco-coverage-data"))
43+
}
44+
}
45+
46+
tasks.named<JacocoReport>("jacocoTestReport") {
47+
enabled = true
48+
49+
configurations.runtimeClasspath.get().forEach {
50+
additionalClassDirs(zipTree(it).filter {
51+
// Exclude mrjar (jacoco complains), shaded, and generated code
52+
!it.absolutePath.contains("META-INF/versions/") &&
53+
!it.absolutePath.contains("AutoValue_")
54+
})
55+
}
56+
additionalSourceDirs(sourcesPath.incoming.artifactView { lenient(true) }.files)
57+
executionData(coverageDataPath.incoming.artifactView { lenient(true) }.files.filter { it.exists() })
58+
59+
reports {
60+
// xml is usually used to integrate code coverage with
61+
// other tools like SonarQube, Coveralls or Codecov
62+
xml.required.set(true)
63+
64+
// HTML reports can be used to see code coverage
65+
// without any external tools
66+
html.required.set(true)
67+
}
68+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
plugins {
2+
`java-library`
3+
4+
jacoco
5+
}
6+
7+
// https://docs.gradle.org/current/samples/sample_jvm_multi_project_with_code_coverage.html
8+
9+
// Do not generate reports for individual projects
10+
tasks.named("jacocoTestReport") {
11+
enabled = false
12+
}
13+
14+
configurations {
15+
val implementation by getting
16+
17+
create("transitiveSourceElements") {
18+
isVisible = false
19+
isCanBeResolved = false
20+
isCanBeConsumed = true
21+
extendsFrom(implementation)
22+
attributes {
23+
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
24+
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
25+
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("source-folders"))
26+
}
27+
sourceSets.main.get().java.srcDirs.forEach {
28+
outgoing.artifact(it)
29+
}
30+
}
31+
32+
create("coverageDataElements") {
33+
isVisible = false
34+
isCanBeResolved = false
35+
isCanBeConsumed = true
36+
extendsFrom(implementation)
37+
attributes {
38+
attribute(Usage.USAGE_ATTRIBUTE, objects.named(Usage.JAVA_RUNTIME))
39+
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION))
40+
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, objects.named("jacoco-coverage-data"))
41+
}
42+
// This will cause the test task to run if the coverage data is requested by the aggregation task
43+
// The tasks must be eagerly evaluated (no configureEach) to ensure jacoco is wired up
44+
// correctly.
45+
tasks.withType<Test>() {
46+
outgoing.artifact(the<JacocoTaskExtension>().destinationFile!!)
47+
}
48+
}
49+
}

buildSrc/src/main/kotlin/otel.java-conventions.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
33
plugins {
44
`java-library`
55

6+
id("otel.jacoco-conventions")
67
id("otel.spotless-conventions")
78
}
89

settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ dependencyResolutionManagement {
1616

1717
rootProject.name = "opentelemetry-java-contrib"
1818

19+
include(":all")
1920
include(":aws-xray")
2021
include(":dependencyManagement")
2122
include(":example")

0 commit comments

Comments
 (0)