diff --git a/Makefile b/Makefile index 74a3b031..b6ee01f5 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ clean: cargo llvm-cov clean --workspace coverage: - cargo llvm-cov --workspace --all-features --html --output-dir target/llvm-cov/html --fail-under-lines 0 --fail-under-functions 0 --fail-under-regions 0 + cargo llvm-cov --workspace --all-features --html --output-dir target/llvm-cov/html coverage-xml: cargo llvm-cov report --cobertura --output-path target/llvm-cov/cobertura.xml diff --git a/files/config/Jenkinsfile b/files/config/Jenkinsfile index 8c9b22a3..d10aac19 100644 --- a/files/config/Jenkinsfile +++ b/files/config/Jenkinsfile @@ -3,6 +3,10 @@ pipeline { environment { CARGO_TERM_COLOR = 'always' + + MIN_LINES = '0' + MIN_FUNCTIONS = '0' + MIN_REGIONS = '0' } stages { @@ -12,22 +16,55 @@ pipeline { sh ''' set -eux make ci cobertura + + LINES=$(jq -r '.data[0].totals.lines.percent' target/llvm-cov/summary.json) + FUNCTIONS=$(jq -r '.data[0].totals.functions.percent' target/llvm-cov/summary.json) + REGIONS=$(jq -r '.data[0].totals.regions.percent' target/llvm-cov/summary.json) + + echo "Coverage summary:" + echo " Lines: ${LINES}%" + echo " Functions: ${FUNCTIONS}%" + echo " Regions: ${REGIONS}%" + + FAIL=0 + + awk "BEGIN { exit !(${LINES} < ${MIN_LINES}) }" && { + echo "Lines coverage ${LINES}% is below minimum ${MIN_LINES}%" + FAIL=1 + } || true + + awk "BEGIN { exit !(${FUNCTIONS} < ${MIN_FUNCTIONS}) }" && { + echo "Functions coverage ${FUNCTIONS}% is below minimum ${MIN_FUNCTIONS}%" + FAIL=1 + } || true + + awk "BEGIN { exit !(${REGIONS} < ${MIN_REGIONS}) }" && { + echo "Regions coverage ${REGIONS}% is below minimum ${MIN_REGIONS}%" + FAIL=1 + } || true + + if [ "$FAIL" -ne 0 ]; then + echo "Coverage gate failed." + exit 1 + fi + + echo "Coverage gate passed." ''' - recordCoverage( - tools: [[parser: 'COBERTURA', pattern: 'target/llvm-cov/cobertura.xml']], - sourceCodeRetention: 'LAST_BUILD', - enabledForFailure: true, - failOnError: false, - checksAnnotationScope: 'MODIFIED_LINES', - id: 'rust-coverage', - name: 'Rust Coverage', - checksName: 'Rust Coverage', - qualityGates: [ - [metric: 'LINE', baseline: 'MODIFIED_LINES', threshold: 0.0], - [metric: 'LINE', baseline: 'PROJECT', threshold: 0.0], - [metric: 'BRANCH', baseline: 'PROJECT', threshold: 0.0] - ] - ) +// recordCoverage( +// tools: [[parser: 'COBERTURA', pattern: 'target/llvm-cov/cobertura.xml']], +// sourceCodeRetention: 'LAST_BUILD', +// enabledForFailure: true, +// failOnError: false, +// checksAnnotationScope: 'MODIFIED_LINES', +// id: 'rust-coverage', +// name: 'Rust Coverage', +// checksName: 'Rust Coverage', +// qualityGates: [ +// [metric: 'LINE', baseline: 'MODIFIED_LINES', threshold: 0.0], +// [metric: 'LINE', baseline: 'PROJECT', threshold: 0.0], +// [metric: 'BRANCH', baseline: 'PROJECT', threshold: 0.0] +// ] +// ) } } } // Test