Merge pull request #1091 from pharmaverse/874-enhancement/ratios-in-s… #195
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - R/** | |
| - tests/** | |
| workflow_dispatch: | |
| name: Code Coverage | |
| jobs: | |
| coverage: | |
| name: Test Coverage | |
| runs-on: ubuntu-latest | |
| container: | |
| image: "ghcr.io/pharmaverse/admiralci-release:latest" | |
| env: | |
| GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} | |
| outputs: | |
| coverage-percent: ${{ steps.set-coverage-percentage.outputs.coverage-percentage }} | |
| steps: | |
| ##################### BEGIN boilerplate steps ##################### | |
| - name: Get branch names | |
| id: branch-name | |
| uses: tj-actions/branch-names@v8 | |
| - name: Checkout repo (PR) 🛎 | |
| uses: actions/checkout@v4.2.2 | |
| if: github.event_name == 'pull_request' | |
| with: | |
| ref: ${{ steps.branch-name.outputs.head_ref_branch }} | |
| repository: ${{ github.event.repository }} | |
| - name: Checkout repository | |
| uses: actions/checkout@v4.2.2 | |
| if: github.event_name != 'pull_request' | |
| with: | |
| ref: ${{ steps.branch-name.outputs.head_ref_branch }} | |
| - name: Setup Pandoc | |
| uses: r-lib/actions/setup-pandoc@v2 | |
| - name: Setup R | |
| uses: r-lib/actions/setup-r@v2 | |
| with: | |
| use-public-rspm: true | |
| - name: Install R Dependencies | |
| uses: r-lib/actions/setup-r-dependencies@v2 | |
| with: | |
| needs: tests | |
| extra-packages: local::. | |
| ##################### END boilerplate steps ##################### | |
| - name: Run coverage 👟 | |
| run: | | |
| tryCatch( | |
| expr = { | |
| x <- covr::package_coverage( | |
| path=".", | |
| clean = FALSE, | |
| quiet = FALSE | |
| ) | |
| print(x) | |
| covr::to_cobertura(x, filename = "coverage.xml") | |
| p <- round(covr::percent_coverage(x)) | |
| cat(p, file = "coverage.txt", sep = "") | |
| covr::report( | |
| x, | |
| file = "coverage-report.html", | |
| browse = FALSE | |
| ) | |
| }, | |
| error = function(e) { | |
| message("Errors generated during coverage analysis:") | |
| print(e) | |
| error_file <- list.files(path = "/tmp", pattern="*.fail$", recursive = T, full.names = T)[1] | |
| if (length(error_file) && file.exists(error_file)) { | |
| cat("__________FULL OUTPUT__________") | |
| writeLines(readLines(error_file)) | |
| } | |
| }, | |
| warning = function(w) { | |
| message("Warnings generated during coverage analysis:") | |
| print(w) | |
| } | |
| ) | |
| shell: Rscript {0} | |
| - name: Check whether coverage reports exists | |
| id: check_coverage_reports | |
| uses: andstor/file-existence-action@v1 | |
| with: | |
| files: "coverage.xml, coverage.txt, coverage-report.html" | |
| - name: Set coverage percentage as output | |
| id: set-coverage-percentage | |
| run: echo "coverage-percentage=$(cat coverage.txt)" >> $GITHUB_OUTPUT | |
| if: steps.check_coverage_reports.outputs.files_exists == 'true' | |
| - name: Generate Coverage Summary Report | |
| if: steps.check_coverage_reports.outputs.files_exists == 'true' && github.event_name == 'pull_request' | |
| uses: irongut/CodeCoverageSummary@v1.2.0 | |
| with: | |
| filename: coverage.xml | |
| badge: true | |
| fail_below_min: false | |
| format: markdown | |
| hide_branch_rate: true | |
| hide_complexity: true | |
| indicators: true | |
| output: both | |
| thresholds: "60 80" | |
| - name: Upload report for review | |
| if: steps.check_coverage_reports.outputs.files_exists == 'true' && github.event_name == 'pull_request' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-report | |
| path: "coverage-report.html" | |
| continue-on-error: true | |
| - name: Add Coverage PR Comment | |
| if: steps.check_coverage_reports.outputs.files_exists == 'true' && github.event_name == 'pull_request' | |
| uses: marocchino/sticky-pull-request-comment@v2 | |
| with: | |
| header: code-coverage | |
| path: code-coverage-results.md | |
| continue-on-error: true | |
| badge: | |
| name: Generate badge for coverage | |
| needs: [coverage] | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Checkout the badges branch in repo | |
| uses: actions/checkout@v4.2.2 | |
| with: | |
| ref: badges | |
| path: badges | |
| # Use the output from the `coverage` step | |
| - name: Generate the badge SVG image | |
| uses: emibcn/badge-action@v1 | |
| id: badge | |
| with: | |
| label: "Test Coverage" | |
| status: "${{ needs.coverage.outputs.coverage-percent }}%" | |
| color: ${{ | |
| needs.coverage.outputs.coverage-percent > 90 && 'green' || | |
| needs.coverage.outputs.coverage-percent > 80 && 'yellow,green' || | |
| needs.coverage.outputs.coverage-percent > 70 && 'yellow' || | |
| needs.coverage.outputs.coverage-percent > 60 && 'orange,yellow' || | |
| needs.coverage.outputs.coverage-percent > 50 && 'orange' || | |
| needs.coverage.outputs.coverage-percent > 40 && 'red,orange' || | |
| needs.coverage.outputs.coverage-percent > 30 && 'red,red,orange' || | |
| needs.coverage.outputs.coverage-percent > 20 && 'red,red,red,orange' || | |
| 'red' }} | |
| path: badges/test-coverage.svg | |
| - name: Commit badge | |
| working-directory: ./badges | |
| run: | | |
| git config --local user.email "action@github.com" | |
| git config --local user.name "GitHub Actions" | |
| BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}} | |
| mkdir -p "${BRANCH}" | |
| mv test-coverage.svg "${BRANCH}" | |
| git add "${BRANCH}/test-coverage.svg" | |
| git commit -m "Add/Update badge" || true | |
| - name: Push badges | |
| uses: ad-m/github-push-action@master | |
| with: | |
| github_token: ${{ secrets.GITHUB_TOKEN }} | |
| branch: badges | |
| directory: badges | |
| continue-on-error: true |