Make rextendr packages CRAN compatible by default #843
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] | |
types: | |
- opened | |
- reopened | |
- synchronize | |
- ready_for_review | |
name: Test package generation | |
jobs: | |
R-CMD-check: | |
runs-on: ${{ matrix.config.os }} | |
name: PkgGen ${{ 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: '43'} | |
- {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 }} | |
use-public-rspm: true | |
- 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") | |
) | |
# 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} |