diff --git a/DESCRIPTION b/DESCRIPTION index 222b886..8f36240 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Type: Package Package: audit.workbench Title: RStudio/Workbench User Acceptance Tests -Version: 0.6.24 +Version: 0.6.25 Authors@R: person("Jumping", "Rivers", , "info@jumpingrivers.com", role = c("aut", "cre")) Description: Testing whether data scientists can do what they expect in @@ -9,7 +9,7 @@ Description: Testing whether data scientists can do what they expect in License: file LICENSE URL: https://jumpingrivers.github.io/audit.workbench/ Imports: - audit.base (>= 0.7.2), + audit.base (>= 0.7.8), BiocManager, cli, dplyr, diff --git a/NEWS.md b/NEWS.md index 814edb8..07b2c14 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +# audit.workbench 0.6.25 + +## Bug fixes and minor improvements + +* `check()` no longer stops outside the RStudio IDE when `rstudio-server` isn't on the `PATH`. It also looks in `/usr/lib/rstudio-server/bin`, and otherwise reports the Workbench version as unknown. Requires audit.base 0.7.8 (#38). + # audit.workbench 0.6.24 ## Bug fixes and minor improvements diff --git a/R/check_posit_version.R b/R/check_posit_version.R index 572ac30..159e525 100644 --- a/R/check_posit_version.R +++ b/R/check_posit_version.R @@ -2,8 +2,7 @@ check_posit_version = function() { if (requireNamespace("rstudioapi", quietly = TRUE) && rstudioapi::isAvailable()) { posit_version = rstudioapi::versionInfo()$long_version } else { - cmd = system2("rstudio-server", args = "version", stdout = TRUE) - posit_version = stringr::str_remove(cmd, " .*") + posit_version = rstudio_server_version() } posit_version = stringr::str_squish(posit_version) @@ -14,3 +13,17 @@ check_posit_version = function() { audit.base::audit_posit_version(posit_version, type = "workbench") posit_version } + +# rstudio-server is often not on a user's PATH, so also look where Workbench installs it. +# NA when it can't be found. +rstudio_server_version = function( + paths = c(Sys.which("rstudio-server"), "/usr/lib/rstudio-server/bin/rstudio-server") +) { + paths = paths[nzchar(paths) & file.exists(paths)] + if (length(paths) == 0L) { + cli::cli_alert_info("Can't find rstudio-server, so can't check the Workbench version") + return(NA_character_) + } + cmd = system2(paths[1L], args = "version", stdout = TRUE) + stringr::str_remove(cmd[1L], " .*") +} diff --git a/tests/testthat/test-check_posit_version.R b/tests/testthat/test-check_posit_version.R new file mode 100644 index 0000000..552a600 --- /dev/null +++ b/tests/testthat/test-check_posit_version.R @@ -0,0 +1,16 @@ +test_that("check_posit_version() works without rstudio-server on the PATH", { + testthat::local_mocked_bindings(isAvailable = function(...) FALSE, .package = "rstudioapi") + testthat::local_mocked_bindings(rstudio_server_version = function() NA_character_) + expect_message(version <- check_posit_version(), "Couldn't find") # nolint + expect_identical(version, NA_character_) +}) + +test_that("rstudio_server_version() looks beyond the PATH", { + expect_message(version <- rstudio_server_version(paths = ""), "rstudio-server") # nolint + expect_identical(version, NA_character_) + + fake = withr::local_tempfile() + writeLines(c("#!/bin/sh", "echo '2026.09.1+401.pro2 Workbench (Pumpkin Spice)'"), fake) + Sys.chmod(fake, "755") + expect_identical(rstudio_server_version(paths = c("", fake)), "2026.09.1+401.pro2") +})