diff --git a/Jenkinsfile b/Jenkinsfile index 564029b..c419f7c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -2,16 +2,58 @@ pipeline { agent any stages { + stage('Build') { + steps { + withChecks(name: 'build', includeStage: false) { + withGradle { + sh """ + ./gradlew clean testClasses --no-daemon + """ + } + } + } + } // Build + stage('Test') { steps { -// withChecks(name: 'Test', includeStage: true) { - echo 'Testing..' - sh './gradlew clean test' - junit '**/build/test-results/test/TEST-*.xml' -// } + withChecks(name: 'test-coverage', includeStage: false) { + withGradle { + sh """ + ./gradlew test jacocoTestReport jacocoTestCoverageVerification --no-daemon + """ + } + recordCoverage(tools: [[parser: 'JACOCO', pattern: '**/build/reports/jacoco/test/jacoco*.xml']], + id: 'jacoco', + name: 'Jacoco Coverage', + sourceCodeRetention: 'EVERY_BUILD', + qualityGates: [ + [threshold: 40.0, metric: 'CLASS', baseline: 'PROJECT', unstable: true], + [threshold: 40.0, metric: 'METHOD', baseline: 'PROJECT', unstable: true], + [threshold: 40.0, metric: 'LINE', baseline: 'PROJECT', unstable: true], + [threshold: 40.0, metric: 'BRANCH', baseline: 'PROJECT', unstable: true]] + + ) + } } - } + } // Test + + stage('Post') { + steps { + script { + junit '**/build/test-results/test/TEST-*.xml' + // archiveArtifacts artifacts: '**/coverage-sources.zip', allowEmptyArchive: false, fingerprint: false, onlyIfSuccessful: false + publishHTML (target: [ + allowMissing: true, + alwaysLinkToLastBuild: false, + keepAll: true, + reportDir: 'app/build/reports/jacoco/test/html', + reportFiles: 'index.html', + reportName: 'Coverage Report' + ]) + // def pmd = scanForIssues tool: [$class: 'Pmd'], pattern: 'lib/build/reports/pmd/*.xml' + // publishIssues issues: [pmd] + } + } + } // Post } -} - - +} \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f8889ae..8df3e47 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,6 +9,7 @@ plugins { // Apply the application plugin to add support for building a CLI application in Java. application + jacoco } repositories { @@ -22,6 +23,7 @@ dependencies { // This dependency is used by the application. implementation("com.google.guava:guava:31.1-jre") + implementation("org.jacoco:org.jacoco.core:0.8.12") } // Apply a specific Java toolchain to ease working on different environments. @@ -31,6 +33,40 @@ java { } } +jacoco { + toolVersion = "0.8.12" +} + +tasks.jacocoTestReport { + reports { + xml.required.set(true) + csv.required.set(false) + html.required.set(true) + } +} + +//tasks.jacocoTestCoverageVerification { +// violationRules { +// rule { +// limit { +// minimum = "0.2".toBigDecimal() +// } +// } +// +// rule { +// isEnabled = false +// element = "CLASS" +// includes = listOf("jenkins.test.*") +// +// limit { +// counter = "LINE" +// value = "TOTALCOUNT" +// minimum = "0.3".toBigDecimal() +// } +// } +// } +//} + application { // Define the main class for the application. mainClass.set("jenkins.test.App")