build-cran-binaries/.crow/backfill-abi-classification.yaml
pat-s 930a4acd12
fix(ci): install the R packages pipelines use instead of relying on the image
bincraft v5.5.1 dropped lubridate, dplyr, purrr, data.table and others from
its imports, so the pipelines' own calls now depend on whatever the build-env
image's site library or the shared R_LIBS_USER cache happens to hold. The arm64
redhat:9 image has no progressr under R 4.4.3, which fails every
process-cran-updates-redhat-9-arm64 run since v5.5.1.

- Install progressr and lubridate for process-updates, which call them inline.
- Install purrr for packages-to-build.R and data.table for the weekly audit.
- Drop the unused dplyr and progressr library() calls from packages-to-build.R.
- Install RPostgres in every pipeline that talks to the metadata DB, since
  bincraft silently skips the DB (and the per-minor index aborts) without it.
- Reinstall bincraft in the prune re-index step, whose /tmp library does not
  survive from the prune step.
2026-10-20 08:46:00 +00:00

91 lines
3.1 KiB
YAML

# Populate the ABI classifier cache for packages that predate the per-minor scheme.
#
# bincraft decides whether a flat binary may be carried into a per-minor index
# from its risky-package set. That set is now the union of the per-minor tarball
# scan and the `abi_classification` cache, but the cache only holds verdicts for
# packages that passed through the build pipeline after the scheme existed.
# Everything older has no verdict, and no verdict means "carry it" - which is how
# a base64enc built under R 4.4.3 reached R 4.6 clients and died at dyn.load()
# on SETLENGTH.
#
# The verdict is computed from the package source, so it does not depend on OS,
# arch or R minor: one run populates the cache for every slot. The arch/codename
# below only choose which flat index to enumerate.
#
# Re-running is cheap. Cached verdicts are returned without touching the network,
# so a second run costs one query per package and downloads only what is still
# unclassified.
#
# crow pipeline create devxy/build-cran-binaries --var backfill_abi=run
variables:
# A manual pipeline creation instantiates every file in .crow/, so the default
# must be a value the `when` clause rejects.
backfill_abi:
description: "Set to 'run' to classify the flat index into the ABI cache."
options:
- none
- run
default: none
BACKFILL_ARCH:
description: 'Arch of the flat index to enumerate.'
options:
- amd64
- arm64
default: amd64
BACKFILL_CODENAME:
description: 'Codename of the flat index to enumerate.'
default: resolute
BACKFILL_LIMIT:
description: 'Classify at most this many packages (0 = no limit).'
default: '0'
when:
- event: manual
evaluate: 'backfill_abi == "run"'
skip_clone: true
labels:
group: rpkgs-amd64
steps:
- name: 'Classify the flat index into the ABI cache'
image: reg.devxy.io/rpkgs/build-env-ubuntu:resolute
pull: true
environment:
OTEL_R_TRACES_EXPORTER: none
OTEL_R_LOGS_EXPORTER: none
OTEL_R_METRICS_EXPORTER: none
PGPASS:
from_secret: PGPASS
REPO_RO_TOKEN:
from_secret: REPO_RO_TOKEN
GITHUB_PAT:
from_secret: GITHUB_PAT
GIT_USER: pat-s
# Pipeline variables are substituted into the YAML, not exported, so they
# have to be bound here to be readable as env vars in the script below.
BACKFILL_ARCH: ${BACKFILL_ARCH}
BACKFILL_CODENAME: ${BACKFILL_CODENAME}
BACKFILL_LIMIT: ${BACKFILL_LIMIT}
R_LIBS_USER: /tmp/R-pkgs
commands:
- git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git .
- mkdir -p /tmp/R-pkgs
- /opt/R/4.5.3/bin/Rscript local/install-bincraft.R
- UVR_R_BIN=/opt/R/4.5.3/bin/R local/uvr-install.sh RPostgres
- |
set -eu
LIMIT=""
if [ "$$BACKFILL_LIMIT" != "0" ]; then
LIMIT="$$BACKFILL_LIMIT"
fi
/opt/R/4.5.3/bin/Rscript local/backfill-abi-classification.R \
"$$BACKFILL_ARCH" "$$BACKFILL_CODENAME" $$LIMIT
backend_options:
docker:
resources:
requests:
memory: 4Gi
cpu: 1000m