Compare commits

...
Author SHA1 Message Date
6958a55028
fix(ci): derive build-all platform/arch in-container, not from CI env
Crow cannot interpolate the workflow-level OS/OS_VERSION form variables inside
an environment: block (only matrix variables work there), so exporting them
broke pipeline parsing with "unable to parse variable name".

Instead, derive platform + arch inside build-all.R from the running container,
mirroring bincraft's own codename -> platform mapping and machine -> arch
detection. This keeps the already-built dedup pre-filter effective without
depending on CI-injected env vars, and degrades to a length-1 NA (querying
nothing) for an unmapped codename rather than crashing.
2026-06-18 13:38:19 +02:00
1b63f7fb0c
feat(ci): make OS and OS_VERSION manual-run dropdowns
Give the OS and OS_VERSION form variables explicit option lists like
target_arch and R_VERSION already have, so the manual-run form presents
dropdowns instead of free-text. Crow form variables are independent, so the
operator must still pick a coherent OS + OS_VERSION combination.
2026-06-18 13:38:18 +02:00
3 changed files with 51 additions and 13 deletions

View file

@ -10,10 +10,21 @@ variables:
- arm64
default: amd64
OS:
description: "Base OS image name (e.g. alpine, redhat, ubuntu)."
description: "Base OS image name."
options:
- alpine
- redhat
- ubuntu
default: alpine
OS_VERSION:
description: "OS version / image tag (e.g. 3.24, 9, jammy, noble)."
description: "OS image tag. Must match OS (alpine: 3.24; redhat: 8/9/10; ubuntu: jammy/noble)."
options:
- "3.24"
- "8"
- "9"
- "10"
- "jammy"
- "noble"
default: "3.24"
R_VERSION:
description: "Primary R version under /opt/R."

View file

@ -11,10 +11,21 @@ variables:
- arm64
default: amd64
OS:
description: "Base OS image name (e.g. alpine, redhat, ubuntu)."
description: "Base OS image name."
options:
- alpine
- redhat
- ubuntu
default: alpine
OS_VERSION:
description: "OS version / image tag (e.g. 3.24, 9, jammy, noble)."
description: "OS image tag. Must match OS (alpine: 3.24; redhat: 8/9/10; ubuntu: jammy/noble)."
options:
- "3.24"
- "8"
- "9"
- "10"
- "jammy"
- "noble"
default: "3.24"
R_VERSION:
description: "Primary R version under /opt/R."
@ -90,13 +101,6 @@ steps:
from_secret: GITHUB_PAT
# normal env vars
GIT_USER: pat-s
# Export the platform selectors as runtime env vars. They are otherwise
# only available for ${...} interpolation (image/volume), so build-all.R's
# `Sys.getenv("OS")/("OS_VERSION")/("ARCH")` would be empty and its
# already-built dedup query would match platform "-" and skip nothing.
OS: ${OS}
OS_VERSION: ${OS_VERSION}
ARCH: ${ARCH}
# set the location of the 'pkgcache' cache dir which persists the R package dependencies needed to install the packages themselves
R_PKG_CACHE_DIR: ${R_PKG_CACHE_DIR}
R_LIBS_USER: /mnt/cache/R-pkgs

View file

@ -68,8 +68,31 @@ chunk <- chunk[!chunk$Package %in% exclude, ]
# pkgs_to_build.rds is a static snapshot from the install-deps step, so on a
# restart it still lists everything an interrupted run already produced. The
# metadata DB reflects that progress, so we re-derive the remaining set here.
platform <- paste(Sys.getenv("OS"), gsub("[.]", "", Sys.getenv("OS_VERSION")), sep = "-")
arch <- Sys.getenv("ARCH")
# Derive platform + arch from the running container, mirroring the codename ->
# platform mapping bincraft uses internally. The OS/OS_VERSION selectors are
# workflow-level CI variables that are not injected into the container
# environment, so Sys.getenv() would return "" and this pre-filter would query
# platform "-" and skip nothing.
codename <- bincraft::set_codename(NULL)
platform <- switch(
codename,
jammy = "ubuntu-2204",
noble = "ubuntu-2404",
resolute = "ubuntu-2604",
rhel10 = "redhat-10",
rhel9 = "redhat-9",
rhel8 = "redhat-8",
alpine320 = "alpine-320",
alpine321 = "alpine-321",
alpine322 = "alpine-322",
alpine323 = "alpine-323",
alpine324 = "alpine-324",
alpine325 = "alpine-325",
alpine326 = "alpine-326",
NA_character_
)
local_machine <- Sys.info()[["machine"]]
arch <- if (grepl("arm64|aarch64", local_machine)) "arm64" else "amd64"
con <- DBI::dbConnect(
RPostgres::Postgres(),
dbname = "build_metadata",