Skip to content

Merge pull request #1091 from pharmaverse/874-enhancement/ratios-in-s… #195

Merge pull request #1091 from pharmaverse/874-enhancement/ratios-in-s…

Merge pull request #1091 from pharmaverse/874-enhancement/ratios-in-s… #195

Workflow file for this run

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