summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build-api.yml23
-rw-r--r--.github/workflows/build-frontend.yml3
-rw-r--r--.github/workflows/build-simulator.yml29
-rw-r--r--api/.gitignore2
-rw-r--r--api/pytest.ini1
-rw-r--r--api/requirements.txt1
-rw-r--r--codecov.yml7
-rw-r--r--simulator/build.gradle.kts1
-rw-r--r--simulator/buildSrc/build.gradle.kts2
-rw-r--r--simulator/buildSrc/src/main/kotlin/jacoco-aggregation.gradle.kts26
-rw-r--r--simulator/buildSrc/src/main/kotlin/jacoco-conventions.gradle.kts33
-rw-r--r--simulator/buildSrc/src/main/kotlin/testing-conventions.gradle.kts9
-rw-r--r--simulator/gradle.properties8
-rw-r--r--simulator/opendc-compute/opendc-compute-simulator/build.gradle.kts1
-rw-r--r--simulator/opendc-format/build.gradle.kts1
-rw-r--r--simulator/opendc-harness/build.gradle.kts1
-rw-r--r--simulator/opendc-simulator/opendc-simulator-compute/build.gradle.kts1
-rw-r--r--simulator/opendc-workflow/opendc-workflow-service/build.gradle.kts1
18 files changed, 117 insertions, 33 deletions
diff --git a/.github/workflows/build-api.yml b/.github/workflows/build-api.yml
index 5bbc30c4..4ae261db 100644
--- a/.github/workflows/build-api.yml
+++ b/.github/workflows/build-api.yml
@@ -1,9 +1,6 @@
name: Build API
on:
- push:
- paths:
- - 'api/**'
pull_request:
branches: [master]
@@ -29,8 +26,20 @@ jobs:
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Lint with pylint
- run: |
- ./check.sh
+ run: ./check.sh
- name: Test with pytest
- run: |
- pytest opendc
+ run: pytest --cov=opendc/ --junitxml=.junit-report.xml
+ - name: Publish report
+ if: always()
+ uses: mikepenz/action-junit-report@v2
+ with:
+ check_name: test (Python ${{ matrix.python }})
+ report_paths: '**/.junit-report.xml'
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload code coverage
+ uses: codecov/codecov-action@v1
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ files: ./api/.coverage
+ flags: api
+
diff --git a/.github/workflows/build-frontend.yml b/.github/workflows/build-frontend.yml
index 73ab49d5..7c1b95a7 100644
--- a/.github/workflows/build-frontend.yml
+++ b/.github/workflows/build-frontend.yml
@@ -1,9 +1,6 @@
name: Build Frontend
on:
- push:
- paths:
- - 'frontend/**'
pull_request:
branches: [master]
diff --git a/.github/workflows/build-simulator.yml b/.github/workflows/build-simulator.yml
index 57e8b46d..1bee19bc 100644
--- a/.github/workflows/build-simulator.yml
+++ b/.github/workflows/build-simulator.yml
@@ -1,9 +1,6 @@
name: Build Simulator
on:
- push:
- paths:
- - 'simulator/**'
pull_request:
branches: [master]
@@ -21,6 +18,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
+ - name: Validate Gradle wrapper
+ uses: gradle/wrapper-validation-action@v1
- name: Set up JDK
uses: actions/setup-java@v1
with:
@@ -36,4 +35,26 @@ jobs:
- name: Build with Gradle
run: ./gradlew assemble
- name: Check with Gradle
- run: ./gradlew check --info
+ run: ./gradlew check codeCoverageReport
+ - name: Publish report
+ if: always()
+ uses: mikepenz/action-junit-report@v2
+ with:
+ check_name: test (Java ${{ matrix.java }})
+ report_paths: '**/build/test-results/test/TEST-*.xml'
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ - name: Upload artifacts
+ if: always()
+ uses: actions/upload-artifact@v2
+ with:
+ name: reports-${{ matrix.os }}-jdk${{ matrix.java }}
+ path: |
+ ./**/build/reports/**/*
+ ./**/build/test-results/**/*
+ retention-days: 5
+ - name: Upload code coverage
+ uses: codecov/codecov-action@v1
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ files: ./simulator/build/reports/jacoco/report.xml
+ flags: simulator
diff --git a/api/.gitignore b/api/.gitignore
index 0e4f0a70..b0390689 100644
--- a/api/.gitignore
+++ b/api/.gitignore
@@ -14,3 +14,5 @@ _mailinglist
config.json
test.json
.env*
+.coverage
+.junit-report.xml
diff --git a/api/pytest.ini b/api/pytest.ini
index 8c28be16..8e7964ba 100644
--- a/api/pytest.ini
+++ b/api/pytest.ini
@@ -2,3 +2,4 @@
env =
OPENDC_FLASK_TESTING=True
OPENDC_FLASK_SECRET=Secret
+junit_family = xunit2
diff --git a/api/requirements.txt b/api/requirements.txt
index 9bf69b8f..8d0a283a 100644
--- a/api/requirements.txt
+++ b/api/requirements.txt
@@ -30,6 +30,7 @@ pylint==2.5.3
pymongo==3.10.1
pyparsing==2.4.7
pytest==5.4.3
+pytest-cov==2.11.1
pytest-env==0.6.2
pytest-mock==3.2.0
python-dotenv==0.14.0
diff --git a/codecov.yml b/codecov.yml
new file mode 100644
index 00000000..6b69e117
--- /dev/null
+++ b/codecov.yml
@@ -0,0 +1,7 @@
+flags:
+ simulator:
+ paths:
+ - simulator/
+ api:
+ paths:
+ - api/
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 {