diff --git a/.github/workflows/pr_weekly_ci.yml b/.github/workflows/pr_weekly_ci.yml index f54701f..372f0ca 100644 --- a/.github/workflows/pr_weekly_ci.yml +++ b/.github/workflows/pr_weekly_ci.yml @@ -53,7 +53,7 @@ jobs: - name: 빌드 테스트 수행 run: | chmod +x ./gradlew - ./gradlew clean build --build-cache --stacktrace + ./gradlew clean build jacocoTestReport --build-cache --stacktrace - name: 테스트 수행 결과 보고 uses: EnricoMi/publish-unit-test-result-action@v2 @@ -67,3 +67,19 @@ jobs: with: report_paths: '**/build/test-results/test/TEST-*.xml' token: ${{ github.token }} + + - name: JaCoCo 테스트 커버리지 리포트 업로드 + uses: actions/upload-artifact@v3 + if: always() + with: + name: jacoco-report + path: '**/build/reports/jacoco/' + + - name: JaCoCo 테스트 커버리지 결과를 PR에 코멘트로 등록 + uses: madrapps/jacoco-report@v1.6.1 + with: + paths: ${{ github.workspace }}/build/reports/jacoco/test/jacocoTestReport.xml + token: ${{ github.token }} + min-coverage-overall: 70 + min-coverage-changed-files: 70 + title: '📊 테스트 커버리지 리포트' diff --git a/build.gradle b/build.gradle index 98243d9..ff625e8 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,6 @@ plugins { id 'java' + id 'jacoco' id 'org.springframework.boot' version '3.3.3' id 'io.spring.dependency-management' version '1.1.6' } @@ -51,3 +52,41 @@ dependencies { tasks.named('test') { useJUnitPlatform() } + +jacocoTestReport { + dependsOn test // 테스트 실행 후 리포트 생성을 보장 + + reports { + xml.required = true + html.required = true + } + + afterEvaluate { + classDirectories.setFrom(files(classDirectories.files.collect { + fileTree(dir: it, exclude: [ + '**/constant/**', + '**/config/**', + '**/dto/**', + '**/security/**', + '**/exception/**', + '**/*Application.class' + ]) + })) + } +} + +test { + useJUnitPlatform() + finalizedBy jacocoTestReport +} + +// 테스트 커버리지 최소 기준 설정 +jacocoTestCoverageVerification { + violationRules { + rule { + limit { + minimum = 0.70 + } + } + } +}