feat(rebuild): allow rebuilding for an explicit R minor #182

Closed
pat-s wants to merge 1 commit from feat/rebuild-r-version into main
Owner

Motivation

weekly-rebuild-missing pins R_VERSION per matrix row — 30 rows at 4.4.3, 24 at 4.5.3, none at 4.6.0. The weekly cron therefore only ever rebuilds each slot's primary minor.

Non-primary minors are filled in incidentally: process-cran-updates loops the installed interpreters, but only for packages that are new or updated. Older packages accumulate a backlog in those minors and nothing ever works it off.

That is the root cause of the live SETLENGTH crash. rlang is built for 4.4 and 4.5 on amd64/resolute but never for 4.6, so an R 4.6.1 client is served the generic 4.5.3 binary. 2709 records across the 16 slots are in that state, concentrated on non-primary minors of the R 4.5-built distros.

rpkgs/bincraft#116 stops those from being served. This is what fills them in.

Change

Adds a rebuild_r_version variable selecting the interpreter the rebuild runs under. rebuild-missing.R derives its target slot from the R it runs under, so that is the entire mechanism.

crow pipeline create devxy/build-cran-binaries \
  --var weekly_rebuild_missing=ubuntu-2604-amd64 --var rebuild_r_version=4.6.0

matrix (the default) keeps today's behaviour exactly. An R minor absent from the image fails the step with the available list, rather than silently rebuilding the wrong slot.

Resolving RV in one command and using it in later ones follows the existing pattern in this step, which already sets XVFB= that way.

Verification

crow lint .crow/weekly-rebuild-missing.yaml passes.

## Motivation `weekly-rebuild-missing` pins `R_VERSION` per matrix row — 30 rows at 4.4.3, 24 at 4.5.3, **none at 4.6.0**. The weekly cron therefore only ever rebuilds each slot's primary minor. Non-primary minors are filled in incidentally: `process-cran-updates` loops the installed interpreters, but only for packages that are new or updated. Older packages accumulate a backlog in those minors and nothing ever works it off. That is the root cause of the live `SETLENGTH` crash. `rlang` is built for 4.4 and 4.5 on `amd64/resolute` but never for 4.6, so an R 4.6.1 client is served the generic 4.5.3 binary. 2709 records across the 16 slots are in that state, concentrated on non-primary minors of the R 4.5-built distros. rpkgs/bincraft#116 stops those from being *served*. This is what fills them in. ## Change Adds a `rebuild_r_version` variable selecting the interpreter the rebuild runs under. `rebuild-missing.R` derives its target slot from the R it runs under, so that is the entire mechanism. ```sh crow pipeline create devxy/build-cran-binaries \ --var weekly_rebuild_missing=ubuntu-2604-amd64 --var rebuild_r_version=4.6.0 ``` `matrix` (the default) keeps today's behaviour exactly. An R minor absent from the image fails the step with the available list, rather than silently rebuilding the wrong slot. Resolving `RV` in one command and using it in later ones follows the existing pattern in this step, which already sets `XVFB=` that way. ## Verification `crow lint .crow/weekly-rebuild-missing.yaml` passes.
feat(rebuild): allow rebuilding for an explicit R minor
All checks were successful
ci/crow/manual/weekly-rebuild-missing/50 Pipeline was successful
ci/crow/manual/weekly-rebuild-missing/49 Pipeline was successful
ci/crow/manual/weekly-rebuild-missing/51 Pipeline was successful
ci/crow/manual/weekly-rebuild-reindex/17 Pipeline was successful
f9cbf5cf9c
The matrix pins each slot's primary R minor, and the weekly cron only
ever builds that one. Non-primary minors are filled in incidentally, by
process-cran-updates looping the installed interpreters for new and
updated packages, so older packages accumulate a backlog there.

That is why rlang exists for 4.4 and 4.5 on amd64/resolute but not 4.6,
and why an R 4.6.1 client got a 4.5.3 binary and 'undefined symbol:
SETLENGTH'. 2709 records across the 16 slots are in that state.

rebuild_r_version selects the interpreter; rebuild-missing.R derives its
target slot from the R it runs under, so that is the whole mechanism.
'matrix' keeps today's behaviour. An R minor absent from the image fails
the step with the available list rather than silently rebuilding the
wrong slot.
pat-s closed this pull request 2026-08-31 12:28:21 +00:00
All checks were successful
ci/crow/manual/weekly-rebuild-missing/50 Pipeline was successful
ci/crow/manual/weekly-rebuild-missing/49 Pipeline was successful
ci/crow/manual/weekly-rebuild-missing/51 Pipeline was successful
ci/crow/manual/weekly-rebuild-reindex/17 Pipeline was successful

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
devxy/build-cran-binaries!182
No description provided.