diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml index efb48b9..65af685 100644 --- a/.forgejo/workflows/ci.yml +++ b/.forgejo/workflows/ci.yml @@ -42,6 +42,39 @@ jobs: - name: Backend coverage run: ./gradlew :backend:jacocoTestCoverageVerification + - name: Print coverage summary + run: | + node -e " + const fs = require('fs'); + const xml = fs.readFileSync('backend/build/reports/jacoco/test/jacocoTestReport.xml', 'utf8'); + const lineMatch = xml.match(//g); + const branchMatch = xml.match(//g); + if (lineMatch && branchMatch) { + const lastLine = lineMatch[lineMatch.length - 1].match(/missed=\"(\d+)\" covered=\"(\d+)\"/); + const lastBranch = branchMatch[branchMatch.length - 1].match(/missed=\"(\d+)\" covered=\"(\d+)\"/); + const lineMissed = +lastLine[1], lineCovered = +lastLine[2]; + const branchMissed = +lastBranch[1], branchCovered = +lastBranch[2]; + const linePct = (lineCovered / (lineMissed + lineCovered) * 100).toFixed(1); + const branchPct = (branchCovered / (branchMissed + branchCovered) * 100).toFixed(1); + const lineStatus = linePct >= 70 ? '✅' : '❌'; + const branchStatus = branchPct >= 60 ? '✅' : '❌'; + console.log(''); + console.log('╔══════════════════════════════════════════════════════╗'); + console.log('║ Coverage Summary — Bilhej ║'); + console.log('╠══════════════════════╦══════════╦══════════╦═════════╣'); + console.log('║ Layer │ Lines │ Branch │ Status ║'); + console.log('╠══════════════════════╬══════════╬══════════╬═════════╣'); + console.log('║ Backend │ ' + linePct.padStart(6) + '% │ ' + branchPct.padStart(6) + '% │ ' + lineStatus + ' ' + branchStatus + ' ║'); + console.log('╠══════════════════════╬══════════╬══════════╬═════════╣'); + console.log('║ Thresholds │ 70.0% │ 60.0% │ ║'); + console.log('╚══════════════════════╩══════════╩══════════╩═════════╝'); + console.log(''); + console.log('Frontend coverage printed above by Vitest text reporter.'); + console.log('Download full HTML reports from the Artifacts tab.'); + console.log(''); + } + " + - name: Frontend coverage run: npm run test:coverage working-directory: frontend