Title: | Automated Reverse Dependency Checking |
---|---|
Description: | Automated, isolated reserve dependency checking, with automatic comparison of the results to the current CRAN checks. |
Authors: | Gábor Csárdi [cre, aut, cph], Hadley Wickham [aut], RConsortium [cph], RStudio [cph, fnd] |
Maintainer: | Gábor Csárdi <[email protected]> |
License: | MIT + file LICENSE |
Version: | 1.0.0.9002 |
Built: | 2025-02-17 12:41:48 UTC |
Source: | https://github.com/r-lib/revdepcheck |
Broken packages are those whose checks got worse with the dev version. Failed packages are those whose cloud jobs failed, either because the spot instance was shut down by AWS or because the checks used too much memory and were killed.
cloud_broken( job_name = cloud_job(pkg = pkg), pkg = ".", install_failures = FALSE, timeout_failures = FALSE ) cloud_failed(job_name = cloud_job(pkg = pkg), pkg = ".")
cloud_broken( job_name = cloud_job(pkg = pkg), pkg = ".", install_failures = FALSE, timeout_failures = FALSE ) cloud_failed(job_name = cloud_job(pkg = pkg), pkg = ".")
job_name |
The job name, as returned by |
pkg |
Path to package. |
install_failures |
Whether to include packages that failed to install. |
timeout_failures |
Whether to include packages that timed out. |
A character vector with the names of broken packages, to be passed to cloud_check()
.
Other cloud:
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
This is useful for closer inspection of individual jobs while they are running or after the fact.
cloud_browse(job_name = cloud_job(), package = NULL)
cloud_browse(job_name = cloud_job(), package = NULL)
job_name |
The job name, as returned by |
package |
If |
Other cloud:
cloud_broken()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
Cancel a running cloud run
cloud_cancel(job_name = cloud_job())
cloud_cancel(job_name = cloud_job())
job_name |
The job name, as returned by |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
Submit a reverse dependency checking job to the cloud
cloud_check( pkg = ".", tarball = NULL, revdep_packages = NULL, extra_revdeps = NULL, r_version = "4.4.0", check_args = "--no-manual", bioc = FALSE )
cloud_check( pkg = ".", tarball = NULL, revdep_packages = NULL, extra_revdeps = NULL, r_version = "4.4.0", check_args = "--no-manual", bioc = FALSE )
pkg |
Path to package. |
tarball |
A pre-built package tarball, if |
revdep_packages |
A character vector of packages to check, if |
extra_revdeps |
Additional packages to use as source for reverse dependencies. |
r_version |
The R version to use. |
check_args |
Additional argument to pass to |
bioc |
Also check revdeps that live in Bioconductor? Default |
The AWS Batch job name
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
Display detailed revdep results from a cloud run
cloud_details(job_name = cloud_job(pkg = pkg), revdep, pkg = ".")
cloud_details(job_name = cloud_job(pkg = pkg), revdep, pkg = ".")
job_name |
The job name, as returned by |
revdep |
Name of the revdep package |
pkg |
Path to package. |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
This function uses gmail to automatically notify all maintainers of revdeps
that have failures with the new version of the package. The form of the
email is fixed, but it uses template parameters so that you can control
the details: set the variables in revdeps/email.yaml
. You'll be prompted to
review the template before any emails are sent; or you can use
revdep_email_draft()
to see a draft version.
cloud_email( type = c("broken", "failed"), job_name = cloud_job(pkg = pkg), pkg = ".", packages = NULL, draft = FALSE )
cloud_email( type = c("broken", "failed"), job_name = cloud_job(pkg = pkg), pkg = ".", packages = NULL, draft = FALSE )
type |
Type of problems to notify about; either "broken" (i.e. there
is a new |
job_name |
The job name, as returned by |
pkg |
Path to package. |
packages |
A character vector of package names. Use this if some emails failed to send in the previous round. If omitted uses all packages. |
draft |
If |
To use this function, you'll need to give the gmailr app authority to
send emails from gmail. To revoke that authority, delete the .httr-oauth
file created in your working directory.
The job_name
is automatically set by cloud_check()
and is remembered for
the duration of the current R session. If there is no active job_name
, but
there are local cloud check results, job_name
is inferred from the most
recently modified cloud check results.
cloud_job(job_name = NULL, pkg = ".")
cloud_job(job_name = NULL, pkg = ".")
job_name |
If not |
pkg |
Path to package. |
Get a tibble of batch sub-job ids for all checked packages
cloud_job_mapping(job_name = cloud_job())
cloud_job_mapping(job_name = cloud_job())
job_name |
The job name, as returned by |
Plot the running time per package of a cloud job
cloud_plot(job_name = cloud_job())
cloud_plot(job_name = cloud_job())
job_name |
The job name, as returned by |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_report()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
You can use these functions to get intermediate reports of a running cloud check.
cloud_report( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", all = FALSE, results = NULL, failures = TRUE ) cloud_report_summary( job_name = cloud_job(pkg = pkg), file = "", all = FALSE, pkg = ".", results = NULL ) cloud_report_problems( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", all = FALSE, results = NULL ) cloud_report_failures( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", results = NULL ) cloud_report_cran(job_name = cloud_job(pkg = pkg), pkg = ".", results = NULL)
cloud_report( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", all = FALSE, results = NULL, failures = TRUE ) cloud_report_summary( job_name = cloud_job(pkg = pkg), file = "", all = FALSE, pkg = ".", results = NULL ) cloud_report_problems( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", all = FALSE, results = NULL ) cloud_report_failures( job_name = cloud_job(pkg = pkg), pkg = ".", file = "", results = NULL ) cloud_report_cran(job_name = cloud_job(pkg = pkg), pkg = ".", results = NULL)
job_name |
The job name, as returned by |
pkg |
Path to package. |
file |
File to write output to. Default will write to console. |
all |
Whether to report all problems, including the ones that were already present in the old version of the package. This potentially generated a lot of output, most of which was irrelevant, so they are omitted by default, and only problems seen with the new version of the package are reported. |
results |
Results from |
failures |
Save failures to disk? |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_results()
,
cloud_status()
,
cloud_summary()
The format of the status bar is
[jobs_queued/jobs_running/jobs_succeeded/jobs_failed - total_jobs] time_elapsed | ETA: estimate_time_remaining
cloud_status(job_name = cloud_job(), update_interval = 10)
cloud_status(job_name = cloud_job(), update_interval = 10)
job_name |
The job name, as returned by |
update_interval |
The number of seconds between querying for updates |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_summary()
Displays nicely formatted results of processed packages run in the cloud.
cloud_summary(job_name = cloud_job(pkg = pkg), pkg = ".")
cloud_summary(job_name = cloud_job(pkg = pkg), pkg = ".")
job_name |
The job name, as returned by |
pkg |
Path to package. |
Other cloud:
cloud_broken()
,
cloud_browse()
,
cloud_cancel()
,
cloud_check()
,
cloud_details()
,
cloud_fetch_results()
,
cloud_plot()
,
cloud_report()
,
cloud_results()
,
cloud_status()
Retrieve the reverse dependencies for a package
cran_revdeps(package, dependencies = TRUE, bioc = FALSE, cran = TRUE)
cran_revdeps(package, dependencies = TRUE, bioc = FALSE, cran = TRUE)
package |
The package (or packages) to search for reverse dependencies. |
dependencies |
Which types of revdeps should be checked. For CRAN release, we recommend using the default. |
bioc |
Also check revdeps that live in Bioconductor? |
cran |
Should cran mirror be attached to getOpion("repos") if it is not already present. |
revdep_todo()
tells you which packages still need to be checked.
revdep_add()
adds a single package to the to-do list.
revdep_rm()
removes packages from the todo list.
revdep_add_broken()
re-adds all broken packages from the last check
(this is useful if you think you've fixed the underlying problem in
your package).
revdep_add(pkg = ".", packages) revdep_add_broken( pkg = ".", install_failures = FALSE, timeout_failures = FALSE ) revdep_add_new(pkg = ".") revdep_todo(pkg = ".") revdep_rm(pkg = ".", packages)
revdep_add(pkg = ".", packages) revdep_add_broken( pkg = ".", install_failures = FALSE, timeout_failures = FALSE ) revdep_add_new(pkg = ".") revdep_todo(pkg = ".") revdep_rm(pkg = ".", packages)
pkg |
Path to package. |
packages |
Character vector of package names to add |
install_failures |
Whether to re-add packages that failed to install. |
timeout_failures |
Whether to re-add packages that timed out. |
revdep_check()
runs R CMD check
on all reverse dependencies of your
package. To avoid false positives, it runs R CMD check
twice: once for
released version on CRAN and once for the local development version. It
then reports the differences so you can see what checks were previously
ok but now fail.
It requires to use a repos option that provides the source code of the packages not binaries.
Once your package has been successfully submitted to CRAN, you should
run revdep_reset()
. This deletes all files used for checking, freeing
up disk space and leaving you in a clean state for the next release.
revdep_check( pkg = ".", dependencies = c("Depends", "Imports", "Suggests", "LinkingTo"), quiet = TRUE, timeout = as.difftime(10, units = "mins"), num_workers = 1, bioc = TRUE, cran = TRUE, env = revdep_env_vars() ) revdep_reset(pkg = ".")
revdep_check( pkg = ".", dependencies = c("Depends", "Imports", "Suggests", "LinkingTo"), quiet = TRUE, timeout = as.difftime(10, units = "mins"), num_workers = 1, bioc = TRUE, cran = TRUE, env = revdep_env_vars() ) revdep_reset(pkg = ".")
pkg |
Path to package. |
dependencies |
Which types of revdeps should be checked. For CRAN release, we recommend using the default. |
quiet |
Suppress output from internal processes? |
timeout |
Maximum time to wait (in seconds) for |
num_workers |
Number of parallel workers to use |
bioc |
Also check revdeps that live in Bioconductor? |
cran |
Should cran mirror be attached to getOpion("repos") if it is not already present. |
env |
Environment variables to set for the install and check
processes. See |
revdep_check()
proceeds in four steps:
Init: create the revdep/
subdirectory if it doesn't already exist,
and save the list of reverse dependencies to check.
Install: install the CRAN (released) and local (development) versions of your package, including all dependencies.
Run: run R CMD check
twice for each reverse dependency, once
for the CRAN version and one for the local version. The checks are
run in parallel using num_worker
processes.
Report: generate reports showing differences between the check
results for the CRAN and local versions of your package. The focus of
the report is on new failures. The reports are saved in revdep/
.
revdep_check()
is designed to seamlessly resume in the case of failure:
just re-run revdep_check()
and it will start from where it left off.
If you want to start again from scratch, run revdep_reset()
.
To see more details of problems during a run, call
revdep_summary()
and revdep_details()
in another process.
Use this to see nicely formatted results of processed packages while
revdep_check()
is running in another process. revdep_summary()
displays summary results for all complete checks. revdep_details()
shows you the details for one
revdep_details(pkg = ".", revdep) revdep_summary(pkg = ".")
revdep_details(pkg = ".", revdep) revdep_summary(pkg = ".")
pkg |
Path to package |
revdep |
Name of revdep package. |
This function uses gmail to automatically notify all maintainers of revdeps
that have failures with the new version of the package. The form of the
email is fixed, but it uses template parameters so that you can control
the details: set the variables in revdeps/email.yaml
. You'll be prompted to
review the template before any emails are sent; or you can use
revdep_email_draft()
to see a draft version.
revdep_email( type = c("broken", "failed"), pkg = ".", packages = NULL, draft = FALSE ) revdep_email_draft(type = "broken", pkg = ".", data = email_data(pkg))
revdep_email( type = c("broken", "failed"), pkg = ".", packages = NULL, draft = FALSE ) revdep_email_draft(type = "broken", pkg = ".", data = email_data(pkg))
type |
Type of problems to notify about; either "broken" (i.e. there
is a new |
pkg |
Path to package. |
packages |
A character vector of package names. Use this if some emails failed to send in the previous round. If omitted uses all packages. |
draft |
If |
data |
Optionally, supply a named list to provide your own parameters to fill in the template |
To use this function, you'll need to give the gmailr app authority to
send emails from gmail. To revoke that authority, delete the .httr-oauth
file created in your working directory.
Environment variables to set for install and check processes while running the reverse dependency check
revdep_env_vars(force_suggests = FALSE)
revdep_env_vars(force_suggests = FALSE)
force_suggests |
Whether to force the installation of the suggested packages. |
Named character vector.
List maintainers of all reverse dependencies
revdep_maintainers(pkg = ".")
revdep_maintainers(pkg = ".")
pkg |
Path to package. |
You can use these functions to get intermediate reports of a revdep_check()
running in another session.
revdep_report_summary(pkg = ".", file = "", all = FALSE, results = NULL) revdep_report_problems( pkg = ".", file = "", all = FALSE, results = NULL, bioc = TRUE, cran = TRUE ) revdep_report_failures( pkg = ".", file = "", results = NULL, bioc = TRUE, cran = TRUE ) revdep_report_cran(pkg = ".", file = "", results = NULL) revdep_report(pkg = ".", all = FALSE, results = NULL, bioc = TRUE, cran = TRUE)
revdep_report_summary(pkg = ".", file = "", all = FALSE, results = NULL) revdep_report_problems( pkg = ".", file = "", all = FALSE, results = NULL, bioc = TRUE, cran = TRUE ) revdep_report_failures( pkg = ".", file = "", results = NULL, bioc = TRUE, cran = TRUE ) revdep_report_cran(pkg = ".", file = "", results = NULL) revdep_report(pkg = ".", all = FALSE, results = NULL, bioc = TRUE, cran = TRUE)
pkg |
Path to package. |
file |
File to write output to. Default will write to console. |
all |
Whether to report all problems, including the ones that were already present in the old version of the package. This potentially generated a lot of output, most of which was irrelevant, so they are omitted by default, and only problems seen with the new version of the package are reported. |
results |
Cached results from |
bioc |
Also check revdeps that live in Bioconductor? |
cran |
Should cran mirror be attached to getOpion("repos") if it is not already present. |
revdep_report_summary()
writes the contents of README.md
, by
default to the console. This is handy to quickly inspect the (current)
list of problematic packages.