Chapter 22. Releasing to CRAN
We’ve been calling out CRAN-specific concerns throughout the book, on our journey through the various parts of a package, such as tests and examples. In this chapter, we focus on the actual process of releasing a package to CRAN, for the first time or as an update.
The most concrete expression of our release process is the checklist produced by usethis::use_release_issue(), which opens a GitHub issue containing a list of to-do’s. This checklist is constantly evolving and is responsive to a few characteristics of the package, so don’t be shocked if you see something a bit different than what we show here. The main concerns are fairly timeless, and we’ll use this checklist to help structure this chapter.
But first: note that you will have deep regrets if you approach preparing your package for CRAN as a separate activity that you do after completing the planned development for a release. This advice is extremely relevant here:
If it hurts, do it more often.1
Martin Fowler
In the current context, interpret this to mean that you should be running R CMD check regularly, preferably on multiple platforms, and promptly addressing any issues that surface. Recall that our preferred way to do this is via devtools::check() (see “check() and R CMD check”).
Why would you want to do something that is painful more often? Because it leads to less pain overall. First, solving five problems is more than five times as hard as solving one. It’s demoralizing to be blocked ...