Code Monkey home page Code Monkey logo

pkgcache's Introduction

pkgcache

Cache CRAN-like metadata and package files

lifecycle CRAN status R-CMD-check Codecov test coverage

Metadata and package cache for CRAN-like repositories. This is a utility package to be used by package management tools that want to take advantage of caching.

Installation

You can install the released version of pkgcache from CRAN with:

install.packages("pkgcache")

Metadata cache

meta_cache_list() lists all packages in the metadata cache. It includes Bioconductor package, and all versions (i.e. both binary and source) of the packages for the current platform and R version.

(We load the pillar package, because it makes the pkgcache data frames print nicer, similarly to tibbles.)

library(pkgcache)
library(pillar)
meta_cache_list()
#> # A data frame: 42,012 x 32
#>    package     version depends suggests license imports linkingto archs enhances
#>    <chr>       <chr>   <chr>   <chr>    <chr>   <chr>   <chr>     <chr> <chr>   
#>  1 A3          1.0.0   R (>= ~ randomF~ GPL (>~ <NA>    <NA>      <NA>  <NA>    
#>  2 AATtools    0.0.1   R (>= ~ <NA>     GPL-3   magrit~ <NA>      <NA>  <NA>    
#>  3 ABACUS      1.0.0   R (>= ~ rmarkdo~ GPL-3   ggplot~ <NA>      <NA>  <NA>    
#>  4 ABC.RAP     0.9.0   R (>= ~ knitr, ~ GPL-3   graphi~ <NA>      <NA>  <NA>    
#>  5 ABCanalysis 1.2.1   R (>= ~ <NA>     GPL-3   plotrix <NA>      <NA>  <NA>    
#>  6 ABCoptim    0.15.0  <NA>    testtha~ MIT + ~ Rcpp, ~ Rcpp      ABCo~ <NA>    
#>  7 ABCp2       1.2     MASS    <NA>     GPL-2   <NA>    <NA>      <NA>  <NA>    
#>  8 ABHgenotyp~ 1.0.1   <NA>    knitr, ~ GPL-3   ggplot~ <NA>      <NA>  <NA>    
#>  9 ABPS        0.3     <NA>    testthat GPL (>~ kernlab <NA>      <NA>  <NA>    
#> 10 ACA         1.1     R (>= ~ <NA>     GPL     graphi~ <NA>      <NA>  <NA>    
#> # ... with 42,002 more rows, and 23 more variables: os_type <chr>,
#> #   priority <chr>, license_is_foss <chr>, license_restricts_use <chr>,
#> #   repodir <chr>, rversion <chr>, platform <chr>, needscompilation <chr>,
#> #   ref <chr>, type <chr>, direct <lgl>, status <chr>, target <chr>,
#> #   mirror <chr>, sources <list>, filesize <dbl>, sha256 <chr>, sysreqs <chr>,
#> #   built <chr>, published <dttm>, deps <list>, md5sum <chr>, path <chr>

meta_cache_deps() and meta_cache_revdeps() can be used to look up dependencies and reverse dependencies.

The metadata is updated automatically if it is older than seven days, and it can also be updated manually with meta_cache_update().

See the cranlike_metadata_cache R6 class for a lower level API, and more control.

Package cache

Package management tools may use the pkg_cache_* functions and in particular the package_cache class, to make use of local caching of package files.

The pkg_cache_* API is high level, and uses a user level cache:

pkg_cache_summary()
#> $cachepath
#> [1] "/Users/gaborcsardi/Library/Caches/org.R-project.R/R/pkgcache/pkg"
#> 
#> $files
#> [1] 413
#> 
#> $size
#> [1] 3493123806
pkg_cache_list()
#> # A data frame: 413 x 11
#>    fullpath    path  package url   etag  sha256 version platform built vignettes
#>    <chr>       <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>    <chr> <chr>    
#>  1 /Users/gab~ src/~ pak     file~  <NA> 4e451~ 0.2.0.~ source   <NA>  <NA>     
#>  2 /Users/gab~ src/~ pak     <NA>   <NA> <NA>   0.2.0.~ aarch64~ TRUE  FALSE    
#>  3 /Users/gab~ bin/~ cli     http~ "\"1~ cbf6f~ 3.1.1   aarch64~ <NA>  <NA>     
#>  4 /Users/gab~ src/~ R7      <NA>   <NA> 76af5~ <NA>    <NA>     FALSE <NA>     
#>  5 /Users/gab~ src/~ Annota~ http~ "\"4~ 9c18b~ 1.18.0  source   <NA>  <NA>     
#>  6 /Users/gab~ bin/~ GGally  http~ "\"1~ a8ab8~ 2.1.2   aarch64~ <NA>  <NA>     
#>  7 /Users/gab~ src/~ ensemb~ http~ "\"3~ 0913f~ 2.18.3  source   <NA>  <NA>     
#>  8 /Users/gab~ src/~ bioviz~ http~ "\"2~ 5faa6~ 1.42.0  source   <NA>  <NA>     
#>  9 /Users/gab~ src/~ Annota~ http~ "\"4~ 283e2~ 1.56.2  source   <NA>  <NA>     
#> 10 /Users/gab~ src/~ rtrack~ http~ "\"3~ 0c5e4~ 1.54.0  source   <NA>  <NA>     
#> # ... with 403 more rows, and 1 more variable: rversion <chr>
pkg_cache_find(package = "dplyr")
#> # A data frame: 3 x 11
#>   fullpath     path  package url   etag  sha256 version platform built vignettes
#>   <chr>        <chr> <chr>   <chr> <chr> <chr>  <chr>   <chr>    <chr> <chr>    
#> 1 /Users/gabo~ src/~ dplyr   http~ "\"d~ 3b6aa~ 1.0.8   source   <NA>  <NA>     
#> 2 /Users/gabo~ bin/~ dplyr   http~ "\"6~ e46b3~ 1.0.7   aarch64~ <NA>  <NA>     
#> 3 /Users/gabo~ bin/~ dplyr   http~ "\"1~ 94913~ 1.0.8   aarch64~ <NA>  <NA>     
#> # ... with 1 more variable: rversion <chr>

pkg_cache_add_file() can be used to add a file, pkg_cache_delete_files() to remove files, pkg_cache_get_files() to copy files out of the cache.

The package_cache class provides a finer API.

Installed packages

pkgcache contains a very fast DCF parser to parse PACKAGES* files, or the DESCRIPTION files in installed packages. parse_packages() parses all fields from PACKAGES, PACKAGES.gz or PACKAGES.rds files. parse_installed() reads all metadata from packages installed into a library:

parse_installed()
#> # A data frame: 329 × 97
#>    Package    Version Title Author Maintainer Depends Imports LinkingTo Suggests
#>    <chr>      <chr>   <chr> <chr>  <chr>      <chr>   <chr>   <chr>     <chr>   
#>  1 ade4       1.7-22  "Ana… "Stép… Aurélie S… R (>= … "graph… Rcpp, Rc… "ade4Tk…
#>  2 archive    1.1.5   "Mul… "Jim … Gábor Csá… R (>= … "cli, … cli, cpp… "covr, …
#>  3 asciicast  2.3.0.… "Cre… "Gábo… Gábor Csá… <NA>    "cli (… processx  "callr,…
#>  4 AsioHeade… 1.22.1… "'As… "Dirk… Dirk Edde… <NA>     <NA>   <NA>       <NA>   
#>  5 askpass    1.1     "Saf… "Jero… Jeroen Oo… <NA>    "sys (… <NA>      "testth…
#>  6 assertthat 0.2.1   "Eas… "Hadl… Hadley Wi… <NA>    "tools" <NA>      "testth…
#>  7 async      0.0.0.… "Asy… "Gábo… Gábor Csá… R (>= … "callr… <NA>      "cli, c…
#>  8 attempt    0.3.1   "Too… "Coli… Colin Fay… <NA>    "rlang" <NA>      "testth…
#>  9 babynames  1.0.1   "US … "Hadl… Hadley Wi… R (>= … "tibbl… <NA>      "testth…
#> 10 backports  1.4.1   "Rei… "Mich… Michel La… R (>= …  <NA>   <NA>       <NA>   
#> # ℹ 319 more rows
#> # ℹ 88 more variables: Description <chr>, License <chr>, URL <chr>,
#> #   BugReports <chr>, Encoding <chr>, NeedsCompilation <chr>, Packaged <chr>,
#> #   Repository <chr>, `Date/Publication` <chr>, Built <chr>, Archs <chr>,
#> #   RemoteType <chr>, RemotePkgRef <chr>, RemoteRef <chr>, RemoteRepos <chr>,
#> #   RemotePkgPlatform <chr>, RemoteSha <chr>, `Authors@R` <chr>,
#> #   ByteCompile <chr>, RoxygenNote <chr>, SystemRequirements <chr>, …

Bioconductor support

Both the metadata cache and the package cache support Bioconductor by default, automatically. See the BioC_mirror option and the R_BIOC_MIRROR and R_BIOC_VERSION environment variables below to configure Bioconductor support.

Package Options

  • The BioC_mirror option can be used to select a Bioconductor mirror. This takes priority over the R_BIOC_MIRROR environment variable.
  • You can use the pkg.current_platform option to set the platform string for the current platform for the current_r_platform() function. This is useful if pkgcache didn’t detect the platform correctly. Alternatively, you can use the PKG_CURRENT_PLATFORM environment variable. The option takes priority.
  • pkgcache_timeout is the HTTP timeout for all downloads. It is in seconds, and the limit for downloading the whole file. Defaults to 3600, one hour. It corresponds to the TIMEOUT libcurl option.
  • pkgcache_connecttimeout is the HTTP timeout for the connection phase. It is in seconds and defaults to 30 seconds. It corresponds to the CONNECTTIMEOUT libcurl option.
  • pkgcache_low_speed_limit and pkgcache_low_speed_time are used for a more sensible HTTP timeout. If the download speed is less than pkgcache_low_speed_limit bytes per second for at least pkgcache_low_speed_time seconds, the download errors. They correspond to the LOW_SPEED_LIMIT and LOW_SPEED_TIME curl options.

Package environment variables

  • The R_BIOC_VERSION environment variable can be used to override the default Bioconductor version detection and force a given version. E.g. this can be used to force the development version of Bioconductor.
  • The R_BIOC_MIRROR environment variable can be used to select a Bioconductor mirror. The BioC_mirror option takes priority over this, if set.
  • You can use the PKG_CURRENT_PLATFORM environment variable to set the platform string for the current platform for the current_r_platform() function. This is useful if pkgcache didn’t detect the platform correctly. Alternatively, you can use the pkg.current_platofrm option, which takes. priority over the environment variable.
  • PKGCACHE_PPM_REPO is the name of the Posit Package Manager repository to use. Defaults to "cran".
  • PKGCACHE_PPM_URL is the base URL of the Posit Package Manager instance to use. It defaults to the URL of the Posit Public Package Manager instance at https://packagemanager.posit.co/client/#/.
  • PKGCACHE_TIMEOUT is the HTTP timeout for all downloads. It is in seconds, and the limit for downloading the whole file. Defaults to 3600, one hour. It corresponds to the TIMEOUT libcurl option. The pkgcache_timeout option has priority over this, if set.
  • PKGCACHE_CONNECTTIMEOUT is the HTTP timeout for the connection phase. It is in seconds and defaults to 30 seconds. It corresponds to the CONNECTTIMEOUT libcurl option. The pkgcache_connecttimeout option takes precedence over this, if set.
  • PKGCACHE_LOW_SPEED_LIMIT and PKGCACHE_LOW_SPEED_TIME are used for a more sensible HTTP timeout. If the download speed is less than PKGCACHE_LOW_SPEED_LIMIT bytes per second for at least PKGCACHE_LOW_SPEED_TIME seconds, the download errors. They correspond to the LOW_SPEED_LIMIT and LOW_SPEED_TIME curl options. The pkgcache_low_speed_time and pkgcache_low_speed_limit options have priority over these environment variables, if they are set.
  • R_PKG_CACHE_DIR is used for the cache directory, if set. (Otherwise rappdirs::user_cache_dir() is used, see also meta_cache_summary() and pkg_cache_summary()).

Using pkgcache in CRAN packages

If you use pkgcache in your CRAN package, please make sure that

  • you don’t use pkgcache in your examples, and
  • you set the R_USER_CACHE_DIR environment variable to a temporary directory (e.g. via tempfile()) during test cases. See the tests/testthat/setup.R file in pkgcache for an example.

This is to make sure that pkgcache does not modify the user’s files while running R CMD check.

Code of Conduct

Please note that the pkgcache project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.

License

MIT (c) Posit Software, PBC

pkgcache's People

Contributors

bahadzie avatar batpigandme avatar gaborcsardi avatar jimhester avatar qulogic avatar salim-b avatar timmsm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

pkgcache's Issues

Metadata cache error when multiple repos are in getOption("repos") ?

options("repos" = c(
  CRAN = "https://cran.rstudio.com", 
  CRANextra = "https://cloud.r-project.org"))
dir.create(pri <- fs::path_norm(tempfile()))
dir.create(rep <- fs::path_norm(tempfile()))
cmc <- cranlike_metadata_cache$new(pri, rep, "source", bioc = FALSE,
                                     cran_mirror = "mirror")
deps <- cmc$deps("abc", FALSE, FALSE)
Error in pairlist(cmc$deps("abc", FALSE, FALSE), synchronise(self$async_deps(packages,  :
  Could not load or update metadata cache

Tools to prune cache

I don't think we need it in this version, but I think the next version should have some way to automatically prune the cache to keep it below a user specified threshold with default (maybe controlled via an environment variable, and set to say 5 Gb by default?)

Move `master` branch to `main`

The master branch of this repository will soon be renamed to main, as part of a coordinated change across several GitHub organizations (including, but not limited to: tidyverse, r-lib, tidymodels, and sol-eng). We anticipate this will happen by the end of September 2021.

That will be preceded by a release of the usethis package, which will gain some functionality around detecting and adapting to a renamed default branch. There will also be a blog post at the time of this master --> main change.

The purpose of this issue is to:

  • Help us firm up the list of targetted repositories
  • Make sure all maintainers are aware of what's coming
  • Give us an issue to close when the job is done
  • Give us a place to put advice for collaborators re: how to adapt

message id: euphoric_snowdog

Fix test

Test randomly fails:
https://www.r-project.org/nosvn/R.check/r-devel-windows-ix86+x86_64-gcc8/pkgcache-00check.html

checking tests ... [33s] ERROR
  Running 'test-async.R' [25s]
  Running 'testthat.R' [7s]
Running the tests in 'tests/test-async.R' failed.
Complete output:
  >
  > if (file.exists("async")) {
  + library(testthat)
  + library(pkgcache)
  + test <- function() {
  + package <- "pkgcache"
  + env_test <- asNamespace("testthat")$env_test
  + env_test$in_test <- TRUE
  + env_test$package <- package
  + on.exit({
  + env_test$in_test <- FALSE
  + env_test$package <- NULL
  + })
  + test_path <- "async"
  + asNamespace("testthat")$test_package_dir(
  + package = package, test_path = test_path,
  + filter = NULL, reporter = "check")
  + }
  + test()
  + }
  -- 1. Failure: when_any, multiple errors (@test-when-any.R#73) ----------------
  conditionMessage\(errors\[\[1\]\]\) does not match "bar".
  Actual value: "foo"
  
  -- 2. Failure: when_any, multiple errors (@test-when-any.R#74) ----------------
  conditionMessage\(errors\[\[2\]\]\) does not match "foo".
  Actual value: "bar"
  
  == testthat results ===========================================================
  [ OK: 661 | SKIPPED: 31 | WARNINGS: 0 | FAILED: 2 ]
  1. Failure: when_any, multiple errors (@test-when-any.R#73)
  2. Failure: when_any, multiple errors (@test-when-any.R#74)
  

Better UI messages

E.g. "Loading session cached metadata" is not really meaningful for the user...

Allow turning off HTTP/2 in async

Needed to work around the macOS libcurl HTTP/2 issue.

And it seems that extra options are not currently passed to curl, so that part is a bug.

Please add R_PKG_CACHE_DIR to the README

Knowing this up front could be very useful.
This (via pak) is going to be great! Thank you!
RStudio Package Manager on the local network (WSL and Cocker particularly) is going to be even better than apt-cacher-ng and c2d4u!

Warnings if meta cache was just created

Warning messages:
1: In normalizePath(dn) :
  path[1]="/Users/gaborcsardi/Library/Caches/R-pkg": No such file or directory
2: In normalizePath(dn) :
  path[1]="/Users/gaborcsardi/Library/Caches/R-pkg": No such file or directory

Next cran release?

Hi,

Looking to take advantage of the repo_resolve function from inside a docker container but devtools_install_github times out. AFAIK that is a known issue, but I'd prefer to use a releases version of this package anyways - is there a release schedule for this package so that I know when it will be available?

Cheers.

Andy P.

Release first version to CRAN

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()
  • Bump version (in DESCRIPTION and NEWS)
  • devtools::check_win_devel() (again!)
  • devtools::submit_cran()
  • pkgdown::build_site()
  • Approve email
  • Tag release
  • Bump dev version
  • Write blog post
  • Tweet

Release pkgcache 1.1.0

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Release version 1.2.0

Prepare for release:

  • devtools::check_win_devel() No reply.
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Release pkgcache 1.2.2

Prepare for release:

Submit to CRAN:

  • usethis::use_version('patch')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()

Metadata cache fails on R 3.2.x and macOS

> pkgcache::meta_cache_list()
✖ Metadata update failed
Error in stop(http_error(resp)) :
Not Found (HTTP 404).

Could not load or update metadata cache. If you think your local cache
is broken, try deleting it with `meta_cache_cleanup()`, or the
`$cleanup()` method.

Because the binaries are in a different directory, probably?

Release pkgcache 1.1.1

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Failure with R 4.0

library(pkgdepends)
pd <- new_pkg_deps("r-lib/cli")
pd$solve()
✖ Metadata update failed
Error in stop(http_error(resp)) : Not Found (HTTP 404).
Backtrace:
  1. pd$solve()
  2. private$plan$solve(policy = "lazy")
  3. pkgdepends:::pkgplan_solve(self, private, match.arg(policy))
  4. self$resolve()
  5. pkgdepends:::pkgplan_resolve(self, private)
  8. self$async_resolve()
  9. pkgdepends:::pkgplan_async_resolve(self, private)
 10. private$cache$metadata$check_update()
 11. pkgcache:::synchronise(self$async_check_update())

The same code works with R 3.6, I assume it is due to some change in 4.0

Caching multiple versions of a package

At this rate, we're going to have start calling it the Gaborverse 😉

This is related to how I'm transitioning checkpoint to use pkgdepends. I've just discovered that pkgcache appears to store only the latest version of a package that it's seen. While this is fine for most purposes, it's undesirable for checkpointing purposes: even if the cache contains version 2 of a package, I might still want to download/install version 1.

The idea is to allow reproducibility: if a project uses version 1 of a package, then it should always use that version even if updates are published later. That's why MRAN and checkpoint exist, to allow you to go back and install older versions as needed.

Is it possible to store multiple versions of a package in the cache? Related: in pkgdepends, is it possible to have a policy that says we want a specific package version, regardless of whether it's cached?

Release pkgcache 1.3.0

Prepare for release:

  • Check current CRAN check results
  • Polish NEWS
  • devtools::build_readme()
  • urlchecker::url_check()
  • devtools::check(remote = TRUE, manual = TRUE)
  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • rhub::check(platform = 'ubuntu-rchk')
  • rhub::check_with_sanitizers() (included in check_for_cran())
  • revdepcheck::revdep_check(num_workers = 4)
  • Update cran-comments.md
  • Draft blog post
  • Ping Tracy Teal on Slack

Submit to CRAN:

  • usethis::use_version('minor')
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Accepted 🎉
  • usethis::use_github_release()
  • usethis::use_dev_version()
  • Finish blog post
  • Tweet
  • Add link to blog post in pkgdown news menu

Metadata cache fails on R 4.0.0 (R-devel currently)

Because there are no binaries available:

> meta_cache_list()
✖ Metadata update failed
⠹ Updating metadata [0/12] | Downloading [6.97 kB / 181.02 kB]Error in stop(http_error(resp)) :
Not Found (HTTP 404).

Could not load or update metadata cache. If you think your local cache
is broken, try deleting it with `meta_cache_cleanup()`, or the
`$cleanup()` method.

It is trying to download https://cloud.r-project.org/bin/macosx/el-capitan/contrib/4.0/PACKAGES.gz which is 404.

Release 1.0.4

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Release 1.0.2

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::check_win_devel() (again!)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • pkgdown::build_site()
  • Bump dev version
  • Write blog post
  • Tweet
  • Add link to blog post in pkgdown news menu

Template from r-lib/usethis#338

Release pkgcache 1.0.6

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Release 1.0.3

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::check_win_devel() (again!)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • pkgdown::build_site()
  • Bump dev version
  • Write blog post
  • Tweet
  • Add link to blog post in pkgdown news menu

Template from r-lib/usethis#338

Unable to update metadata cache when using enterprise CRAN mirror

Artifactory's enterprise CRAN mirror currently has a bug where the mirror has a PACKAGES file but not PACKAGES.gz. Would it be possible to add a HEAD request to cmc__get_cache_files to check if PACKAGES.gz exists in the specified CRAN repo and, if not, fall back to PACKAGES (which should exist in every CRAN repo)?

This affects both pkgcache::meta_cache_list() and pkgcache::cranlike_metadata_cache$new()$list().

Release 1.0.5

Prepare for release:

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()

Perform release:

  • Bump version (in DESCRIPTION and NEWS)
  • devtools::submit_cran()
  • Approve email

Wait for CRAN...

  • Tag release
  • Bump dev version

Template from r-lib/usethis#338

Release 1.0.1 to CRAN

After #2, another try

  • devtools::check_win_devel()
  • rhub::check_for_cran()
  • revdepcheck::revdep_check(num_workers = 4)
  • Polish NEWS
  • If new failures, update email.yml then revdepcheck::revdep_email_maintainers()
  • Bump version (in DESCRIPTION and NEWS)
  • devtools::check_win_devel() (again!)
  • devtools::submit_cran()
  • pkgdown::build_site()
  • Approve email
  • Tag release
  • Bump dev version
  • Write blog post
  • Tweet

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.