Hi Brendan,

I'd like to tag Ricardo and to this and ask: Since you are taking a break, can you reflect back at your process for updating R, look at your shell history, and ask what knowledge you have that someone else trying to update R themselves would have to need to know to learnt how to do it from scratch, and then document it all, if it
isn't already?

I used to update all of CRAN and Bioconductor with "./pre-inst-env guix refresh -t {cran,bioconductor} -u", fix the updated package definitions (e.g. to restore undeclared inputs for replacing minified JavaScript), check that all of them build, and then push them to the "r-team" branch.

I depend on the output of "git diff" (from within Emacs Magit) to identify obvious problems introduced by the updater, such as removed JavaScript inputs or extremely long additions of native inputs. The former is a result of poor upstream practices: JavaScript inputs are generally not declared in the packages' DESCRIPTION files and are often treated as an opaque minified blob. The latter is due to overly simplistic heuristics in the updater/importer, but they are easy to correct. Some package updates lead to dependency cycles, often just because of overly zealous additions to the native inputs. I update the properties to instruct the updater to skip those problematic inputs in the future.

Once there are no more dependency cycles I check if there are missing inputs anywhere by running "make". I then add those packages first, or try to do without them if they are troublesome. When there are no missing inputs and no cycles I either build everything locally and eventually push my updates to the r-team branch. I then observe failures in the r-team jobset on ci.guix.gnu.org, and fix those. Finally, I rebase the whole set of changes, rebuild again, then merge.

For updates to R itself (= r-minimal and r-with-tests) I build the hidden r-with-tests once and r-minimal with "--rounds=3 -K" to see if there are reproducibility problems. A single character difference in a generated package description is not uncommon, but I haven't found a way to fix it. When this works I push to r-team and let the build farm build out all R packages.

In any case: at the start of my work I record a request to merge the r-team branch. I usually finish the work well before it would be the R team's turn to merge the branch. There is often at least a month between opening the request and being allowed to merge, sometimes even up to three months pass.

I don't know if this is worth adding as a cookbook chapter, because unlike the rust team's process it's pretty mundane. But I wouldn't object to appending it to the cookbook if someone considers it valuable information.

--
Ricardo

Reply via email to