build-cran-binaries/.crow/update-package-index-ubuntu-2404-arm64.yaml
pat-s 7d873eb07b
refactor(ci): pin bincraft and skip reinstall when version matches
bincraft is baked into the build-env images, but every workflow run
unconditionally called pak::pak("git::.../bincraft.git"), costing
~30-60s per job.

Pin the install URL to a specific tag (v4.0.2) and guard the install
on packageVersion("bincraft") != "4.0.2". Healthy images skip the
install entirely; broken images and version drift still self-heal.

Adds a Renovate customManager so the pin is bumped automatically
when bincraft cuts a new tag.
2026-05-28 13:58:44 +02:00

80 lines
2.9 KiB
YAML

when:
- event: [cron]
cron: update-package-index-ubuntu-2404-arm64
- event: [cron]
cron: update-package-index
- event: manual
evaluate: 'update_package_index == "ubuntu-2404-arm64"'
skip_clone: true
depends_on:
- update-package-index-ubuntu-2404-amd64
steps:
- name: Upload PACKAGES files
image: reg.devxy.io/rpkgs/build-env-ubuntu:noble
pull: true
environment:
RED_HAT_DEV_PW:
from_secret: RED_HAT_DEV_PW
B2_S3_ACCESS_KEY:
from_secret: B2_S3_ACCESS_KEY
B2_S3_SECRET_KEY:
from_secret: B2_S3_SECRET_KEY
PGPASS:
from_secret: PGPASS
REPO_RO_TOKEN:
from_secret: REPO_RO_TOKEN
GITHUB_PAT:
from_secret: GITHUB_PAT
# normal env vars
GIT_USER: pat-s
NTFY_SERVER:
from_secret: NTFY_SERVER
NTFY_TOPIC:
from_secret: NTFY_TOPIC
NTFY_AUTH: TRUE
NTFY_PASSWORD:
from_secret: ntfy_token
# set the location of the 'pkgcache' cache dir which persists the R package dependencies needed to install the packages themselves
R_PKG_CACHE_DIR: /mnt/cache/pkgcache
R_LIBS_USER: /mnt/cache/R-pkgs
R_VERSION: 4.4.3
commands:
- git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git .
- rm -rf /mnt/cache/packages/*
- /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.0.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.0.2")'
- /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")'
- cd /mnt/cache/packages
- /opt/R/$R_VERSION/bin/R -q -e 'options(crayon.enabled = TRUE); library(bincraft); future::plan("multisession", workers = 4); library(progressr); handlers(global = TRUE); handlers("progress"); upload_package_index(codename = "noble", s3_endpoint = "https://s3.eu-central-003.backblazeb2.com", s3_region = "eu-central-003", s3_bucket = "devxy-rpkgs-binaries", s3_access_key_id = Sys.getenv("B2_S3_ACCESS_KEY"), s3_secret_access_key = Sys.getenv("B2_S3_SECRET_KEY"))'
backend_options:
kubernetes:
resources:
requests:
memory: 2600Mi
cpu: 2000m
limits:
memory: 2600Mi
cpu: 8000m
nodeSelector:
kubernetes.io/arch: 'arm64'
tolerations:
- key: 'CI'
operator: 'Equal'
value: 'true'
effect: 'NoSchedule'
- name: Purge CDN cache
image: reg.devxy.io/docker.io/library/alpine:3.23
environment:
BUNNYNET_API_KEY:
from_secret: BUNNYNET_API_KEY
SUBDOMAIN1: 'cran.devxy.io'
SUBDOMAIN2: 'cran.allianceswisspass.devxy.io'
SUBDOMAIN3: 'cran.rpkgs.com'
OS_ID: noble
ARCH: amd64
commands:
- apk add --no-cache -q bash curl
- bash scripts/purge_cdn_cache.sh "$BUNNYNET_API_KEY" "$ARCH" "$OS_ID" "$SUBDOMAIN1" "$SUBDOMAIN2" "$SUBDOMAIN3"