refactor(ci): use multi-R-version images across workflows #70

Merged
pat-s merged 16 commits from t3code/eb891def into main 2026-05-26 08:51:27 +00:00
Owner

Summary

  • Switches all 64 .crow/*.yaml workflows, the Justfile, and the commented-out build-all-versions-install-deps.yaml template to the new multi-R-version container images.
  • Each image tag drops -${R_VERSION} (e.g. build-env-alpine:3.22-4.5build-env-alpine:3.22); workflows pick an R version by calling /opt/R/${R_VERSION}/bin/R explicitly.
  • Pattern-1 workflows (hard-coded image tag) gain a single R_VERSION: env var per file.
  • Pattern-2 workflows (build-all-versions-*, matrix-driven) continue to receive R_VERSION via crow pipeline create --var.

Platform → R_VERSION mapping

Platform Image R_VERSION
alpine 3.22 / 3.23 build-env-alpine:3.{22,23} 4.5.3
ubuntu jammy / noble build-env-ubuntu:{jammy,noble} 4.4.3
redhat 8 / 9 build-env-redhat:{8,9} 4.4.3
redhat 10 build-env-redhat:10 4.5.3

The alpine-321 audit-only workflows fall back to build-env-alpine:3.23 since no 3.21 image exists in the new scheme; the audits only query S3/CRAN, so the container OS does not affect correctness.

Bug fixes folded in

  1. All six weekly-audit-missing-alpine-*.yaml files were pinned to alpine:3.23-4.5 regardless of platform.
    Now each one points at its own alpine image.
  2. All fourteen update-package-index-*.yaml files were pinned to build-env-ubuntu:noble-4.4 (or noble-4.5 for redhat-10-amd64) regardless of platform.
    Now each one uses its own platform's image.
  3. process-updates-ubuntu-2404-{amd64,arm64}.yaml had R_VERSION of 4.4 (no patch) baked into the tag.
    Aligned to 4.4.3, matching the audit and rebuild counterparts.

Smoke targets (post-merge)

One workflow per shape, ready to dry-run:

  • process-updates-alpine-322-amd64.yaml
  • weekly-rebuild-missing-redhat-9-amd64.yaml
  • weekly-audit-missing-ubuntu-2204-amd64.yaml
  • update-package-index-redhat-10-amd64.yaml
  • archive-missed-packages.yaml
  • build-all-versions-amd64.yaml (with its install-deps predecessor)
  • build-r-minor-sensitive-packages.yaml

Follow-ups (out of scope, surfaced during review)

  • process-updates-redhat-10-{amd64,arm64}.yaml set codename = "rhel9" in their upload_package_index(...) calls.
    Pre-existing bug — should be "rhel10". The update-package-index-redhat-10-* counterparts already use "rhel10" correctly.
  • update-package-index-redhat-8-amd64.yaml is missing the packageVersion("bincraft") diagnostic line that every sibling file has.
    Pre-existing asymmetry between amd64 and arm64.

Spec & plan

  • Spec: docs/superpowers/specs/2026-05-25-multi-r-version-images-design.md
  • Plan: docs/superpowers/plans/2026-05-25-multi-r-version-images.md
## Summary - Switches all 64 `.crow/*.yaml` workflows, the `Justfile`, and the commented-out `build-all-versions-install-deps.yaml` template to the new multi-R-version container images. - Each image tag drops `-${R_VERSION}` (e.g. `build-env-alpine:3.22-4.5` → `build-env-alpine:3.22`); workflows pick an R version by calling `/opt/R/${R_VERSION}/bin/R` explicitly. - Pattern-1 workflows (hard-coded image tag) gain a single `R_VERSION:` env var per file. - Pattern-2 workflows (`build-all-versions-*`, matrix-driven) continue to receive `R_VERSION` via `crow pipeline create --var`. ## Platform → R_VERSION mapping | Platform | Image | R_VERSION | | --- | --- | --- | | alpine 3.22 / 3.23 | `build-env-alpine:3.{22,23}` | 4.5.3 | | ubuntu jammy / noble | `build-env-ubuntu:{jammy,noble}` | 4.4.3 | | redhat 8 / 9 | `build-env-redhat:{8,9}` | 4.4.3 | | redhat 10 | `build-env-redhat:10` | 4.5.3 | The `alpine-321` audit-only workflows fall back to `build-env-alpine:3.23` since no 3.21 image exists in the new scheme; the audits only query S3/CRAN, so the container OS does not affect correctness. ## Bug fixes folded in 1. All six `weekly-audit-missing-alpine-*.yaml` files were pinned to `alpine:3.23-4.5` regardless of platform. Now each one points at its own alpine image. 2. All fourteen `update-package-index-*.yaml` files were pinned to `build-env-ubuntu:noble-4.4` (or `noble-4.5` for `redhat-10-amd64`) regardless of platform. Now each one uses its own platform's image. 3. `process-updates-ubuntu-2404-{amd64,arm64}.yaml` had `R_VERSION` of `4.4` (no patch) baked into the tag. Aligned to `4.4.3`, matching the audit and rebuild counterparts. ## Smoke targets (post-merge) One workflow per shape, ready to dry-run: - `process-updates-alpine-322-amd64.yaml` - `weekly-rebuild-missing-redhat-9-amd64.yaml` - `weekly-audit-missing-ubuntu-2204-amd64.yaml` - `update-package-index-redhat-10-amd64.yaml` - `archive-missed-packages.yaml` - `build-all-versions-amd64.yaml` (with its install-deps predecessor) - `build-r-minor-sensitive-packages.yaml` ## Follow-ups (out of scope, surfaced during review) - `process-updates-redhat-10-{amd64,arm64}.yaml` set `codename = "rhel9"` in their `upload_package_index(...)` calls. Pre-existing bug — should be `"rhel10"`. The `update-package-index-redhat-10-*` counterparts already use `"rhel10"` correctly. - `update-package-index-redhat-8-amd64.yaml` is missing the `packageVersion("bincraft")` diagnostic line that every sibling file has. Pre-existing asymmetry between amd64 and arm64. ## Spec & plan - Spec: `docs/superpowers/specs/2026-05-25-multi-r-version-images-design.md` - Plan: `docs/superpowers/plans/2026-05-25-multi-r-version-images.md`
Image tag drops the R version (e.g., build-env-alpine:3.23 instead of
:3.23-4.5); workflows pick an R version by calling
/opt/R/${R_VERSION}/bin/R explicitly.
Includes three folded-in bug fixes (alpine audit images, package-index
images, ubuntu-2404 R patch).
Drop -${R_VERSION} from the image tag and invoke R/Rscript via the
explicit /opt/R/${R_VERSION}/bin/ path.
Header comments described R_VERSION as (4.5) but the new multi-R-version
images only ship full-patch paths (/opt/R/4.5.3/bin/R), so the minor-form
annotation is misleading. The example pipeline-create lines below the
annotation already use 4.5.3 correctly.
Drop the R-version suffix from each image tag, add an explicit
R_VERSION env var per file, and invoke R via
/opt/R/${R_VERSION}/bin/R at every call site.

Also aligns ubuntu-2404 process-updates from R 4.4 to R 4.4.3,
matching the audit and rebuild counterparts.
Drop the R-version suffix from each image tag, add an explicit
R_VERSION env var per file, and invoke R via
/opt/R/${R_VERSION}/bin/R at every call site.
Drop the R-version suffix from each image tag, add an explicit
R_VERSION env var per file, and invoke R via
/opt/R/${R_VERSION}/bin/R at every call site.

Also fixes the alpine-322 audit image, which was previously pointing
at alpine:3.23 instead of alpine:3.22. The alpine-321 audits stay on
alpine:3.23 since no 3.21 image exists in the new scheme — they only
query S3/CRAN, so the container OS does not affect correctness.
Drop the R-version suffix from each image tag, add an explicit
R_VERSION env var per file, and invoke R via
/opt/R/${R_VERSION}/bin/R at every call site.

Also repoints every update-package-index workflow at the image that
matches its own platform (was previously pinned to
build-env-ubuntu:noble-4.4 / noble-4.5 regardless of platform).
Drop the R-version suffix from the image tag and invoke R via the
explicit /opt/R/${R_VERSION}/bin/R path. The image OS does not
matter for this workflow; it stays on alpine:3.23.
Drop -${r_version} from the docker.io/devxygmbh tag and invoke R
via the explicit /opt/R/${r_version}/bin/R path (including
R CMD INSTALL). Bumps the matrix r_version values from 4.5/4.4 to
the full-patch 4.5.3/4.4.3, matching the rest of the refactor's
'always full patch' rule.
Drop -{{R_VERSION}} from the image tag and invoke R via the explicit
/opt/R/{{R_VERSION}}/bin/R path in build-all, build-single, and
process-updates. Updates example comments to use current
platform/R combinations.
Mirror the multi-R-version image refactor in the commented-out
template so the example remains faithful to active .crow workflows.
The upload_package_index() call in both process-updates-redhat-10-*
files passed codename = "rhel9", which uploaded the redhat-10 index
to the rhel9 path. The companion update-package-index-redhat-10-*
files already use "rhel10" correctly.
The amd64 variant of the redhat-8 package-index workflow was missing
the packageVersion("bincraft") diagnostic line that every sibling file
(including its arm64 counterpart) runs after pak install.
Stop tracking docs/ — the existing spec and plan files (both this PR's
multi-R-version-images set and the prior weekly-missing-binaries set)
were intermediate working artifacts that don't need to live in the
repo. Files remain on disk locally but are no longer in git.
Strict YAML parsers reject the colon separating ${OS} and ${OS_VERSION}
in an unquoted scalar (it looks like a mapping value). Wrap the whole
image value in double quotes to make it an unambiguous string.

Mirrors the convention already used by
build-r-minor-sensitive-packages.yaml.
pat-s merged commit 6faa3772d1 into main 2026-05-26 08:51:27 +00:00
pat-s deleted branch t3code/eb891def 2026-05-26 08:51:28 +00:00
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!70
No description provided.