diff options
| author | Fabian Mastenbroek <mail.fabianm@gmail.com> | 2021-03-20 16:51:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-20 16:51:05 +0100 |
| commit | 0862f8489b1122671cefa5c5bd59f677b56a3712 (patch) | |
| tree | 9256a835306601fa522476d02be4c38e0bf001c9 /simulator | |
| parent | 592d60d6d2ef51923eebd844888930b07892da39 (diff) | |
| parent | fce499eaafa0afecee5c14346ff7d75e2fe999b6 (diff) | |
Add support for code coverage tracking via Codecov
This pull request enables aggregate code coverage reports via Jacoco and adds support for coverage tracking via Codecov.
Diffstat (limited to 'simulator')
11 files changed, 65 insertions, 19 deletions
diff --git a/simulator/build.gradle.kts b/simulator/build.gradle.kts index 6b0a9bf1..061d8fc3 100644 --- a/simulator/build.gradle.kts +++ b/simulator/build.gradle.kts @@ -22,6 +22,7 @@ plugins { `dokka-conventions` + `jacoco-aggregation` } allprojects { diff --git a/simulator/buildSrc/build.gradle.kts b/simulator/buildSrc/build.gradle.kts index 4cc1958a..be071d0c 100644 --- a/simulator/buildSrc/build.gradle.kts +++ b/simulator/buildSrc/build.gradle.kts @@ -33,7 +33,7 @@ repositories { } dependencies { - implementation(kotlin("gradle-plugin", version = "1.4.30")) + implementation(kotlin("gradle-plugin", version = "1.4.31")) implementation("org.jlleitschuh.gradle:ktlint-gradle:10.0.0") implementation("org.jetbrains.dokka:dokka-gradle-plugin:0.10.1") } diff --git a/simulator/buildSrc/src/main/kotlin/jacoco-aggregation.gradle.kts b/simulator/buildSrc/src/main/kotlin/jacoco-aggregation.gradle.kts index 8c07fdea..3e8aa741 100644 --- a/simulator/buildSrc/src/main/kotlin/jacoco-aggregation.gradle.kts +++ b/simulator/buildSrc/src/main/kotlin/jacoco-aggregation.gradle.kts @@ -32,19 +32,25 @@ repositories { mavenCentral() } -task<JacocoReport>("jacocoTestReport") { +tasks.register<JacocoReport>("codeCoverageReport") { group = "Coverage reports" - description = "Generates an aggregate report from all subprojects" + description = "Generates an aggregate report based on all subprojects" - val jacocoReportTasks = subprojects.map { it.tasks.withType<JacocoReport>() } - dependsOn(jacocoReportTasks) - executionData(jacocoReportTasks) + reports { + xml.isEnabled = true + xml.destination = file("${buildDir}/reports/jacoco/report.xml") - subprojects.forEach { testedProject -> - val sourceSets = testedProject.convention.findPlugin(JavaPluginConvention::class)?.sourceSets ?: return@forEach + html.isEnabled = true + } - this@task.additionalSourceDirs.from(sourceSets["main"].allSource.srcDirs) - this@task.sourceDirectories.from(sourceSets["main"].allSource.srcDirs) - this@task.classDirectories.from(sourceSets["main"].output) + subprojects { + this@subprojects.plugins.withType<JacocoPlugin>().configureEach { + this@subprojects.tasks.matching { + it.extensions.findByType<JacocoTaskExtension>() != null } + .configureEach { + sourceSets(this@subprojects.the<SourceSetContainer>().named("main").get()) + executionData(this) + } + } } } diff --git a/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts b/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts index e0bc2ce4..d0534d4f 100644 --- a/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts +++ b/simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts @@ -30,3 +30,36 @@ tasks.jacocoTestReport { html.isEnabled = true } } + +/* Share sources folder with other projects for aggregated JaCoCo reports */ +configurations.create("transitiveSourcesElements") { + isVisible = false + isCanBeResolved = false + isCanBeConsumed = true + 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")) + } + sourceSets.main.get().java.srcDirs.forEach { + outgoing.artifact(it) + } +} + +/* Share the coverage data to be aggregated for the whole product */ +configurations.create("coverageDataElements") { + isVisible = false + isCanBeResolved = false + isCanBeConsumed = true + 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")) + } + // This will cause the test task to run if the coverage data is requested by the aggregation task + outgoing.artifact(tasks.test.map { task -> + task.extensions.getByType<JacocoTaskExtension>().destinationFile!! + }) +} diff --git a/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts b/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts index 566b765f..f129c282 100644 --- a/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts +++ b/simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts @@ -1,7 +1,3 @@ -import org.gradle.kotlin.dsl.`java-library` -import org.gradle.kotlin.dsl.kotlin -import org.gradle.platform.base.Library - /* * Copyright (c) 2021 AtLarge Research * @@ -30,6 +26,11 @@ plugins { tasks.test { useJUnitPlatform() + + reports { + html.isEnabled = true + junitXml.isEnabled = true + } } dependencies { diff --git a/simulator/gradle.properties b/simulator/gradle.properties index 930be6b5..8d41408c 100644 --- a/simulator/gradle.properties +++ b/simulator/gradle.properties @@ -21,12 +21,12 @@ # # Dependencies -kotlinx-coroutines.version = 1.4.2 +kotlinx-coroutines.version = 1.4.3 # Dependencies (Logging) -kotlin-logging.version = 2.0.4 +kotlin-logging.version = 2.0.6 slf4j.version = 1.7.30 -log4j.version = 2.14.0 +log4j.version = 2.14.1 # Dependencies (CLI) clikt.version = 3.1.0 @@ -45,4 +45,4 @@ classgraph.version = 4.8.102 # Dependencies (Testing) junit-jupiter.version = 5.7.1 junit-platform.version = 1.7.1 -mockk.version = 1.10.5 +mockk.version = 1.11.0 diff --git a/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts b/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts index 31fcda2f..1ad3f1c6 100644 --- a/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts +++ b/simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts @@ -26,6 +26,7 @@ description = "Simulator for OpenDC Compute" plugins { `kotlin-library-conventions` `testing-conventions` + `jacoco-conventions` } dependencies { diff --git a/simulator/opendc-format/build.gradle.kts b/simulator/opendc-format/build.gradle.kts index 385e556d..ea43275a 100644 --- a/simulator/opendc-format/build.gradle.kts +++ b/simulator/opendc-format/build.gradle.kts @@ -26,6 +26,7 @@ description = "Library for reading common data formats for topology simulation" plugins { `kotlin-library-conventions` `testing-conventions` + `jacoco-conventions` } dependencies { diff --git a/simulator/opendc-harness/build.gradle.kts b/simulator/opendc-harness/build.gradle.kts index f980853c..01b4ecd6 100644 --- a/simulator/opendc-harness/build.gradle.kts +++ b/simulator/opendc-harness/build.gradle.kts @@ -26,6 +26,7 @@ description = "Harness for defining repeatable experiments using OpenDC" plugins { `kotlin-library-conventions` `testing-conventions` + `jacoco-conventions` } dependencies { diff --git a/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts b/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts index 66d7d9e5..0005928f 100644 --- a/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts +++ b/simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts @@ -25,6 +25,7 @@ description = "Library for simulation of cloud computing components" plugins { `kotlin-library-conventions` `testing-conventions` + `jacoco-conventions` } dependencies { diff --git a/simulator/opendc-workflow/opendc-workflow-service/build.gradle.kts b/simulator/opendc-workflow/opendc-workflow-service/build.gradle.kts index 12a54235..bec18ae9 100644 --- a/simulator/opendc-workflow/opendc-workflow-service/build.gradle.kts +++ b/simulator/opendc-workflow/opendc-workflow-service/build.gradle.kts @@ -26,6 +26,7 @@ description = "Workflow orchestration service for OpenDC" plugins { `kotlin-library-conventions` `testing-conventions` + `jacoco-conventions` } dependencies { |
