diff --git a/NAMESPACE b/NAMESPACE index 8570dae7..6bc39ca0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -23,6 +23,7 @@ export(rust_source) export(to_toml) export(use_crate) export(use_extendr) +export(use_extendr_badge) export(use_msrv) export(vendor_pkgs) export(write_license_note) diff --git a/NEWS.md b/NEWS.md index a8c294cc..78f65fa8 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # rextendr (development version) +* `use_extendr_badge()` has been added to add an extendr-specific badge to a `README.Rmd` via `usethis::use_badge()` * Removes `Makevars.ucrt` as R versions < 4.1 are not supported by extendr * `purrr` has been replaced with [`R/standalone-purrr.R`](https://github.com/r-lib/rlang/blob/main/R/standalone-purrr.R) removing `purrr` from `Imports` * `document()` will no longer try to save all open files using rstudioapi diff --git a/R/badge.R b/R/badge.R new file mode 100644 index 00000000..61815192 --- /dev/null +++ b/R/badge.R @@ -0,0 +1,35 @@ +#' extendr README badge +#' +#' Add the version of extendr being used by an R package to its README. +#' +#' Requires `usethis` to be available. +#' +#' @examples +#' \dontrun{ +#' use_extendr_badge() +#' } +#' +#' @inheritParams use_extendr +#' @export +use_extendr_badge <- function(path = ".") { + rlang::check_installed("usethis") + meta <- read_cargo_metadata(path) + deps <- meta[[c("packages", "dependencies")]][[1]] + + if (rlang::is_null(deps)) { + cli::cli_abort("Unable to determine version of `extendr-api`") + } + + is_extendr <- which(deps$name == "extendr-api") + if (!rlang::is_bare_numeric(is_extendr, 1)) { + cli::cli_abort("Unable to determine version of `extendr-api`") + } + + extendr_version <- deps$req[is_extendr] + + usethis::use_badge( + "extendr", + "https://extendr.github.io/extendr/extendr_api/", + sprintf("https://img.shields.io/badge/extendr-%s-276DC2", extendr_version) + ) +} diff --git a/R/use_extendr.R b/R/use_extendr.R index 499db4ba..5568557a 100644 --- a/R/use_extendr.R +++ b/R/use_extendr.R @@ -198,6 +198,9 @@ use_extendr <- function(path = ".", Sys.chmod("configure", "0755") } + # Set the minimum version of R to 4.2 as now required by libR-sys 0.7 + usethis::use_package("R", "Depends", "4.2") + # the temporary cargo directory must be ignored usethis::use_build_ignore("src/.cargo") @@ -217,6 +220,9 @@ use_extendr <- function(path = ".", usethis::use_build_ignore("src/Makevars.win") usethis::use_git_ignore("src/Makevars.win") + + use_extendr_badge() + if (!isTRUE(quiet)) { cli::cli_alert_success("Finished configuring {.pkg extendr} for package {.pkg {pkg_name}}.") cli::cli_ul( diff --git a/_pkgdown.yml b/_pkgdown.yml index 8fc013b3..716b3cfd 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -32,3 +32,4 @@ reference: - make_module_macro - rust_sitrep - read_cargo_metadata + - use_extendr_badge diff --git a/man/use_extendr_badge.Rd b/man/use_extendr_badge.Rd new file mode 100644 index 00000000..2b71af93 --- /dev/null +++ b/man/use_extendr_badge.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/badge.R +\name{use_extendr_badge} +\alias{use_extendr_badge} +\title{extendr README badge} +\usage{ +use_extendr_badge(path = ".") +} +\arguments{ +\item{path}{File path to the package for which to generate wrapper code.} +} +\description{ +Add the version of extendr being used by an R package to its README. +} +\details{ +Requires \code{usethis} to be available. +} +\examples{ +\dontrun{ +use_extendr_badge() +} + +} diff --git a/tests/testthat/_snaps/use_extendr.md b/tests/testthat/_snaps/use_extendr.md index 12969ea5..bcea8be6 100644 --- a/tests/testthat/_snaps/use_extendr.md +++ b/tests/testthat/_snaps/use_extendr.md @@ -397,6 +397,13 @@ > File 'tools/msrv.R' already exists. Skip writing the file. > File 'configure' already exists. Skip writing the file. > File 'configure.win' already exists. Skip writing the file. + ! Can't find a README for the current project. + i See `usethis::use_readme_rmd()` for help creating this file. + i Badge link will only be printed to screen. + [ ] Copy and paste the following lines into 'README': + + [![extendr](https://img.shields.io/badge/extendr-*-276DC2)](https://extendr.github.io/extendr/extendr_api/) + v Finished configuring extendr for package testpkg.wrap. * Please run `rextendr::document()` for changes to take effect. @@ -416,6 +423,13 @@ v Writing 'tools/msrv.R' v Writing 'configure' v Writing 'configure.win' + ! Can't find a README for the current project. + i See `usethis::use_readme_rmd()` for help creating this file. + i Badge link will only be printed to screen. + [ ] Copy and paste the following lines into 'README': + + [![extendr](https://img.shields.io/badge/extendr-*-276DC2)](https://extendr.github.io/extendr/extendr_api/) + v Finished configuring extendr for package testpkg. * Please run `rextendr::document()` for changes to take effect.