Skip to content
Merged
10 changes: 9 additions & 1 deletion .github/workflows/opencode-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,14 @@ jobs:
python3 -m pip install --disable-pip-version-check --require-hashes
--only-binary=:all: -r requirements-opencode-review-ci-hashes.txt

- name: Cache R coverage tooling library
uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
with:
path: ${{ runner.temp }}/R-library
key: r-coverage-lib-${{ runner.os }}-covr-testthat-v1
restore-keys: |
r-coverage-lib-${{ runner.os }}-

- name: Measure test and docstring evidence
id: measure
env:
Expand Down Expand Up @@ -861,7 +869,7 @@ jobs:
export R_LIBS_USER="${RUNNER_TEMP}/R-library"
mkdir -p "$R_LIBS_USER"
run_and_capture "R coverage tooling (covr/testthat)" \
bash -c 'timeout 780 Rscript -e '\''user_repo <- "https://cloud.r-project.org"; codename <- tryCatch(sub("[[:space:]]+$", "", system2("lsb_release", "-cs", stdout = TRUE, stderr = FALSE)[1]), error = function(e) ""); if (length(codename) == 1 && !is.na(codename) && nzchar(codename)) { options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version$platform, R.version$arch, R.version$os))); repos <- c(sprintf("https://p3m.dev/cran/__linux__/%s/latest", codename), user_repo) } else { repos <- user_repo }; lib <- Sys.getenv("R_LIBS_USER"); install_deps <- c("Depends", "Imports", "LinkingTo"); dir.create(lib, recursive = TRUE, showWarnings = FALSE); .libPaths(c(lib, .libPaths())); required <- c("covr", "testthat"); if (file.exists("DESCRIPTION")) { desc <- read.dcf("DESCRIPTION")[1, , drop = FALSE]; fields <- intersect(c("Depends", "Imports", "LinkingTo"), colnames(desc)); values <- as.character(desc[, fields, drop = TRUE]); values <- values[!is.na(values)]; package_deps <- trimws(gsub("\\s*\\([^)]*\\)", "", unlist(strsplit(paste(values, collapse = ","), ","), use.names = FALSE))); package_deps <- setdiff(package_deps[nzchar(package_deps)], "R"); required <- unique(c(required, package_deps)); }; for (pkg in required) if (!requireNamespace(pkg, quietly = TRUE)) install.packages(pkg, repos = repos, lib = lib, dependencies = install_deps); missing <- required[!vapply(required, requireNamespace, logical(1), quietly = TRUE)]; if (length(missing)) stop("R coverage tooling packages unavailable after install: ", paste(missing, collapse = ", "))'\'' || { echo "R coverage tooling install unavailable or exceeded the runner time budget; deferring to required peer R CMD check evidence."; exit 0; }'
bash -c 'timeout 780 Rscript -e '\''user_repo <- "https://cloud.r-project.org"; codename <- tryCatch({ os <- readLines("/etc/os-release", warn = FALSE); v <- grep("^VERSION_CODENAME=", os, value = TRUE); if (length(v)) sub("^VERSION_CODENAME=", "", v[1]) else "" }, error = function(e) ""); binary_repo <- if (nzchar(codename)) sprintf("https://packagemanager.posit.co/cran/__linux__/%s/latest", codename) else "https://packagemanager.posit.co/cran/latest"; repos <- c(binary_repo, user_repo); options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version$platform, R.version$arch, R.version$os))); message("R package repositories: ", paste(repos, collapse = ", "), " (binary packages preferred via Posit Public Package Manager)"); lib <- Sys.getenv("R_LIBS_USER"); install_deps <- c("Depends", "Imports", "LinkingTo"); dir.create(lib, recursive = TRUE, showWarnings = FALSE); .libPaths(c(lib, .libPaths())); required <- c("covr", "testthat"); if (file.exists("DESCRIPTION")) { desc <- read.dcf("DESCRIPTION")[1, , drop = FALSE]; fields <- intersect(c("Depends", "Imports", "LinkingTo"), colnames(desc)); values <- as.character(desc[, fields, drop = TRUE]); values <- values[!is.na(values)]; package_deps <- trimws(gsub("\\s*\\([^)]*\\)", "", unlist(strsplit(paste(values, collapse = ","), ","), use.names = FALSE))); package_deps <- setdiff(package_deps[nzchar(package_deps)], "R"); required <- unique(c(required, package_deps)); }; for (pkg in required) if (!requireNamespace(pkg, quietly = TRUE)) install.packages(pkg, repos = repos, lib = lib, dependencies = install_deps); missing <- required[!vapply(required, requireNamespace, logical(1), quietly = TRUE)]; if (length(missing)) stop("R coverage tooling packages unavailable after install from ", paste(repos, collapse = ", "), ": ", paste(missing, collapse = ", "))'\'' || { echo "R coverage tooling install did not complete or exceeded 780 seconds (see log above for repositories used and any install error); deferring to required peer R CMD check evidence."; exit 0; }'
if [ -f DESCRIPTION ]; then
if [ -d tests/testthat ]; then
run_and_capture "R package testthat suite" \
Expand Down
Loading