drat All The ?! : Enabling Easier Package Discovery and Installation with Your Own CRAN-like Repo for Your Packages
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
I’ve got a work-in-progress drat
-ified CRAN-like repo for (eventually) all my packages over at CINC
(“CINC is not CRAN” and it also sounds like “sync”). This is in parallel with a co-location/migration of all my packages to SourceHut (just waiting for the sr.ht alpha API to be baked) and a self-hosted public Gitea instance. Everything will still be on that legacy social coding site y’all use but the ultimate goal is to have all installs be possible via the CINC repository (i.e. install.packages()
) or via a remotes::install_git()
install from this standalone or any social coding site.
I’ll eventually publish the workflow but the idea is to customize a pkgdown
YAML file in each package repo so the navbar has links back to CINC and other pages (this will take some time as I seem to have made alot of little packages over the years) and then to add a package to the CINC repo:
- clone it from local Gitea
- build the source package
- install it
- build the
pkgdown
site and have that go toweb/packages
directory (so https://cinc.rud.is/web/packages/hrbrthemes/ vs https://cran.r-project.org/web/packages/hrbrthemes/) - use
drat
to add the package to the repository - auto-update a useful index/packages overview page/directory
The above processes helped shine a light on some bad README practices I’ve had and also about how to make it a bit easier (in the future) to install C[++]-backed packages. Speaking of READMEs, I also need to get all the README’s updated to use either install.packages()
from CINC or a remotes
install from Gitea.
Another couple of goals are to possibly get binary package versions added (though that’s going to be interesting orchestration exercise) and see if I can’t get some notary
concepts implemented.
It’s actually been a fun mini-project since the drat
part is a simple as drat::insertPackage('PKG', '/path/to/cinc')
(#ty Dirk!) — though I need to think through some logic around maintaining Archive versions and also deleting packages which drat
doesn’t do yet but is also as simple as removing tarballs and running tools::write_PACKAGES()
.
As an aside, I also drat
-ified all our $WORK packages and made that repo work-internally-accessible via static S3 web hosting. At $0.023 USD per GB (per-month) for just hosting the objects and $0.0004 USD per 1,000 GET
requests (plus minimal setup charges for SSL) it’s super cheap and also super-easy to maintain. Drop a note in the comments if you’re interested in more details of the S3 drat
setup.
FIN
After a few more weeks’ baking period for the self-hosed Gitea and CINC sites will have all non-error web-logging disabled and error logs won’t save IP addresses or referrers (I welcome anyone who wants to third-party audit the nginx
configs) since another goal is also to help folks not be a product for tech startups or giant, soulless, global multi-national companies with a history of being horrendously evil.
Be on the lookout for a full writeup with code in the coming weeks.
P.S.
For Safari-users on 10.14+ I’ve made some tweaks to the “batman mode” version of the site. If you do use Safari (but…why?!) and have any issues with readability in “dark mode” just drop a note in the comments and I’ll see what I can do.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.