Adds CRAN compliance helpers and vignette #609
Workflow file for this run
This file contains 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 | |
- master | |
pull_request: | |
branches: | |
- main | |
- master | |
name: Test package generation | |
jobs: | |
R-CMD-check: | |
runs-on: ${{ matrix.config.os }} | |
name: ${{ matrix.config.os }} (${{ matrix.config.r }} / ${{ matrix.config.rust-version }}) | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- {os: windows-latest, r: 'release', rust-version: 'stable-msvc', rust-target: 'x86_64-pc-windows-gnu'} | |
- {os: windows-latest, r: 'devel', rust-version: 'stable-msvc', rust-target: 'x86_64-pc-windows-gnu'} | |
- {os: windows-latest, r: 'oldrel', rust-version: 'stable-msvc', rust-target: 'x86_64-pc-windows-gnu', rtools-version: '42'} | |
- {os: macOS-latest, r: 'release', rust-version: 'stable'} | |
- {os: ubuntu-latest, r: 'release', rust-version: 'stable'} | |
- {os: ubuntu-latest, r: 'devel', rust-version: 'stable'} | |
- {os: ubuntu-latest, r: 'oldrel', rust-version: 'stable'} | |
env: | |
R_REMOTES_NO_ERRORS_FROM_WARNINGS: true | |
RSPM: ${{ matrix.config.rspm }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: ${{ matrix.config.rust-version }} | |
targets: ${{ matrix.config.rust-target }} | |
- name: Set up R | |
uses: r-lib/actions/setup-r@v2 | |
with: | |
r-version: ${{ matrix.config.r }} | |
rtools-version: ${{ matrix.config.rtools-version }} | |
# TODO: enable RSPM when all the packages are available | |
use-public-rspm: false | |
- name: Set up pandoc | |
uses: r-lib/actions/setup-pandoc@v2 | |
- uses: r-lib/actions/setup-r-dependencies@v2 | |
with: | |
# increment this version number when we need to clear the cache | |
cache-version: 3 | |
extra-packages: rcmdcheck, devtools, usethis | |
- name: Test package generation | |
env: | |
_R_CHECK_CRAN_INCOMING_REMOTE_: false | |
run: | | |
# preperation | |
remotes::install_local(force = TRUE) | |
temp_dir <- tempdir() | |
pkg_dir <- file.path(temp_dir, "testpkg") | |
dir.create(pkg_dir, recursive = TRUE) | |
setwd(pkg_dir) | |
Sys.setenv(REXTENDR_TEST_PKG_ROOT = getwd()) | |
devtools::create(".") | |
usethis::proj_activate(".") | |
rextendr::use_extendr() | |
usethis::use_mit_license() | |
usethis::use_testthat() | |
brio::write_lines( | |
c( | |
"test_that(\"`hello_world()` works\", {", | |
" expect_equal(hello_world(), \"Hello world!\")", | |
"})", | |
"test_that(\"`rextendr::use_extendr()` works\", {", | |
" wrap_path <- file.path(Sys.getenv(\"REXTENDR_TEST_PKG_ROOT\"), \"R\", \"extendr-wrappers.R\")", | |
" expect_equal(readLines(wrap_path, 1), \"# Generated by extendr: Do not edit by hand\")", | |
"})" | |
), | |
file.path("tests", "testthat", "test-hello.R") | |
) | |
# test NOT_CRAN envvar | |
brio::write_lines( | |
c( | |
"if [ \"$NOT_CRAN\" != \"true\" ]; then", | |
" exit 1", | |
"fi" | |
), | |
file.path("configure") | |
) | |
Sys.chmod("configure", "0755") | |
# TODO: allow warnings on oldrel (cf., https://stat.ethz.ch/pipermail/r-package-devel/2023q2/009229.html) | |
if (.Platform$OS.type == "windows" && getRversion() < "4.3.0") { | |
error_on <- "error" | |
} else { | |
error_on <- "warning" | |
} | |
# check if rextendr::document() compiles and generates wrappers properly | |
rextendr::document() | |
rcmdcheck::rcmdcheck( | |
path = ".", | |
args = c("--no-manual", "--as-cran"), | |
error_on = error_on, | |
check_dir = "check_use_extendr" | |
) | |
library_path <- rextendr:::get_library_path() | |
library_mtime_before <- file.info(library_path)$mtime | |
wrappers_path <- file.path("R", "extendr-wrappers.R") | |
wrappers_mtime_before <- file.info(wrappers_path)$mtime | |
# check if rextendr::document() don't regenerate wrappers when unnecessary | |
rextendr::document() | |
stopifnot(library_mtime_before == file.info(library_path)$mtime) | |
stopifnot(wrappers_mtime_before == file.info(wrappers_path)$mtime) | |
# check if force = TRUE forces regenerating wrappers, but not compile | |
rextendr::register_extendr(force = TRUE) | |
stopifnot(library_mtime_before == file.info(library_path)$mtime) | |
stopifnot(wrappers_mtime_before < file.info(wrappers_path)$mtime) | |
wrappers_mtime_before <- file.info(wrappers_path)$mtime | |
# check if compile = TRUE forces compile, and accordingly the wrapper generation | |
rextendr::register_extendr(compile = TRUE) | |
stopifnot(library_mtime_before < file.info(library_path)$mtime) | |
stopifnot(wrappers_mtime_before < file.info(wrappers_path)$mtime) | |
shell: Rscript {0} |