diff --git a/.crow/archive-missed-packages.yaml b/.crow/archive-missed-packages.yaml index f1fe920..320841c 100644 --- a/.crow/archive-missed-packages.yaml +++ b/.crow/archive-missed-packages.yaml @@ -6,6 +6,7 @@ when: - event: cron cron: archive-missed-packages + matrix: include: - CODENAME: jammy @@ -43,7 +44,7 @@ matrix: steps: - name: 'Archive missed packages' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: RED_HAT_DEV_PW: diff --git a/.crow/build-all-versions-amd64.yaml b/.crow/build-all-versions-amd64.yaml index be356fb..796c812 100644 --- a/.crow/build-all-versions-amd64.yaml +++ b/.crow/build-all-versions-amd64.yaml @@ -3,7 +3,9 @@ # OS (alpine) # OS_VERSION (3.22) # R_VERSION (4.5.3) -# crow pipeline create --var ARCH=amd64 --var OS=alpine --var OS_VERSION=3.24 --var R_VERSION=4.5.3 --var task=build-all-amd64 --branch=main --log-level=info 5 +# crow pipeline create --var ARCH=arm64 --var OS=alpine --var OS_VERSION=3.23 --var R_VERSION=4.5.3 --var task=build-all-arm64 --branch=main --log-level=info 5 +# crow pipeline create --var ARCH=arm64 --var OS=redhat --var OS_VERSION=10 --var R_VERSION=4.5.3 --var task=build-all-arm64 --branch=main --log-level=info 5 +# crow pipeline create --var ARCH=amd64 --var OS=redhat --var OS_VERSION=10 --var R_VERSION=4.5.3 --var task=build-all-amd64 --branch=main --log-level=info 5 when: - event: manual evaluate: 'task == "build-all-amd64"' @@ -37,7 +39,7 @@ depends_on: steps: - name: 'Build binaries' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' + image: "reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}" pull: true environment: RED_HAT_DEV_PW: @@ -55,7 +57,7 @@ steps: # normal env vars GIT_USER: pat-s # 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 CCACHE_DIR: /mnt/cache/ccache NCPUS: 2 @@ -68,18 +70,6 @@ steps: # pkgs = readRDS('/mnt/cache/pkgs_amd64.rds'); - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run); XVFB_ARGS=""; if command -v xwfb-run >/dev/null 2>&1; then dnf install -y -q weston 2>/dev/null; XVFB_ARGS="-c weston"; fi - $XVFB $XVFB_ARGS -n $SPLIT_INDEX -- /opt/R/$R_VERSION/bin/Rscript local/build-all.R $SPLIT_INTO $SPLIT_INDEX $NCPUS 2>&1 - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" $XVFB $XVFB_ARGS -n $SPLIT_INDEX -- "$(dirname "$RBIN")/Rscript" local/build-all.R --sensitive-only $SPLIT_INTO $SPLIT_INDEX $NCPUS 2>&1 || true - done # archive missed packages - /opt/R/$R_VERSION/bin/R -q -e "bincraft::process_unarchived_pkgs(paste(Sys.getenv('OS'), Sys.getenv('OS_VERSION')), Sys.getenv('ARCH'), workers = $NCPUS)" backend_options: @@ -107,47 +97,3 @@ steps: operator: 'Equal' value: 'true' effect: 'NoSchedule' - - name: 'Upload package indexes' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' - pull: true - environment: - B2_S3_ACCESS_KEY: - from_secret: B2_S3_ACCESS_KEY - B2_S3_SECRET_KEY: - from_secret: B2_S3_SECRET_KEY - R_LIBS_USER: /mnt/cache/R-pkgs - volumes: - - ${ARCH}-binaries-r-dep-cache-${OS}-${OS_VERSION//./}:/mnt/cache - commands: - - | - CODENAME=$(/opt/R/$R_VERSION/bin/Rscript -e "cat(bincraft::set_codename(NULL))") - /opt/R/$R_VERSION/bin/R -q -e "bincraft::upload_package_index(codename = '$CODENAME', 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'))" - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "bincraft::upload_package_index(codename = '$CODENAME', r_minor = '$RMINOR', 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'))" || true - done - backend_options: - docker: - resources: - requests: - memory: 5Gi - cpu: 1000m - limits: - memory: 20Gi - cpu: 2000m - kubernetes: - resources: - requests: - memory: 5Gi - cpu: 1000m - limits: - memory: 20Gi - cpu: 2000m - nodeSelector: - kubernetes.io/arch: ${ARCH} - node.kubernetes.io/instance-type: ${K8S_INSTANCE_TYPE} - tolerations: - - key: 'CI' - operator: 'Equal' - value: 'true' - effect: 'NoSchedule' diff --git a/.crow/build-all-versions-arm64.yaml b/.crow/build-all-versions-arm64.yaml index be45659..37992df 100644 --- a/.crow/build-all-versions-arm64.yaml +++ b/.crow/build-all-versions-arm64.yaml @@ -4,8 +4,9 @@ # OS_VERSION (3.22) # R_VERSION (4.5.3) # Skip list lives in local/excluded-packages.json (read by local/build-all.R). -# crow pipeline create --var ARCH=arm64 --var OS=alpine --var OS_VERSION=3.24 --var R_VERSION=4.5.3 --var task=build-all-arm64 --branch=main --log-level=info 5 -# crow pipeline create --var ARCH=arm64 --var OS=alpine --var OS_VERSION=3.24 --var R_VERSION=4.5.3 --var task=build-all-arm64 --branch=main --log-level=info 5 +# crow pipeline create --var ARCH=arm64 --var OS=alpine --var OS_VERSION=3.22 --var R_VERSION=4.5 --var task=build-all-arm64 --var K8S_INSTANCE_TYPE=cax41 --branch=main --log-level=info 7 +# crow pipeline create --var ARCH=arm64 --var OS=alpine --var OS_VERSION=3.23 --var R_VERSION=4.5 --var task=build-all-arm64 --var K8S_INSTANCE_TYPE=cax41 --branch=main --log-level=info 5 +# crow pipeline create --var ARCH=arm64 --var OS=redhat --var OS_VERSION=10 --var R_VERSION=4.5.3 --var task=build-all-arm64 --branch=main --log-level=info 5 when: - event: manual evaluate: 'task == "build-all-arm64"' @@ -53,7 +54,7 @@ depends_on: steps: - name: 'Build binaries' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' + image: "reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}" pull: true environment: RED_HAT_DEV_PW: @@ -82,18 +83,6 @@ steps: - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run); XVFB_ARGS=""; if command -v xwfb-run >/dev/null 2>&1; then dnf install -y -q weston 2>/dev/null; XVFB_ARGS="-c weston"; fi - $XVFB $XVFB_ARGS -n $SPLIT_INDEX -- /opt/R/$R_VERSION/bin/Rscript local/build-all.R $SPLIT_INTO $SPLIT_INDEX $NCPUS 2>&1 - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" $XVFB $XVFB_ARGS -n $SPLIT_INDEX -- "$(dirname "$RBIN")/Rscript" local/build-all.R --sensitive-only $SPLIT_INTO $SPLIT_INDEX $NCPUS 2>&1 || true - done # archive missed packages - /opt/R/$R_VERSION/bin/R -q -e "bincraft::process_unarchived_pkgs(paste(Sys.getenv('OS'), Sys.getenv('OS_VERSION')), Sys.getenv('ARCH'), workers = $NCPUS)" backend_options: @@ -121,47 +110,3 @@ steps: operator: 'Equal' value: 'true' effect: 'NoSchedule' - - name: 'Upload package indexes' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' - pull: true - environment: - B2_S3_ACCESS_KEY: - from_secret: B2_S3_ACCESS_KEY - B2_S3_SECRET_KEY: - from_secret: B2_S3_SECRET_KEY - R_LIBS_USER: /mnt/cache/R-pkgs - volumes: - - ${ARCH}-binaries-r-dep-cache-${OS}-${OS_VERSION//./}:/mnt/cache - commands: - - | - CODENAME=$(/opt/R/$R_VERSION/bin/Rscript -e "cat(bincraft::set_codename(NULL))") - /opt/R/$R_VERSION/bin/R -q -e "bincraft::upload_package_index(codename = '$CODENAME', 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'))" - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "bincraft::upload_package_index(codename = '$CODENAME', r_minor = '$RMINOR', 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'))" || true - done - backend_options: - docker: - resources: - requests: - memory: 5Gi - cpu: 1000m - limits: - memory: 20Gi - cpu: 2000m - kubernetes: - resources: - requests: - memory: 5Gi - cpu: 1000m - limits: - memory: 20Gi - cpu: 2000m - nodeSelector: - kubernetes.io/arch: ${ARCH} - node.kubernetes.io/instance-type: ${K8S_INSTANCE_TYPE} - tolerations: - - key: 'CI' - operator: 'Equal' - value: 'true' - effect: 'NoSchedule' diff --git a/.crow/build-all-versions-install-deps-amd64.yaml b/.crow/build-all-versions-install-deps-amd64.yaml index 285a4e2..4d50ddf 100644 --- a/.crow/build-all-versions-install-deps-amd64.yaml +++ b/.crow/build-all-versions-install-deps-amd64.yaml @@ -10,7 +10,7 @@ labels: steps: - name: 'Install deps and bincraft' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' + image: "reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}" pull: true environment: REPO_RO_TOKEN: @@ -35,7 +35,7 @@ steps: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - git clone -q https://codefloe.com/rpkgs/bincraft.git /tmp/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'pak::sysreqs_db_update(); pak::local_install("/tmp/bincraft"); pak::pak(c("RPostgres", "s3fs", "data.table", "future", "jsonlite")); packageVersion("bincraft")' - - /opt/R/$R_VERSION/bin/R -q -e "source('local/packages-to-build.R'); saveRDS(pkgs, '/mnt/cache/packages/pkgs_to_build.rds'); saveRDS(pkgs[r_minor_sensitive == TRUE], '/mnt/cache/packages/r_minor_sensitive_pkgs.rds'); sprintf('Precomputed %s package versions (%s r-minor-sensitive)', nrow(pkgs), nrow(pkgs[r_minor_sensitive == TRUE]))" + - /opt/R/$R_VERSION/bin/R -q -e "source('local/packages-to-build.R'); saveRDS(pkgs, '/mnt/cache/packages/pkgs_to_build.rds'); sprintf('Precomputed %s package versions to build', nrow(pkgs))" backend_options: docker: resources: diff --git a/.crow/build-all-versions-install-deps-arm64.yaml b/.crow/build-all-versions-install-deps-arm64.yaml index 98decea..2b3b881 100644 --- a/.crow/build-all-versions-install-deps-arm64.yaml +++ b/.crow/build-all-versions-install-deps-arm64.yaml @@ -9,7 +9,7 @@ labels: steps: - name: 'Install deps and bincraft' - image: 'reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}' + image: "reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION}" pull: true environment: REPO_RO_TOKEN: @@ -34,7 +34,7 @@ steps: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - git clone -q https://codefloe.com/rpkgs/bincraft.git /tmp/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'pak::sysreqs_db_update(); pak::local_install("/tmp/bincraft"); pak::pak(c("RPostgres", "s3fs", "data.table", "future", "jsonlite")); packageVersion("bincraft")' - - /opt/R/$R_VERSION/bin/R -q -e "source('local/packages-to-build.R'); saveRDS(pkgs, '/mnt/cache/packages/pkgs_to_build.rds'); saveRDS(pkgs[r_minor_sensitive == TRUE], '/mnt/cache/packages/r_minor_sensitive_pkgs.rds'); sprintf('Precomputed %s package versions (%s r-minor-sensitive)', nrow(pkgs), nrow(pkgs[r_minor_sensitive == TRUE]))" + - /opt/R/$R_VERSION/bin/R -q -e "source('local/packages-to-build.R'); saveRDS(pkgs, '/mnt/cache/packages/pkgs_to_build.rds'); sprintf('Precomputed %s package versions to build', nrow(pkgs))" backend_options: docker: resources: diff --git a/.crow/build-r-minor-sensitive-packages.yaml b/.crow/build-r-minor-sensitive-packages.yaml new file mode 100644 index 0000000..a0c3c2d --- /dev/null +++ b/.crow/build-r-minor-sensitive-packages.yaml @@ -0,0 +1,80 @@ +when: + - event: manual + evaluate: 'build == "r-minor"' +# - event: manual +# evaluate: 'build == "alpine-322-arm64"' +# - event: manual +# evaluate: 'build == "alpine-322-arm64-1"' +# - event: manual +# evaluate: 'build == "all-arm64"' + +# skip_clone: true + +# depends_on: +# - alpine-322-arm64-install-deps + +matrix: + include: + - os: alpine + os_version: 3.21 + r_version: 4.5.3 + - os: alpine + os_version: 3.21 + r_version: 4.4.3 + # - os: alpine + # os_version: 3.21 + # r_version: 4.3 +steps: + - name: 'Build R-minor-sensitive binaries' + image: "docker.io/devxygmbh/rpkgs-build-env-${os}:${os_version}" + 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: /tmp/R-libs:/mnt/cache/R-pkgs + CCACHE_DIR: /mnt/cache/ccache + NCPUS: 2 + STRATEGY: sequential + commands: + - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . + - rm -rf /mnt/cache/R-pkgs/00LOCK-* + - mkdir -p /tmp/R-libs + - git clone -q https://codefloe.com/rpkgs/bincraft.git /tmp/bincraft && /opt/R/$R_VERSION/bin/R CMD INSTALL --library=/tmp/R-libs /tmp/bincraft && /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' + - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages + - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run) + - $XVFB -- /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = $NCPUS, future.globals.onReference = NULL); pak::sysreqs_db_update(); pkgs = bincraft::get_r_minor_sensitive_packages(r_minor_packages_issue_url = 'https://git.devxy.io/api/v1/repos/devxy/build-cran-binaries/issues/29'); foo = lapply(pkgs, function(x) bincraft::build_binary_package(x, is_debug = FALSE, is_r_minor_sensitive = TRUE, force = FALSE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE))" 2>&1 + backend_options: + kubernetes: + resources: + requests: + memory: 5Gi + cpu: 1000m + limits: + memory: 20Gi + cpu: 2000m + tolerations: + - key: 'CI' + operator: 'Equal' + value: 'true' + effect: 'NoSchedule' diff --git a/.crow/process-updates-alpine-322-amd64.yaml b/.crow/process-updates-alpine-322-amd64.yaml index eb45c72..c2bdb0f 100644 --- a/.crow/process-updates-alpine-322-amd64.yaml +++ b/.crow/process-updates-alpine-322-amd64.yaml @@ -13,7 +13,7 @@ labels: steps: - name: 'Processing Updates' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: RED_HAT_DEV_PW: @@ -51,30 +51,13 @@ steps: # - amd64-binaries-r-dep-cache-alpine-322:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = FALSE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = FALSE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "alpine322", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'alpine322', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-alpine-322-arm64.yaml b/.crow/process-updates-alpine-322-arm64.yaml index 13eae6f..d5da778 100644 --- a/.crow/process-updates-alpine-322-arm64.yaml +++ b/.crow/process-updates-alpine-322-arm64.yaml @@ -13,7 +13,7 @@ labels: steps: - name: 'Processing Updates' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: RED_HAT_DEV_PW: @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-alpine-321:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-322', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "alpine322", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'alpine322', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-alpine-323-amd64.yaml b/.crow/process-updates-alpine-323-amd64.yaml index b1149bd..2bc1703 100644 --- a/.crow/process-updates-alpine-323-amd64.yaml +++ b/.crow/process-updates-alpine-323-amd64.yaml @@ -13,7 +13,7 @@ labels: steps: - name: 'Processing Updates' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: RED_HAT_DEV_PW: @@ -51,30 +51,13 @@ steps: # - amd64-binaries-r-dep-cache-alpine-323:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = FALSE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = FALSE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "alpine323", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'alpine323', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-alpine-323-arm64.yaml b/.crow/process-updates-alpine-323-arm64.yaml index 7357d8c..81aad1e 100644 --- a/.crow/process-updates-alpine-323-arm64.yaml +++ b/.crow/process-updates-alpine-323-arm64.yaml @@ -13,7 +13,7 @@ labels: steps: - name: 'Processing Updates' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: RED_HAT_DEV_PW: @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-alpine-321:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'alpine-323', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "alpine323", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'alpine323', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-redhat-10-amd64.yaml b/.crow/process-updates-redhat-10-amd64.yaml index c52b1a7..23db890 100644 --- a/.crow/process-updates-redhat-10-amd64.yaml +++ b/.crow/process-updates-redhat-10-amd64.yaml @@ -52,31 +52,14 @@ steps: # - amd64-binaries-r-dep-cache-redhat-10:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run); XVFB_ARGS=""; if command -v xwfb-run >/dev/null 2>&1; then dnf install -y -q weston 2>/dev/null; XVFB_ARGS="-c weston"; fi - - $XVFB $XVFB_ARGS -- /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - $XVFB $XVFB_ARGS -- /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel10", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel10', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-redhat-10-arm64.yaml b/.crow/process-updates-redhat-10-arm64.yaml index 9f4cc71..ce9fc26 100644 --- a/.crow/process-updates-redhat-10-arm64.yaml +++ b/.crow/process-updates-redhat-10-arm64.yaml @@ -50,31 +50,14 @@ steps: # - arm64-binaries-r-dep-cache-redhat-10:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run); XVFB_ARGS=""; if command -v xwfb-run >/dev/null 2>&1; then dnf install -y -q weston 2>/dev/null; XVFB_ARGS="-c weston"; fi - - $XVFB $XVFB_ARGS -- /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - $XVFB $XVFB_ARGS -- /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-10', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel10", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel10', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-redhat-8-amd64.yaml b/.crow/process-updates-redhat-8-amd64.yaml index 873d9bd..fe1f87e 100644 --- a/.crow/process-updates-redhat-8-amd64.yaml +++ b/.crow/process-updates-redhat-8-amd64.yaml @@ -51,30 +51,13 @@ steps: # - amd64-binaries-r-dep-cache-redhat-8:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel8", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel8', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-redhat-8-arm64.yaml b/.crow/process-updates-redhat-8-arm64.yaml index 410a2b5..c4c7096 100644 --- a/.crow/process-updates-redhat-8-arm64.yaml +++ b/.crow/process-updates-redhat-8-arm64.yaml @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-redhat-8:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-8', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel8", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel8', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-redhat-9-amd64.yaml b/.crow/process-updates-redhat-9-amd64.yaml index 1ca1332..b51c42b 100644 --- a/.crow/process-updates-redhat-9-amd64.yaml +++ b/.crow/process-updates-redhat-9-amd64.yaml @@ -52,30 +52,13 @@ steps: # - amd64-binaries-r-dep-cache-redhat-9:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel9", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel9', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-redhat-9-arm64.yaml b/.crow/process-updates-redhat-9-arm64.yaml index 2a4e284..c331b84 100644 --- a/.crow/process-updates-redhat-9-arm64.yaml +++ b/.crow/process-updates-redhat-9-arm64.yaml @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-redhat-9:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'redhat-9', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "rhel9", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'rhel9', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-ubuntu-2204-amd64.yaml b/.crow/process-updates-ubuntu-2204-amd64.yaml index ffc4005..aa3325e 100644 --- a/.crow/process-updates-ubuntu-2204-amd64.yaml +++ b/.crow/process-updates-ubuntu-2204-amd64.yaml @@ -52,30 +52,13 @@ steps: # - amd64-binaries-r-dep-cache-ubuntu-2204:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "jammy", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'jammy', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-ubuntu-2204-arm64.yaml b/.crow/process-updates-ubuntu-2204-arm64.yaml index c9a549b..b0d2e6d 100644 --- a/.crow/process-updates-ubuntu-2204-arm64.yaml +++ b/.crow/process-updates-ubuntu-2204-arm64.yaml @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-ubuntu-2204:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2204', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); upload_package_index(codename = "jammy", 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'jammy', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/process-updates-ubuntu-2404-amd64.yaml b/.crow/process-updates-ubuntu-2404-amd64.yaml index 471019c..536a69a 100644 --- a/.crow/process-updates-ubuntu-2404-amd64.yaml +++ b/.crow/process-updates-ubuntu-2404-amd64.yaml @@ -51,30 +51,13 @@ steps: # - amd64-binaries-r-dep-cache-ubuntu-2404:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'noble', r_minor = '$RMINOR', 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'))" || true - done backend_options: kubernetes: resources: diff --git a/.crow/process-updates-ubuntu-2404-arm64.yaml b/.crow/process-updates-ubuntu-2404-arm64.yaml index 4c6f7cf..9fb2ec9 100644 --- a/.crow/process-updates-ubuntu-2404-arm64.yaml +++ b/.crow/process-updates-ubuntu-2404-arm64.yaml @@ -50,30 +50,13 @@ steps: # - arm64-binaries-r-dep-cache-ubuntu-2404:/mnt/cache commands: - git clone -q https://pat-s:$$REPO_RO_TOKEN@git.devxy.io/devxy/build-cran-binaries.git . - - rm -rf /mnt/cache/R-pkgs/00LOCK-* /mnt/cache/R-pkgs/bincraft /mnt/cache/R-pkgs/pkgcache /mnt/cache/pkgcache/R/pkgcache + - rm -rf /mnt/cache/R-pkgs/00LOCK-r-pkg-binaries /mnt/cache/R-pkgs/00LOCK-bincraft /mnt/cache/R-pkgs/00LOCK-pak /mnt/cache/pkgcache/R/pkgcache /mnt/cache/pkgcache/R/pkgcache /mnt/cache/R-pkgs/pkgcache /mnt/cache/R-pkgs/00LOCK-pak/mnt/cache/R-pkgs/00LOCK-RPostgres /mnt/cache/R-pkgs/bincraft - /opt/R/$R_VERSION/bin/R -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' - /opt/R/$R_VERSION/bin/R -q -e 'packageVersion("bincraft")' - mkdir -p /mnt/cache/pkgcache /mnt/cache/R-pkgs /mnt/cache/ccache /mnt/cache/packages # options(future.globals.onReference = NULL): for some reason s3fs::file_delete() throws 'Error: Detected a non-exportable reference ('externalptr') in one of the globals ('FUN' of class 'function') used in the future expression' otherwise - - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, r_minor_detection = 'classifier', 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - - | - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2) - for RBIN in /opt/R/[0-9]*/bin/R; do - RV=$(basename "$(dirname "$(dirname "$RBIN")")") - RMINOR=$(echo "$RV" | cut -d. -f1-2) - [ "$RMINOR" = "$PRIMARY_MINOR" ] && continue - echo "=== R-minor-sensitive update pass under R $RV ===" - LIB="/mnt/cache/R-pkgs-$RMINOR" - mkdir -p "$LIB" - R_LIBS_USER="$LIB" "$(dirname "$RBIN")/R" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.2") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.2")' || true - R_LIBS_USER="$LIB" xvfb-run "$(dirname "$RBIN")/R" -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = FALSE, process_removed = FALSE, r_minor_detection = 'classifier', r_minor_sensitive_only = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" || true - done + - xvfb-run /opt/R/$R_VERSION/bin/R -q -e "options(crayon.enabled = TRUE, Ncpus = 4, future.globals.onReference = 'error', repos = structure(c(getOption('repos'),INLA='https://inla.r-inla-download.org/R/stable'))); progressr::handlers('cli'); progressr::handlers(global = TRUE); options(future.globals.onReference = NULL); bincraft::process_cran_updates(interval = $INTERVAL, platform = 'ubuntu-2404', process_updated = TRUE, process_new = TRUE, process_removed = TRUE, 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'), metadata_db_host = 'r-binaries.devxy.io', metadata_db_name = 'build_metadata', metadata_db_table = 'single_builds', metadata_db_user = 'rpkgs', metadata_db_password = Sys.getenv('PGPASS'), metadata_db_sslmode = 'require', metadata_db_port = 15432, archive = TRUE, upload = TRUE, store_build_metadata = TRUE)" - /opt/R/$R_VERSION/bin/R -q -e 'library(bincraft); 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"))' - - | - for RBIN in /opt/R/[0-9]*/bin/R; do - RMINOR=$(basename "$(dirname "$(dirname "$RBIN")")" | cut -d. -f1-2) - /opt/R/$R_VERSION/bin/R -q -e "library(bincraft); upload_package_index(codename = 'noble', r_minor = '$RMINOR', 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'))" || true - done - name: Purge CDN cache image: reg.devxy.io/docker.io/library/alpine:3.24 diff --git a/.crow/weekly-audit-missing-alpine-321-amd64.yaml b/.crow/weekly-audit-missing-alpine-321-amd64.yaml index 906ab7b..ef5a200 100644 --- a/.crow/weekly-audit-missing-alpine-321-amd64.yaml +++ b/.crow/weekly-audit-missing-alpine-321-amd64.yaml @@ -8,7 +8,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-audit-missing-alpine-321-arm64.yaml b/.crow/weekly-audit-missing-alpine-321-arm64.yaml index 41ad809..8099c57 100644 --- a/.crow/weekly-audit-missing-alpine-321-arm64.yaml +++ b/.crow/weekly-audit-missing-alpine-321-arm64.yaml @@ -8,7 +8,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-audit-missing-alpine-322-amd64.yaml b/.crow/weekly-audit-missing-alpine-322-amd64.yaml index 2ed0d81..75cd8c3 100644 --- a/.crow/weekly-audit-missing-alpine-322-amd64.yaml +++ b/.crow/weekly-audit-missing-alpine-322-amd64.yaml @@ -7,7 +7,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-audit-missing-alpine-322-arm64.yaml b/.crow/weekly-audit-missing-alpine-322-arm64.yaml index ef065e3..290c7aa 100644 --- a/.crow/weekly-audit-missing-alpine-322-arm64.yaml +++ b/.crow/weekly-audit-missing-alpine-322-arm64.yaml @@ -7,7 +7,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-audit-missing-alpine-323-amd64.yaml b/.crow/weekly-audit-missing-alpine-323-amd64.yaml index 9e613f6..15c761d 100644 --- a/.crow/weekly-audit-missing-alpine-323-amd64.yaml +++ b/.crow/weekly-audit-missing-alpine-323-amd64.yaml @@ -7,7 +7,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-audit-missing-alpine-323-arm64.yaml b/.crow/weekly-audit-missing-alpine-323-arm64.yaml index e0130c4..efa41be 100644 --- a/.crow/weekly-audit-missing-alpine-323-arm64.yaml +++ b/.crow/weekly-audit-missing-alpine-323-arm64.yaml @@ -7,7 +7,7 @@ skip_clone: true steps: - name: 'Audit missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: B2_S3_ACCESS_KEY: diff --git a/.crow/weekly-rebuild-missing-alpine-322-amd64.yaml b/.crow/weekly-rebuild-missing-alpine-322-amd64.yaml index e1559ea..b462f67 100644 --- a/.crow/weekly-rebuild-missing-alpine-322-amd64.yaml +++ b/.crow/weekly-rebuild-missing-alpine-322-amd64.yaml @@ -10,7 +10,7 @@ labels: steps: - name: 'Rebuild missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: RED_HAT_DEV_PW: diff --git a/.crow/weekly-rebuild-missing-alpine-322-arm64.yaml b/.crow/weekly-rebuild-missing-alpine-322-arm64.yaml index dcfc103..2c2d5af 100644 --- a/.crow/weekly-rebuild-missing-alpine-322-arm64.yaml +++ b/.crow/weekly-rebuild-missing-alpine-322-arm64.yaml @@ -10,7 +10,7 @@ labels: steps: - name: 'Rebuild missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.22 pull: true environment: RED_HAT_DEV_PW: diff --git a/.crow/weekly-rebuild-missing-alpine-323-amd64.yaml b/.crow/weekly-rebuild-missing-alpine-323-amd64.yaml index 4cbe013..67ee77d 100644 --- a/.crow/weekly-rebuild-missing-alpine-323-amd64.yaml +++ b/.crow/weekly-rebuild-missing-alpine-323-amd64.yaml @@ -10,7 +10,7 @@ labels: steps: - name: 'Rebuild missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: RED_HAT_DEV_PW: diff --git a/.crow/weekly-rebuild-missing-alpine-323-arm64.yaml b/.crow/weekly-rebuild-missing-alpine-323-arm64.yaml index 9886707..2abd6c3 100644 --- a/.crow/weekly-rebuild-missing-alpine-323-arm64.yaml +++ b/.crow/weekly-rebuild-missing-alpine-323-arm64.yaml @@ -10,7 +10,7 @@ labels: steps: - name: 'Rebuild missing binaries' - image: reg.devxy.io/rpkgs/build-env-alpine:3.24 + image: reg.devxy.io/rpkgs/build-env-alpine:3.23 pull: true environment: RED_HAT_DEV_PW: diff --git a/.editorconfig b/.editorconfig index 82fac74..734c5ee 100644 --- a/.editorconfig +++ b/.editorconfig @@ -11,10 +11,6 @@ insert_final_newline = true [*.md] trim_trailing_whitespace = false -# Markdown code fences hold verbatim content (logs, snippets) whose -# indentation must not be forced to the source indent rules. -indent_style = unset -indent_size = unset # Ignore paths [/collections/ansible_collections/community/**] diff --git a/.editorconfig-checker.json b/.editorconfig-checker.json deleted file mode 100644 index f7abef3..0000000 --- a/.editorconfig-checker.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Exclude": ["^LICENSE\\.md$", "^benchmark/", "^docker/reprex/"] -} diff --git a/.markdownlint-cli2.yaml b/.markdownlint-cli2.yaml deleted file mode 100644 index 66e7cc8..0000000 --- a/.markdownlint-cli2.yaml +++ /dev/null @@ -1,4 +0,0 @@ -# Rules live in .markdownlint.yaml; this file only sets cli2 options. -ignores: - - LICENSE.md - - docs/superpowers/** diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 6784ad2..0000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,45 +0,0 @@ -# cSpell:ignore autofix autoupdate -# Excluded: verbatim GPL license and auxiliary shell scripts with intentional -# in-string formatting (reformatting would corrupt their output). -exclude: | - (?x)^( - LICENSE\.md| - benchmark/| - docker/reprex/ - ) -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v6.0.0 - hooks: - - id: end-of-file-fixer - - id: trailing-whitespace - args: - - --markdown-linebreak-ext=md - - repo: https://github.com/DavidAnson/markdownlint-cli2 - rev: v0.22.1 - hooks: - - id: markdownlint-cli2 - - repo: https://github.com/rbubley/mirrors-prettier - rev: v3.8.4 - hooks: - - id: prettier - - repo: https://github.com/posit-dev/air-pre-commit - rev: 0.9.0 - hooks: - - id: air-format - - repo: https://github.com/editorconfig-checker/editorconfig-checker - rev: v3.7.0 - hooks: - - id: editorconfig-checker - - repo: https://github.com/adrienverge/yamllint.git - rev: v1.38.0 - hooks: - - id: yamllint - args: [--strict, -c=.yamllint.yaml] - - repo: local - hooks: - - id: yaml-file-extension - name: Check if YAML files has *.yaml extension. - entry: YAML filenames must have .yaml extension. - language: fail - files: .yml$ diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 0e4b780..0000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -LICENSE.md diff --git a/.terraform.lock.hcl b/.terraform.lock.hcl index 2ae039e..1f15eb6 100644 --- a/.terraform.lock.hcl +++ b/.terraform.lock.hcl @@ -38,43 +38,43 @@ provider "registry.opentofu.org/hashicorp/http" { } provider "registry.terraform.io/bunnyway/bunnynet" { - version = "0.14.3" + version = "0.14.2" constraints = "~> 0.14" hashes = [ - "h1:2VmbbvV/3fVb/dHZ5m3CxSPoptpn/PuhvSgV/RA9Ae8=", - "h1:4MANuttWPyJGZlfbx5P4i2Jpbmvda1tfWgd3olK2nhY=", - "h1:AsSfDvm6flYQgjFnFVaRPv7v1/P5pj36dQ4N103Nw+A=", - "h1:D2AK5psWQmZqrOHsbeV70OP/zcG92i++AmGKBz/HVMA=", - "h1:DpJWi/bhHoZa/ccy2YB/c7HJjTlR6CuZBxGFCxU2uJk=", - "h1:Iz47FCzHBOZC1RrTxKwJwKsH6bdEvdYtO0+RBpbmz8I=", - "h1:RJQm4qEfljAmcJaFf45uXwUhtbRTwfDuiUWZ6Q7X+Cw=", - "h1:YQBi0MRW+dOfkxQYbjKkzDm7UIcc2FeFm8Cck+W3kgs=", - "h1:bWq/zJ2Chr5TNuz9y3eaGmzrmXsX30pl5HkGpxE1kVM=", - "h1:hwzEskDnFHaJFvKNAGv/wIxRT2SHcXLfwmBb8XNspq4=", - "h1:jGggry0lZmG0S0inM7Odae3275na9Gp3O97ZlvBiA2s=", - "h1:mJdpVc9qOpqXcPpptWfAET8qloo6qFMb+NzHesazybk=", - "h1:nbpkaopSGlmxkKLtNe9sKx9IqojoicD1+hNRdaYd5ok=", - "h1:pwuoUqikuVOut3RtPTnu6pNoDnyeXlEX7Rfb2Hr1Ch0=", - "h1:u0naFiWGrBVhI3AsUb/ZfS5N/GeiRk0ZkxjHtA10lF0=", - "h1:uozoSPzZ7MJIHj5O62W8n86NIfH4JtF7GvMNI6rKlrM=", - "h1:vDS308OeXVVgjojMCAAEQ1VshmOLjwra7obliKB5fv8=", - "zh:23200ad919df4c44a720c667c536d3a0ae0c235e1f7b53b9e56f88005bf01891", - "zh:2fe5445f578c6a244995538fde6dd7ef0dd5f3969686cba3d91fcf28ea31278d", - "zh:3a5a8139ed177ccbee74feb4d19c881e18723e4bf3a64b6d35931420402a2a1a", - "zh:5189bd6c03ec3c428185992f519f3bf520d4e9eba8771c240814adbecdf60140", - "zh:532ac8eb94a84ccf046d4cb4eded825269effdbb7597f392f848fbfad5dcae1d", - "zh:5f100279d73ce998c7bf4ffa2bbcd617ee307bf51c4a94146f210aeec268c4d0", - "zh:80cb58abd2e431386ab1b6ad186a6e6e5347448993bacc831c0251b9016445b9", + "h1:/83HKJVEe5PlXxETNi3QYL0Tp9CkKZ6WS7IUhGG/OYU=", + "h1:3DUcGLigdB+8Bu8hh82yoLV+5m2zjrr5HC/QwG56aAY=", + "h1:7q5hf9ODMChDRsDKGJwv8EIlr5vzh3YlZjr3eEzkqN4=", + "h1:APYf6Y7TVdn8lU9C0aR2f1aUnLe652B4HRS9NOMMous=", + "h1:DmE7sOE8wrkYUsGDhUwhonG1LHJZS73IfkzNyACCJJM=", + "h1:K1OeDvRN2GuLjtwCIYuJXpXQYNaaPPknI165CTFyy9c=", + "h1:WPM2ucudI9tm75UoGc0rH9ZM0eKlhTGz5sgO3k4iN7E=", + "h1:WSOCqiEhlK450HYNKwMlUeI5O9inuCaNX5teWZUV/vw=", + "h1:XqaxnjsTBPtiqvHdTjEa0IVgMO+FZhcBxcqE1ALFNzI=", + "h1:YYoBZijn79PiwrIBwv/kb3PP0HzLm3SUxBIzwiuOots=", + "h1:enK6/t/ETDf4iNMrHygg2w9W//K/L0E4lML/bK+kLVc=", + "h1:gOEm/6/hbrg9BWOrsdHSB/GgZcma5zfytEbEDchDj/k=", + "h1:pQ9zZXoKrZRFcUj0OLRFnJK0P/PgY5S+4TpiqbRR5hA=", + "h1:qXl1v7FweyP8/DuzrQIh7LxDbWsWUo+u/wzqB0A93EU=", + "h1:vTuPTvNy3Y/SpmQqnNE1xSEjEoaJYc0b33+tl7q19Gg=", + "h1:wlS2vpTqH0PG85MPk/N1Q9CmtH+jL4pRjXLAkubSOK4=", + "h1:yuwpqTkuqKNwhwEDIOeJdzISZZxECxMiboDUqNHby6Y=", + "zh:019a5c9d068133d0414ab5cf043814a592b1b80f1dcc4afac5ee35d2c43e2409", + "zh:07ba98c56711b584f28dfe7eaea4bbb803ce0e0d7b793b06bb9c6e8ac8358a25", + "zh:0c0e2c343d047221dd0c3f99df6e24ff23e5c982507b634c8e5ed0bf654be2a0", + "zh:0efbabcec9d2bd802bc2cb043e4e7ca7be35716fcec890893b6847fdd7afd05b", + "zh:26a17d31655d45cefab9e1fa76cfb9189eb88d65ce8b3d9922a81f5d2345117e", + "zh:29b3c2447bf202ca33866f724dbe4da28be1e0c988531cd79428cba3ef42b838", + "zh:2bfb3f49610874cb44b2e4122e56a5048b634ef9461c1d02baff81e3c3f9dd91", + "zh:4a6f1db14163c0005eb04eafe1c395d662030a04856e1d08de68623f67c61d59", + "zh:5030883e81c4a2b4a1091cb40d18457dd4de72ce95907c2508184c8df289337f", + "zh:561c6104fd529ccc1da106ed4a8c54ab953f00f5cd0bfec737561c0756639734", + "zh:75eb1fc005852002dd42d3369672db93b423306ccf7b271c4d4c5c372b4924d0", + "zh:7775c4c1663af6f07efe9c0bbabeb66117bb734c1d21fb7e1358f29a18482baa", "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", - "zh:9ac734c6aae19ea0832269f1f1dc3c3e100855c09b6168eecd8693958515b228", - "zh:a0e3b75176c71e5f41a6552cef57ad67d11778cb59fd2eb792e69f662b67ae01", - "zh:b4d0e1dd9a80d1ac9a3f1beaefb58d4b944cb0a30bdc672b9037a69b4dc20ec3", - "zh:b8309337e966528991cc2dd61ff0247864e4c3c7bef7dcf225f066edb6171050", - "zh:c34ce5fcdd481214697505bceb616a7dfcda7702f1afefa7dc5459965b8e01ca", - "zh:cb3f662ad06bb86aa763a5644ba318bc3db0ed30b04eb810c478e81f4b012d55", - "zh:cf0f0a459e2b6b1e014af9f53f32b5f555a249b61a0dcaccd3e4fe89178d8aa5", - "zh:d4dfb653a0295bfbbebcb4bb022b490f2c24ca31287ebf77fe9dcaee2e5ea658", - "zh:e49ba31aa092a30ea8a1091f7b26dbe41c3998f924f5b0d82810f27fc2f63501", - "zh:ea4d7d5688caf2f9cda3a1721779b61a051db6b43ca7267ae2712bd1262cfcfd", + "zh:c22bf8a5bb54c67531f944a15383ef6821ef3073e3036e05a2a8253c3e030443", + "zh:d1be91e623365a81203dbafedaf908d2cffd70ddedda3e2da6258fd227176086", + "zh:f7c9920523f9e82c1fee0c3d6ec2872eb322ddadf8af4ffff41d8fca397922e7", + "zh:f95f455cfdda5ad7f972606a6eaaa2a2a4efb1c3e4c0f7fc55631928266311c4", + "zh:fbfab962729139dcd6ac9529f395be296febcb2aba9017733f58cd1e9c186802", ] } diff --git a/.yamllint.yaml b/.yamllint.yaml deleted file mode 100644 index d0370a3..0000000 --- a/.yamllint.yaml +++ /dev/null @@ -1,19 +0,0 @@ -rules: - comments: - require-starting-space: false - ignore-shebangs: true - min-spaces-from-content: 1 - braces: - min-spaces-inside-empty: 0 - max-spaces-inside-empty: 0 - min-spaces-inside: 0 - max-spaces-inside: 1 - document-start: - present: false - indentation: - spaces: 2 - indent-sequences: true - # .crow/* workflows embed long single-line R commands (>1k chars) - line-length: disable - new-lines: - type: unix diff --git a/README.md b/README.md index 278a475..fd03609 100644 --- a/README.md +++ b/README.md @@ -186,19 +186,19 @@ Below is a collection of raw errors observed during the build process:
-```text +``` * installing to library '/tmp/Rtmp7WPw19/temp_libpath114b846b58'\n* installing *source* package 'ade4' ...\n** using staged installation\nERROR: a 'NAMESPACE' file is required\n* removing '/tmp/Rtmp7WPw19/temp_libpath114b846b58/ade4'\n" ``` Tag does not have a NAMESPACE file and hence cannot be built. -```text +``` "* installing to library '/tmp/RtmpLcCitS/temp_libpath1146aabbe92'\nERROR: dependency 'tripack' is not available for package 'alphahull'\n* removing '/tmp/RtmpLcCitS/temp_libpath1146aabbe92/alphahull'\n" ``` Dependency not available: Either because the dependency was not declared or errored itself during installation. -```text +``` In function '\033[01m\033[KRcpp::List solveRRBLUP(const mat&, const mat&, const mat&)\033[m\033[K':\n\033[01m\033[KMME.cpp:162:61:\033[m\033[K \033[01;31m\033[Kerror: \033[m\033[K'\033[01m\033[KPI\033[m\033[K' was not declared in this scope\n 162 | double ll = -0.5*(double(optRes[\"objective\"])+df+df*log(2*\033[01;31m\033[KPI\033[m\033[K/df));\n | \033[01;31m\033[K^~\033[m\033[K\n\033[01m\033[KMME.cpp:\033[m\033[K In function '\033[01m\033[KRcpp::List solveRRBLUPMV(const mat&, const mat&, const mat&, int, double)\033[m\033[K':\n\033[01m\033[KMME.cpp:277:31:\033[m\033[K \033[01;31m\033[Kerror: \033[m\033[K'\033[01m\033[KPI\033[m\033[K' was not declared in this scope; did you mean '\033[01m\033[KHI\033[m\033[K'?\n 277 | ll -= double(n*m)/2.0*log(2*\033[01;31m\033[KPI\033[m\033[K);\n | \033[01;31m\033[K^~\033[m\033[K\n | \033[32m\033[KHI\033[m\033[K\nmake: *** [/opt/R/4.4.1/lib/R/etc/Makeconf:204: MME.o] Error 1\nERROR: compilation failed for package 'AlphaSimR'\n* removing '/tmp/RtmpclI5CE/temp_libpath11135d215d5/AlphaSimR'\n ``` @@ -230,26 +230,26 @@ For others it might be due to exotic external dependencies which require manual Help in resolving these issues are highly welcome! -| Name | Platform | Arch | Reason | Date Created | Date Solved | -| ------------- | -------------- | ------- | -------------------------------- | ------------ | ----------- | -| Apollonius | redhat-8 | | gmp missing | 2024-11-15 | | -| doBy | alpine-320 | amd | hangs | 2024-11-23 | | -| later | ubuntu 22 & 24 | amd | hangs for early versions - xfvb? | 2024-11-23 | | -| CoTiMA | ubuntu 22 & 24 | amd | OOM? | 2024-11-23 | | -| FrF2 | alpine | arm | hangs | 2024-11-23 | | -| FrF2.catlg128 | alpine | arm | hangs | 2024-11-23 | | -| DoE.base | alpine | arm/amd | hangs | 2024-11-23 | | -| eha | alpine | amd | hangs | 2024-11-23 | | -| gRain | alpine | amd | hangs | 2024-11-23 | | -| gRbase | alpine | amd | hangs | 2024-11-24 | | -| IDPmisc | alpine | amd | hangs | 2024-11-24 | | -| RVAideMemoire | alpine | amd | hangs | 2024-11-25 | | -| pbkrtest | alpine | arm | hangs | 2024-11-25 | | -| seewave | alpine | arm | hangs | 2024-11-25 | | -| spdep | alpine | arm | hangs | 2024-12-03 | | -| compareGroups | alpine | arm | hangs | 2024-12-11 | | -| SNPassoc | alpine | arm | hangs | 2024-12-11 | | -| surveillance | alpine | arm | hangs | 2024-12-13 | | +| Name | Platform | Arch | Reason | Solved via | Date Created | Date Solved | +| ------------- | -------------- | ------- | -------------------------------- | ---------- | ------------ | ----------- | +| Apollonius | redhat-8 | | gmp missing | 2024-11-15 | | +| doBy | alpine-320 | amd | hangs | 2024-11-23 | | +| later | ubuntu 22 & 24 | amd | hangs for early versions - xfvb? | 2024-11-23 | | +| CoTiMA | ubuntu 22 & 24 | amd | OOM? | 2024-11-23 | | +| FrF2 | alpine | arm | hangs | 2024-11-23 | | +| FrF2.catlg128 | alpine | arm | hangs | 2024-11-23 | | +| DoE.base | alpine | arm/amd | hangs | 2024-11-23 | | +| eha | alpine | amd | hangs | 2024-11-23 | | +| gRain | alpine | amd | hangs | 2024-11-23 | | +| gRbase | alpine | amd | hangs | 2024-11-24 | | +| IDPmisc | alpine | amd | hangs | 2024-11-24 | | +| RVAideMemoire | alpine | amd | hangs | 2024-11-25 | | +| pbkrtest | alpine | arm | hangs | 2024-11-25 | | +| seewave | alpine | arm | hangs | 2024-11-25 | | +| spdep | alpine | arm | hangs | 2024-12-03 | | +| compareGroups | alpine | arm | hangs | 2024-12-11 | | +| SNPassoc | alpine | arm | hangs | 2024-12-11 | | +| surveillance | alpine | arm | hangs | 2024-12-13 | | ## CDN Settings diff --git a/docker/build-one.Dockerfile b/docker/build-one.Dockerfile deleted file mode 100644 index 2cd4d51..0000000 --- a/docker/build-one.Dockerfile +++ /dev/null @@ -1,65 +0,0 @@ -# syntax=docker/dockerfile:1 -# Targeted (re)build of specific package versions, executed on a remote buildx -# builder. The build's effect is the S3 upload performed by build-one.R; no -# image is kept (the justfile uses --output type=cacheonly). CACHEBUST forces -# the RUN to re-execute on every invocation. -# -# Build context is `local/` (see the `rebuild` recipe in the justfile). -ARG OS -ARG OS_VERSION -FROM reg.devxy.io/rpkgs/build-env-${OS}:${OS_VERSION} - -ARG R_VERSION=4.5.3 -ARG PACKAGE -ARG VERSIONS -ARG CACHEBUST - -WORKDIR /work -COPY build-one.R /work/build-one.R - -RUN --mount=type=secret,id=b2_access,required=true \ - --mount=type=secret,id=b2_secret,required=true \ - --mount=type=secret,id=pgpass,required=true \ - --mount=type=secret,id=github_pat,required=false \ - export B2_S3_ACCESS_KEY="$(cat /run/secrets/b2_access)" && \ - export B2_S3_SECRET_KEY="$(cat /run/secrets/b2_secret)" && \ - export PGPASS="$(cat /run/secrets/pgpass)" && \ - export GITHUB_PAT="$(cat /run/secrets/github_pat 2>/dev/null || true)" && \ - export GIT_TERMINAL_PROMPT=0 && \ - export OTEL_SDK_DISABLED=true && \ - XVFB=$(command -v xwfb-run 2>/dev/null || command -v xvfb-run || true); \ - XVFB_ARGS=""; \ - if command -v xwfb-run >/dev/null 2>&1; then dnf install -y -q weston 2>/dev/null; XVFB_ARGS="-c weston"; fi; \ - USE_XVFB=0; \ - if [ -n "$XVFB" ] && $XVFB -a $XVFB_ARGS -- true >/dev/null 2>&1; then \ - USE_XVFB=1; echo "Using virtual display via $XVFB"; \ - else \ - echo "No working virtual display; building without xvfb" >&2; \ - fi; \ - run_build() { if [ "$USE_XVFB" = 1 ]; then $XVFB -a $XVFB_ARGS -- "$@"; else "$@"; fi; }; \ - ensure_bincraft() { "$1" -q -e 'if (!requireNamespace("bincraft", quietly = TRUE) || packageVersion("bincraft") != "4.2.1") pak::pak("git::https://codefloe.com/rpkgs/bincraft.git@v4.2.1")'; }; \ - PRIMARY_MINOR=$(echo "$R_VERSION" | cut -d. -f1-2); \ - seen=" $PRIMARY_MINOR "; \ - prc=0; failed=""; \ - rm -f .r_minor_sensitive; \ - echo "=== primary pass under R $R_VERSION ==="; \ - ensure_bincraft /opt/R/${R_VERSION}/bin/R; \ - run_build /opt/R/${R_VERSION}/bin/Rscript /work/build-one.R "${PACKAGE}" ${VERSIONS} || prc=$?; \ - if [ -f .r_minor_sensitive ]; then \ - for RBIN in /opt/R/*/bin/Rscript; do \ - [ -x "$RBIN" ] || continue; \ - RV=$(basename "$(dirname "$(dirname "$RBIN")")"); \ - case "$RV" in [0-9]*) ;; *) continue ;; esac; \ - RMINOR=$(echo "$RV" | cut -d. -f1-2); \ - case "$seen" in *" $RMINOR "*) continue ;; esac; \ - seen="$seen$RMINOR "; \ - echo "=== sensitive-only pass under R $RV ==="; \ - ensure_bincraft "$(dirname "$RBIN")/R"; \ - run_build "$RBIN" /work/build-one.R --sensitive-only "${PACKAGE}" ${VERSIONS} || failed="$failed $RV"; \ - done; \ - else \ - echo "Package not r-minor-sensitive; skipping per-minor passes."; \ - fi; \ - if [ -n "$failed" ]; then echo "WARNING: extra-minor build(s) failed (non-fatal; e.g. a version too old to compile on a newer R):$failed" >&2; fi; \ - if [ "$prc" != 0 ]; then echo "primary pass under R $R_VERSION failed (exit $prc)" >&2; fi; \ - exit "$prc" diff --git a/justfile b/justfile deleted file mode 100644 index 2d9388d..0000000 --- a/justfile +++ /dev/null @@ -1,73 +0,0 @@ -# Local helpers for build-cran-binaries. -# -# `rebuild` (re)builds specific versions of a single package on a given OS/arch -# by dispatching to a remote buildx builder (the build runs there, not locally). -# Sensitivity is auto-detected: risky packages land in the per-minor slot -# (contrib//), everything else in the generic slot; the touched index is -# refreshed so the result is immediately servable. -# -# Prerequisites: -# - buildx builders named `artemis` (amd64) and `gaia` (arm64), created with the -# docker-container driver (runs BuildKit on the remote host's docker daemon over -# SSH). The default `remote` driver does NOT work with an ssh:// docker host. -# docker buildx create --name artemis --driver docker-container ssh:// -# docker buildx create --name gaia --driver docker-container ssh:// -# - exported secrets: B2_S3_ACCESS_KEY, B2_S3_SECRET_KEY, PGPASS (GITHUB_PAT optional) -# -# Overridable (env or `just VAR=… rebuild …`): -# R_VERSION (default 4.5.3) — selects the R minor → the per-minor slot -# AMD64_BUILDER / ARM64_BUILDER — buildx builder names -# -# Examples: -# just rebuild alpine 3.23 amd64 rlang 1.1.4 1.1.3 -# just rebuild redhat 10 arm64 data.table 1.15.4 -# R_VERSION=4.4.3 just rebuild ubuntu noble amd64 Rcpp 1.0.12 - -r_version := env_var_or_default("R_VERSION", "4.5.3") -amd64_builder := env_var_or_default("AMD64_BUILDER", "artemis") -arm64_builder := env_var_or_default("ARM64_BUILDER", "gaia") - -# (re)build PACKAGE at one or more VERSIONS on OS/TAG/ARCH via a remote builder -rebuild os tag arch package *versions: - #!/usr/bin/env bash - set -euo pipefail - if [ -z "{{ versions }}" ]; then - echo "error: provide at least one version, e.g. just rebuild alpine 3.23 amd64 rlang 1.1.4" >&2 - exit 1 - fi - case "{{ arch }}" in - amd64) builder="{{ amd64_builder }}" ;; - arm64) builder="{{ arm64_builder }}" ;; - *) echo "error: arch must be 'amd64' or 'arm64'" >&2; exit 1 ;; - esac - # Accept TF_VAR_-prefixed names (direnv) or plain names. - export B2_S3_ACCESS_KEY="${B2_S3_ACCESS_KEY:-${TF_VAR_B2_S3_ACCESS_KEY:-}}" - export B2_S3_SECRET_KEY="${B2_S3_SECRET_KEY:-${TF_VAR_B2_S3_SECRET_KEY:-}}" - : "${B2_S3_ACCESS_KEY:?set B2_S3_ACCESS_KEY or TF_VAR_B2_S3_ACCESS_KEY}" - : "${B2_S3_SECRET_KEY:?set B2_S3_SECRET_KEY or TF_VAR_B2_S3_SECRET_KEY}" - : "${PGPASS:?set PGPASS}" - secret_args=( - --secret id=b2_access,env=B2_S3_ACCESS_KEY - --secret id=b2_secret,env=B2_S3_SECRET_KEY - --secret id=pgpass,env=PGPASS - ) - # GITHUB_PAT is optional (raises the GitHub API rate limit); pass only if set. - if [ -n "${GITHUB_PAT:-}" ]; then - secret_args+=(--secret id=github_pat,env=GITHUB_PAT) - fi - echo "Dispatching build of {{ package }} ({{ versions }}) on {{ os }}:{{ tag }}/{{ arch }} (R {{ r_version }}) to builder '$builder'" - docker buildx build \ - --builder "$builder" \ - --platform "linux/{{ arch }}" \ - --no-cache \ - --progress=plain \ - --output type=cacheonly \ - "${secret_args[@]}" \ - --build-arg OS="{{ os }}" \ - --build-arg OS_VERSION="{{ tag }}" \ - --build-arg R_VERSION="{{ r_version }}" \ - --build-arg PACKAGE="{{ package }}" \ - --build-arg VERSIONS="{{ versions }}" \ - --build-arg CACHEBUST="$(date +%s)" \ - -f docker/build-one.Dockerfile \ - local diff --git a/local/archive-missed-pkgs.R b/local/archive-missed-pkgs.R index f817c3e..57e92d7 100644 --- a/local/archive-missed-pkgs.R +++ b/local/archive-missed-pkgs.R @@ -11,34 +11,16 @@ s3fs::s3_file_system( arch = "arm64" os = "alpine321" -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/%s/%s/latest/src/contrib", - arch, - os -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/%s/%s/latest/src/contrib", arch, os)) length(unique(sapply(strsplit(basename(files), "_"), function(x) x[1]))) -non_archived = unique(sapply(strsplit(basename(files), "_"), function(x) { - x[1] -})[duplicated(sapply(strsplit(basename(files), "_"), function(x) x[1]))]) +non_archived = unique(sapply(strsplit(basename(files), "_"), function(x) x[1])[duplicated(sapply(strsplit(basename(files), "_"), function(x) x[1]))]) # RInno is not built because it only exists for Windows non_archived = setdiff(non_archived, "RInno") # future::plan("sequential", workers = 8) future::plan("sequential", workers = 1) # future.apply::future_lapply(non_archived, function(x) archive_package(x, codename = os, arch = arch)) -lapply(non_archived, function(x) { - archive_package( - x, - codename = os, - arch = arch, - s3_region = "hel1", - s3_endpoint = "https://hel1.your-objectstorage.com", - s3_bucket = "devxy-r-package-binaries-hel1", - s3_access_key_id = Sys.getenv( - "HETZNER_S3_ACCESS_KEY_K3S", - s3_secret_access_key = Sys.getenv("HETZNER_S3_SECRET_KEY_K3S") - ) - ) -}) +lapply(non_archived, function(x) archive_package(x, codename = os, arch = arch, s3_region = "hel1", s3_endpoint = "https://hel1.your-objectstorage.com", s3_bucket = "devxy-r-package-binaries-hel1", s3_access_key_id = Sys.getenv("HETZNER_S3_ACCESS_KEY_K3S", s3_secret_access_key = Sys.getenv("HETZNER_S3_SECRET_KEY_K3S")))) # archive_package() + # grep("duckdb_", files, value = T) diff --git a/local/build-all.R b/local/build-all.R index 8ce1cd5..d46e27a 100644 --- a/local/build-all.R +++ b/local/build-all.R @@ -1,13 +1,10 @@ sink(stdout(), type = "message") options(crayon.enabled = TRUE, future.globals.onReference = NULL) -source(file.path("local", "r-minor-helpers.R")) args <- commandArgs(trailingOnly = TRUE) -parsed <- parse_build_args(args) -split_into <- parsed$split_into -split_index <- parsed$split_index -ncpus <- parsed$ncpus -sensitive_only <- parsed$sensitive_only +split_into <- as.integer(args[1]) +split_index <- as.integer(args[2]) +ncpus <- as.integer(args[3]) options(Ncpus = ncpus) # Load bincraft eagerly to avoid lazy-load memory spike during first build call @@ -15,20 +12,9 @@ library(bincraft, quietly = TRUE) library(future) plan("sequential") -pkgs <- if (sensitive_only) { - readRDS("/mnt/cache/packages/r_minor_sensitive_pkgs.rds") -} else { - readRDS("/mnt/cache/packages/pkgs_to_build.rds") -} -# Back-compat: tolerate an older RDS without the column (treat all as non-sensitive) -if (is.null(pkgs$r_minor_sensitive)) { - pkgs$r_minor_sensitive <- FALSE -} -sprintf( - "Total# of remaining package versions: %s (sensitive_only=%s)", - nrow(pkgs), - sensitive_only -) +# Read precomputed package+version pairs +pkgs <- readRDS("/mnt/cache/packages/pkgs_to_build.rds") +sprintf("Total# of remaining package versions: %s", nrow(pkgs)) # Split into chunks for this worker chunks <- split(pkgs, cut(seq_len(nrow(pkgs)), split_into, labels = FALSE)) @@ -71,33 +57,26 @@ s3_cache <- readRDS("/mnt/cache/packages/s3_cache.rds") sprintf("S3 cache: %s files", length(s3_cache)) n <- nrow(chunk) -mapply( - function(pkg, ver, sens, i) { - cat(sprintf("[%d/%d] %s_%s (r_minor_sensitive=%s)\n", i, n, pkg, ver, sens)) - bincraft::build_binary_package( - pkg, - tag = ver, - is_r_minor_sensitive = isTRUE(sens), - 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"), - s3_package_cache = s3_cache, - metadata_db_host = "r-binaries.devxy.io", - metadata_db_name = "build_metadata", - metadata_db_table = "single_builds", - metadata_db_user = "rpkgs", - metadata_db_password = Sys.getenv("PGPASS"), - metadata_db_sslmode = "require", - metadata_db_port = 15432, - archive = TRUE, - upload = TRUE, - store_build_metadata = TRUE - ) - }, - chunk$Package, - chunk$Version, - chunk$r_minor_sensitive, - seq_len(n) -) +mapply(function(pkg, ver, i) { + cat(sprintf("[%d/%d] %s_%s\n", i, n, pkg, ver)) + bincraft::build_binary_package( + pkg, + tag = ver, + 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"), + s3_package_cache = s3_cache, + metadata_db_host = "r-binaries.devxy.io", + metadata_db_name = "build_metadata", + metadata_db_table = "single_builds", + metadata_db_user = "rpkgs", + metadata_db_password = Sys.getenv("PGPASS"), + metadata_db_sslmode = "require", + metadata_db_port = 15432, + archive = TRUE, + upload = TRUE, + store_build_metadata = TRUE + ) +}, chunk$Package, chunk$Version, seq_len(n)) diff --git a/local/build-one.R b/local/build-one.R deleted file mode 100644 index f2d6ebd..0000000 --- a/local/build-one.R +++ /dev/null @@ -1,163 +0,0 @@ -# Targeted (re)build of specific versions of a single package. -# Invoked inside a build-env container (see docker/build-one.Dockerfile). -# Usage: build-one.R [--sensitive-only] [ ...] -# Sensitivity is auto-detected per version via bincraft's ABI classifier: -# risky packages go to the per-minor slot, everything else to the generic slot. -# With --sensitive-only, non-risky versions are skipped (used for the extra -# per-minor passes under non-primary R versions). - -options(crayon.enabled = TRUE, future.globals.onReference = NULL) - -args <- commandArgs(trailingOnly = TRUE) -sensitive_only <- "--sensitive-only" %in% args -args <- args[args != "--sensitive-only"] -if (length(args) < 2L) { - stop( - "usage: build-one.R [--sensitive-only] [ ...]", - call. = FALSE - ) -} -package <- args[1L] -versions <- args[-1L] - -library(bincraft, quietly = TRUE) - -s3 <- list( - 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") -) - -# Clone the CRAN source for a version and ask the ABI classifier whether it -# must be rebuilt per R minor. Fails safe to TRUE so a possibly-fragile binary -# is never served from the cross-minor generic slot by mistake. -classify <- function(pkg, ver) { - dest <- file.path(tempdir(), sprintf("classify_%s_%s", pkg, ver)) - on.exit(unlink(dest, recursive = TRUE, force = TRUE), add = TRUE) - tryCatch( - { - message(sprintf( - "[classify] cloning %s@%s from github.com/cran ...", - pkg, - ver - )) - system2( - "git", - c( - "clone", - "--depth", - "1", - "--branch", - ver, - sprintf("https://github.com/cran/%s", pkg), - dest - ) - ) - message(sprintf("[classify] running ABI classifier on %s ...", pkg)) - isTRUE(as.logical(bincraft::needs_per_minor_recompile(dest))) - }, - error = function(e) { - message(sprintf( - "classify failed for %s %s: %s; treating as r-minor-sensitive", - pkg, - ver, - conditionMessage(e) - )) - TRUE - } - ) -} - -minor <- paste( - R.version$major, - strsplit(R.version$minor, ".", fixed = TRUE)[[1L]][1L], - sep = "." -) -touched_generic <- FALSE -touched_minor <- FALSE - -for (ver in versions) { - sensitive <- classify(package, ver) - if (sensitive_only && !sensitive) { - message(sprintf( - "Skipping %s %s under R %s (not r-minor-sensitive)", - package, - ver, - minor - )) - next - } - cat(sprintf( - "Building %s %s (r_minor_sensitive=%s, R %s)\n", - package, - ver, - sensitive, - minor - )) - bincraft::build_binary_package( - package, - tag = ver, - is_r_minor_sensitive = sensitive, - force = TRUE, - upload = TRUE, - archive = TRUE, - store_build_metadata = TRUE, - s3_endpoint = s3$s3_endpoint, - s3_region = s3$s3_region, - s3_bucket = s3$s3_bucket, - s3_access_key_id = s3$s3_access_key_id, - s3_secret_access_key = s3$s3_secret_access_key, - metadata_db_host = "r-binaries.devxy.io", - metadata_db_name = "build_metadata", - metadata_db_table = "single_builds", - metadata_db_user = "rpkgs", - metadata_db_password = Sys.getenv("PGPASS"), - metadata_db_sslmode = "require", - metadata_db_port = 15432 - ) - if (sensitive) touched_minor <- TRUE else touched_generic <- TRUE -} - -# Signal the container wrapper whether per-minor passes are warranted (a single -# package's sensitivity is the same across R minors, so a non-sensitive package -# need not touch any other minor's library). -if (touched_minor) { - file.create(".r_minor_sensitive") -} - -# Refresh the PACKAGES index for each slot we wrote to, so the (re)built binary -# is immediately resolvable by clients. -codename <- bincraft::set_codename(NULL) -# cranlike keeps a working PACKAGES.db in the CWD; clear any copy left by a -# previous pass so each per-slot index is built fresh. Otherwise the 2nd index -# update in the same container fails with "table packages already exists". -clean_index_workdir <- function() { - unlink(c("PACKAGES", "PACKAGES.gz", "PACKAGES.rds", "PACKAGES.db")) -} -if (touched_generic) { - cat("Refreshing generic index\n") - clean_index_workdir() - bincraft::upload_package_index( - codename = codename, - s3_endpoint = s3$s3_endpoint, - s3_region = s3$s3_region, - s3_bucket = s3$s3_bucket, - s3_access_key_id = s3$s3_access_key_id, - s3_secret_access_key = s3$s3_secret_access_key - ) -} -if (touched_minor) { - cat(sprintf("Refreshing per-minor index %s\n", minor)) - clean_index_workdir() - bincraft::upload_package_index( - codename = codename, - r_minor = minor, - s3_endpoint = s3$s3_endpoint, - s3_region = s3$s3_region, - s3_bucket = s3$s3_bucket, - s3_access_key_id = s3$s3_access_key_id, - s3_secret_access_key = s3$s3_secret_access_key - ) -} diff --git a/local/check-NA.R b/local/check-NA.R index 95c158e..7405db4 100644 --- a/local/check-NA.R +++ b/local/check-NA.R @@ -1,3 +1,4 @@ + ### Scope: Check whether there are any incomplete entries in PACKAGES.rds. These will result in NA when calling available.packages() foo = available.packages("https://cran.devxy.io/amd64/jammy/latest/src/contrib") sum((is.na(foo[, "Version"]))) @@ -16,9 +17,7 @@ foo = available.packages("https://cran.devxy.io/amd64/rhel9/latest/src/contrib") sum((is.na(foo[, "Version"]))) which((is.na(foo[, "Version"]))) -foo = available.packages( - "https://cran.devxy.io/amd64/alpine320/latest/src/contrib" -) +foo = available.packages("https://cran.devxy.io/amd64/alpine320/latest/src/contrib") sum((is.na(foo[, "Version"]))) which((is.na(foo[, "Version"]))) @@ -41,8 +40,6 @@ foo = available.packages("https://cran.devxy.io/arm64/rhel9/latest/src/contrib") sum((is.na(foo[, "Version"]))) which((is.na(foo[, "Version"]))) -foo = available.packages( - "https://cran.devxy.io/arm64/alpine320/latest/src/contrib" -) +foo = available.packages("https://cran.devxy.io/arm64/alpine320/latest/src/contrib") sum((is.na(foo[, "Version"]))) which((is.na(foo[, "Version"]))) diff --git a/local/debug-packages-writing.R b/local/debug-packages-writing.R index 533ae2b..5a0fd24 100644 --- a/local/debug-packages-writing.R +++ b/local/debug-packages-writing.R @@ -2,58 +2,42 @@ library(future) future::plan(multisession) future::plan(sequential) time = Sys.time() -files <- s3fs::s3_dir_ls( - sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib/Archive" - ), - recurse = T -) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib/Archive"), recurse = T) Sys.time() - time + archive <- llply(dirs, function(dir) { - files <- list.files( - dir, - recursive = FALSE, - full.names = TRUE, - pattern = "*.tar.gz" - ) + files <- list.files(dir, recursive = FALSE, full.names = TRUE, pattern = "*.tar.gz") if (length(files) == 0) { print(paste0("Error: Empty directory: ", dir)) return(NULL) } info <- file.info(files) - tryCatch( - { - rownames(info) <- paste0(basename(dirname(files)), "/", basename(files)) - }, - error = function(e) { - print(paste0("Error: Exception catched for Archived directory: ", dir)) - print(e) - return(NULL) - } - ) + tryCatch({ + rownames(info) <- paste0(basename(dirname(files)), "/", basename(files)) + }, error = function(e) { + print(paste0("Error: Exception catched for Archived directory: ", dir)) + print(e) + return(NULL) + }) info }) -tryCatch( - { - rownames(info) <- paste0(basename(dirname(files)), "/", basename(files)) - }, - error = function(e) { - print(paste0("Error: Exception catched for Archived directory: ", dir)) - print(e) - return(NULL) - } -) +tryCatch({ + rownames(info) <- paste0(basename(dirname(files)), "/", basename(files)) +}, error = function(e) { + print(paste0("Error: Exception catched for Archived directory: ", dir)) + print(e) + return(NULL) +}) -curl::curl_download( - "https://cran.devxy.io/amd64/rhel9/latest/src/contrib/PACKAGES.db", - "PACKAGES.db" -) + + +curl::curl_download("https://cran.devxy.io/amd64/rhel9/latest/src/contrib/PACKAGES.db", "PACKAGES.db") con = DBI::dbConnect(RSQLite::SQLite(), "PACKAGES.db") df = DBI::dbReadTable(con, "packages") @@ -66,14 +50,6 @@ which(grepl("digest", df$Package)) system("cat /tmp/PACKAGES | grep '^Package: digest' | wc -l") -curl::curl_fetch_memory( - "https://cloud.r-project.org/src/contrib/Meta/archive.rds" -) -remotes = readRDS(url( - "https://cloud.r-project.org/src/contrib/Meta/archive.rds", - "rb" -)) -packages = readRDS(url( - "https://cran.devxy.io/arm64/noble/latest/src/contrib/PACKAGES.rds", - "rb" -)) +curl::curl_fetch_memory("https://cloud.r-project.org/src/contrib/Meta/archive.rds") +remotes = readRDS(url("https://cloud.r-project.org/src/contrib/Meta/archive.rds", "rb")) +packages = readRDS(url("https://cran.devxy.io/arm64/noble/latest/src/contrib/PACKAGES.rds", "rb")) diff --git a/local/detect-duplicates.R b/local/detect-duplicates.R index f7e2c18..076499d 100644 --- a/local/detect-duplicates.R +++ b/local/detect-duplicates.R @@ -37,13 +37,10 @@ future.apply::future_lapply( files <- s3fs::s3_dir_ls( sprintf( "devxy-r-package-binaries-hel1/%s/%s/latest/src/contrib", - arch, - codename + arch, codename ) ) - if (length(files) == 0) { - return(NULL) - } + if (length(files) == 0) return(NULL) files_b <- basename(files) pkg_names <- sapply(strsplit(files_b, "_"), `[`, 1) dupes <- unique(pkg_names[duplicated(pkg_names)]) diff --git a/local/excluded-packages.json b/local/excluded-packages.json index 6489998..dccfc0b 100644 --- a/local/excluded-packages.json +++ b/local/excluded-packages.json @@ -1,77 +1,77 @@ [ - { "package": "RInno", "reason": "windows-only" }, - { "package": "KeyboardSimulator", "reason": "windows-only" }, - { "package": "R2PPT", "reason": "windows-only" }, - { "package": "RWinEdt", "reason": "windows-only" }, - { "package": "blatr", "reason": "windows-only" }, - { "package": "excel.link", "reason": "windows-only" }, - { "package": "spectrino", "reason": "windows-only" }, - { "package": "taskscheduleR", "reason": "windows-only" }, - { "package": "MDSGUI", "reason": "windows-only" }, - { "package": "BiplotGUI", "reason": "windows-only" }, - { "package": "R2wd", "reason": "windows-only" }, - { "package": "rFUSION", "reason": "windows-only" }, - { "package": "MediaNews", "reason": "windows-only" }, - { "package": "doBy", "reason": "hang" }, - { "package": "IDPmisc", "reason": "hang" }, - { "package": "frailtypack", "reason": "hang" }, - { "package": "afex", "reason": "hang" }, - { "package": "FrF2", "reason": "hang" }, - { "package": "DoE.base", "reason": "hang" }, - { "package": "agricolae", "reason": "hang" }, - { "package": "doFuture", "reason": "hang" }, - { "package": "fscaret", "reason": "hang" }, - { "package": "PHYLOGR", "reason": "hang" }, - { "package": "seewave", "reason": "hang" }, - { "package": "pls", "reason": "hang" }, - { "package": "relaimpo", "reason": "hang" }, - { "package": "geepack", "reason": "hang" }, - { "package": "gggenes", "reason": "hang" }, - { "package": "NPCirc", "reason": "hang" }, - { "package": "repmis", "reason": "hang" }, - { "package": "PNDSIBGE", "reason": "hang" }, - { "package": "lidR", "reason": "hang" }, - { "package": "poismf", "reason": "hang" }, - { "package": "neonstore", "reason": "hang" }, - { "package": "MachineShop", "reason": "hang" }, - { "package": "mvst", "reason": "hang" }, - { "package": "MacBehaviour", "reason": "hang" }, - { "package": "mcmcderive", "reason": "hang" }, - { "package": "RGIFT", "reason": "hang" }, - { "package": "KnowBR", "reason": "hang" }, - { "package": "netmeta", "reason": "hang" }, - { "package": "spdep", "reason": "hang" }, - { "package": "Rfast", "reason": "hang" }, - { "package": "compareGroups", "reason": "hang" }, - { "package": "ff", "reason": "hang" }, - { "package": "GsymPoint", "reason": "hang" }, - { "package": "RcppDynProg", "reason": "hang" }, - { "package": "comtradr", "reason": "hang" }, - { "package": "FD", "reason": "hang" }, - { "package": "PearsonDS", "reason": "hang" }, - { "package": "DCluster", "reason": "hang" }, - { "package": "gRc", "reason": "hang" }, - { "package": "mixlm", "reason": "hang" }, - { "package": "geospt", "reason": "hang" }, - { "package": "fdth", "reason": "hang" }, - { "package": "ffmanova", "reason": "hang" }, - { "package": "fiery", "reason": "hang" }, - { "package": "ffscrapr", "reason": "hang" }, - { "package": "cold", "reason": "hang" }, - { "package": "RcmdrPlugin.DoE", "reason": "hang" }, - { "package": "RcmdrPlugin.NMBU", "reason": "hang" }, - { "package": "RcmdrPlugin.RiskDemo", "reason": "hang" }, - { "package": "RcmdrPlugin.ROC", "reason": "hang" }, - { "package": "RcmdrPlugin.TeachStat", "reason": "hang" }, - { "package": "RcmdrPlugin.TeachingDemos", "reason": "hang" }, - { "package": "RcmdrPlugin.UCA", "reason": "hang" }, - { "package": "RcmdrPlugin.WorldFlora", "reason": "hang" }, - { "package": "RcmdrPlugin.aRnova", "reason": "hang" }, - { "package": "RcmdrPlugin.depthTools", "reason": "hang" }, - { "package": "RcmdrPlugin.orloca", "reason": "hang" }, - { "package": "RcmdrPlugin.sos", "reason": "hang" }, - { "package": "RcmdrPlugin.survival", "reason": "hang" }, - { "package": "RcmdrPlugin.temis", "reason": "hang" }, - { "package": "GWlasso", "reason": "hang" }, - { "package": "GWmodelVis", "reason": "hang" } + {"package": "RInno", "reason": "windows-only"}, + {"package": "KeyboardSimulator", "reason": "windows-only"}, + {"package": "R2PPT", "reason": "windows-only"}, + {"package": "RWinEdt", "reason": "windows-only"}, + {"package": "blatr", "reason": "windows-only"}, + {"package": "excel.link", "reason": "windows-only"}, + {"package": "spectrino", "reason": "windows-only"}, + {"package": "taskscheduleR", "reason": "windows-only"}, + {"package": "MDSGUI", "reason": "windows-only"}, + {"package": "BiplotGUI", "reason": "windows-only"}, + {"package": "R2wd", "reason": "windows-only"}, + {"package": "rFUSION", "reason": "windows-only"}, + {"package": "MediaNews", "reason": "windows-only"}, + {"package": "doBy", "reason": "hang"}, + {"package": "IDPmisc", "reason": "hang"}, + {"package": "frailtypack", "reason": "hang"}, + {"package": "afex", "reason": "hang"}, + {"package": "FrF2", "reason": "hang"}, + {"package": "DoE.base", "reason": "hang"}, + {"package": "agricolae", "reason": "hang"}, + {"package": "doFuture", "reason": "hang"}, + {"package": "fscaret", "reason": "hang"}, + {"package": "PHYLOGR", "reason": "hang"}, + {"package": "seewave", "reason": "hang"}, + {"package": "pls", "reason": "hang"}, + {"package": "relaimpo", "reason": "hang"}, + {"package": "geepack", "reason": "hang"}, + {"package": "gggenes", "reason": "hang"}, + {"package": "NPCirc", "reason": "hang"}, + {"package": "repmis", "reason": "hang"}, + {"package": "PNDSIBGE", "reason": "hang"}, + {"package": "lidR", "reason": "hang"}, + {"package": "poismf", "reason": "hang"}, + {"package": "neonstore", "reason": "hang"}, + {"package": "MachineShop", "reason": "hang"}, + {"package": "mvst", "reason": "hang"}, + {"package": "MacBehaviour", "reason": "hang"}, + {"package": "mcmcderive", "reason": "hang"}, + {"package": "RGIFT", "reason": "hang"}, + {"package": "KnowBR", "reason": "hang"}, + {"package": "netmeta", "reason": "hang"}, + {"package": "spdep", "reason": "hang"}, + {"package": "Rfast", "reason": "hang"}, + {"package": "compareGroups", "reason": "hang"}, + {"package": "ff", "reason": "hang"}, + {"package": "GsymPoint", "reason": "hang"}, + {"package": "RcppDynProg", "reason": "hang"}, + {"package": "comtradr", "reason": "hang"}, + {"package": "FD", "reason": "hang"}, + {"package": "PearsonDS", "reason": "hang"}, + {"package": "DCluster", "reason": "hang"}, + {"package": "gRc", "reason": "hang"}, + {"package": "mixlm", "reason": "hang"}, + {"package": "geospt", "reason": "hang"}, + {"package": "fdth", "reason": "hang"}, + {"package": "ffmanova", "reason": "hang"}, + {"package": "fiery", "reason": "hang"}, + {"package": "ffscrapr", "reason": "hang"}, + {"package": "cold", "reason": "hang"}, + {"package": "RcmdrPlugin.DoE", "reason": "hang"}, + {"package": "RcmdrPlugin.NMBU", "reason": "hang"}, + {"package": "RcmdrPlugin.RiskDemo", "reason": "hang"}, + {"package": "RcmdrPlugin.ROC", "reason": "hang"}, + {"package": "RcmdrPlugin.TeachStat", "reason": "hang"}, + {"package": "RcmdrPlugin.TeachingDemos", "reason": "hang"}, + {"package": "RcmdrPlugin.UCA", "reason": "hang"}, + {"package": "RcmdrPlugin.WorldFlora", "reason": "hang"}, + {"package": "RcmdrPlugin.aRnova", "reason": "hang"}, + {"package": "RcmdrPlugin.depthTools", "reason": "hang"}, + {"package": "RcmdrPlugin.orloca", "reason": "hang"}, + {"package": "RcmdrPlugin.sos", "reason": "hang"}, + {"package": "RcmdrPlugin.survival", "reason": "hang"}, + {"package": "RcmdrPlugin.temis", "reason": "hang"}, + {"package": "GWlasso", "reason": "hang"}, + {"package": "GWmodelVis", "reason": "hang"} ] diff --git a/local/fetch-rebuild-packages-from-issue.R b/local/fetch-rebuild-packages-from-issue.R index 26e544d..d944dd0 100644 --- a/local/fetch-rebuild-packages-from-issue.R +++ b/local/fetch-rebuild-packages-from-issue.R @@ -1,21 +1,15 @@ library(httr2, quietly = TRUE) forgejo_base <- "https://git.devxy.io/api/v1" -repo <- "devxy/build-cran-binaries" -platform <- Sys.getenv("PLATFORM") -arch <- Sys.getenv("ARCH") -token <- Sys.getenv("FORGEJO_TOKEN") -output_file <- Sys.getenv("REBUILD_PKG_LIST", "/tmp/rebuild_pkgs.txt") +repo <- "devxy/build-cran-binaries" +platform <- Sys.getenv("PLATFORM") +arch <- Sys.getenv("ARCH") +token <- Sys.getenv("FORGEJO_TOKEN") +output_file <- Sys.getenv("REBUILD_PKG_LIST", "/tmp/rebuild_pkgs.txt") -if (nchar(platform) == 0) { - stop("PLATFORM env var is not set") -} -if (nchar(arch) == 0) { - stop("ARCH env var is not set") -} -if (nchar(token) == 0) { - stop("FORGEJO_TOKEN env var is not set") -} +if (nchar(platform) == 0) stop("PLATFORM env var is not set") +if (nchar(arch) == 0) stop("ARCH env var is not set") +if (nchar(token) == 0) stop("FORGEJO_TOKEN env var is not set") os_family <- if (grepl("^ubuntu", platform)) { "Ubuntu" @@ -27,16 +21,12 @@ os_family <- if (grepl("^ubuntu", platform)) { platform } -issue_title <- sprintf( - "Missing package binaries for latest version (%s)", - os_family -) +issue_title <- sprintf("Missing package binaries for latest version (%s)", os_family) cat(sprintf("Searching for issue: %s\n", issue_title)) search_url <- sprintf( "%s/repos/%s/issues?type=issues&state=open&q=%s&limit=50", - forgejo_base, - repo, + forgejo_base, repo, utils::URLencode(issue_title, reserved = TRUE) ) search_resp <- request(search_url) |> @@ -44,9 +34,7 @@ search_resp <- request(search_url) |> req_perform() issues <- resp_body_json(search_resp, simplifyVector = FALSE) -match_idx <- which( - vapply(issues, function(x) x$title, character(1)) == issue_title -) +match_idx <- which(vapply(issues, function(x) x$title, character(1)) == issue_title) if (length(match_idx) == 0) { cat("No matching issue found - nothing to rebuild\n") @@ -67,10 +55,7 @@ lines <- strsplit(body, "\n", fixed = TRUE)[[1]] plat_header <- sprintf("## %s", platform) plat_idx <- which(lines == plat_header) if (length(plat_idx) == 0) { - cat(sprintf( - "No section found for platform %s - nothing to rebuild\n", - platform - )) + cat(sprintf("No section found for platform %s - nothing to rebuild\n", platform)) writeLines(character(0), output_file) q("no") } @@ -79,11 +64,7 @@ if (length(plat_idx) == 0) { arch_pattern <- sprintf("^### %s ", arch) arch_idx <- which(grepl(arch_pattern, lines) & seq_along(lines) > plat_idx[1]) if (length(arch_idx) == 0) { - cat(sprintf( - "No section found for arch %s under %s - nothing to rebuild\n", - arch, - platform - )) + cat(sprintf("No section found for arch %s under %s - nothing to rebuild\n", arch, platform)) writeLines(character(0), output_file) q("no") } @@ -101,11 +82,6 @@ pkg_lines <- section_lines[grepl("^- ", section_lines)] pkgs <- sub("^- ([^ ]+) \\(.*\\)$", "\\1", pkg_lines) pkgs <- pkgs[nchar(pkgs) > 0 & pkgs != "_None_"] -cat(sprintf( - "Found %d rebuildable packages for %s/%s\n", - length(pkgs), - platform, - arch -)) +cat(sprintf("Found %d rebuildable packages for %s/%s\n", length(pkgs), platform, arch)) writeLines(pkgs, output_file) cat(sprintf("Wrote package list to %s\n", output_file)) diff --git a/local/find-R-api-packages.sh b/local/find-R-api-packages.sh deleted file mode 100644 index 1f36961..0000000 --- a/local/find-R-api-packages.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/bash - -# Directory to clone repos into -WORKDIR="cran_repos" -mkdir -p "$WORKDIR" -cd "$WORKDIR" - -# GitHub API paginates results, so we loop through pages -PAGE=1 -PER_PAGE=100 -MATCHES=() - -while :; do - # Fetch a page of repos - REPOS=$(curl -s "https://api.github.com/orgs/cran/repos?per_page=$PER_PAGE&page=$PAGE" | jq -r '.[].clone_url') - [ -z "$REPOS" ] && break - - for REPO_URL in $REPOS; do - REPO_NAME=$(basename "$REPO_URL" .git) - # Skip if already cloned - [ -d "$REPO_NAME" ] && continue - git clone --depth 1 "$REPO_URL" "$REPO_NAME" >/dev/null 2>&1 - if [ -d "$REPO_NAME/src" ]; then - # Search for Rinternals.h in src/ - if grep -r -q 'R_VERSION < R_Version(' "$REPO_NAME/src"; then - echo "$REPO_NAME" - fi - fi - # Clean up to save space - rm -rf "$REPO_NAME" - done - - PAGE=$((PAGE + 1)) -done diff --git a/local/label-removed-cran-packages.R b/local/label-removed-cran-packages.R index 12dff9d..92cd940 100644 --- a/local/label-removed-cran-packages.R +++ b/local/label-removed-cran-packages.R @@ -6,13 +6,9 @@ archived <- quickcode::archivedPkg() |> pull(name) # Query all distinct pkgs in the DB -con <- DBI::dbConnect( - RPostgres::Postgres(), - dbname = "build_metadata", - host = "r-binaries.devxy.io", - port = 15432, - user = "r_binaries", - password = Sys.getenv("PGPASS"), +con <- DBI::dbConnect(RPostgres::Postgres(), + dbname = "build_metadata", host = "r-binaries.devxy.io", + port = 15432, user = "r_binaries", password = Sys.getenv("PGPASS"), sslmode = "require" ) @@ -26,9 +22,7 @@ to_process <- pkgs_db[pkgs_db %in% archived] # for all matches, set 'removed = TRUE' sapply(to_process, function(.x) { - DBI::dbExecute( - con, - "UPDATE single_builds SET removed = 'TRUE' where name = $1", + DBI::dbExecute(con, "UPDATE single_builds SET removed = 'TRUE' where name = $1", params = list(.x) ) }) diff --git a/local/last-processed-by-platform.R b/local/last-processed-by-platform.R index 398b6c1..f913610 100644 --- a/local/last-processed-by-platform.R +++ b/local/last-processed-by-platform.R @@ -7,4 +7,4 @@ query_metadata_table() |> group_by(platform, arch) |> arrange(desc(timestamp)) |> select(name, timestamp) |> - filter(row_number() == 1) + filter(row_number()==1) diff --git a/local/migrate-s3-hetzner-to-backblaze.sh b/local/migrate-s3-hetzner-to-backblaze.sh deleted file mode 100644 index 8cbd829..0000000 --- a/local/migrate-s3-hetzner-to-backblaze.sh +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -# Migrate S3 buckets from Hetzner Object Storage to Backblaze B2 via rclone. -# -# Prerequisites: -# 1. Install rclone: https://rclone.org/install/ -# 2. Configure two rclone remotes: -# rclone config create hetzner s3 \ -# provider=Other \ -# env_auth=false \ -# access_key_id=YOUR_HETZNER_KEY \ -# secret_access_key=YOUR_HETZNER_SECRET \ -# endpoint=fsn1.your-objectstorage.com # adjust region -# -# rclone config create backblaze s3 \ -# provider=Other \ -# env_auth=false \ -# access_key_id=YOUR_B2_KEY \ -# secret_access_key=YOUR_B2_APP_KEY \ -# endpoint=s3.us-west-004.backblazeb2.com # adjust region -# -# Usage: -# ./migrate-s3-hetzner-to-backblaze.sh [src:dst] ... -# ./migrate-s3-hetzner-to-backblaze.sh hetzner-bucket:backblaze-bucket - -HETZNER_REMOTE="${HETZNER_REMOTE:-hetzner}" -BACKBLAZE_REMOTE="${BACKBLAZE_REMOTE:-backblaze}" -RCLONE_FLAGS="${RCLONE_FLAGS:---transfers=64 --checkers=64 --fast-list}" - -if [[ $# -eq 0 ]]; then - echo "Usage: $0 [src-bucket:dst-bucket...]" - echo "" - echo " Each argument is a source:destination bucket pair separated by a colon." - echo "" - echo "Environment variables:" - echo " HETZNER_REMOTE rclone remote name for Hetzner (default: hetzner)" - echo " BACKBLAZE_REMOTE rclone remote name for Backblaze (default: backblaze)" - echo " RCLONE_FLAGS extra rclone flags (default: --transfers=16 --checkers=16 --fast-list)" - echo " DRY_RUN=1 show what would be copied without copying" - exit 1 -fi - -for cmd in rclone; do - if ! command -v "$cmd" &>/dev/null; then - echo "Error: $cmd is not installed." >&2 - exit 1 - fi -done - -# Verify remotes exist -for remote in "$HETZNER_REMOTE" "$BACKBLAZE_REMOTE"; do - if ! rclone listremotes | grep -q "^${remote}:$"; then - echo "Error: rclone remote '${remote}' not found. Run 'rclone config' to set it up." >&2 - exit 1 - fi -done - -DRY_RUN_FLAG="" -if [[ "${DRY_RUN:-0}" == "1" ]]; then - DRY_RUN_FLAG="--dry-run" - echo "=== DRY RUN MODE ===" -fi - -for pair in "$@"; do - if [[ "$pair" != *:* ]]; then - echo "Error: '$pair' is not a valid src:dst pair. Use format 'hetzner-bucket:backblaze-bucket'." >&2 - exit 1 - fi - - src_bucket="${pair%%:*}" - dst_bucket="${pair#*:}" - src="${HETZNER_REMOTE}:${src_bucket}" - dst="${BACKBLAZE_REMOTE}:${dst_bucket}" - - echo "" - echo "--- Migrating: ${src} -> ${dst} ---" - - # shellcheck disable=SC2086 - rclone sync \ - ${RCLONE_FLAGS} \ - ${DRY_RUN_FLAG} \ - --progress \ - "$src" "$dst" - - echo "--- Done: ${src_bucket} -> ${dst_bucket} ---" -done - -echo "" -echo "Migration complete." diff --git a/local/missing-cran-packages-db.R b/local/missing-cran-packages-db.R index 882bca4..56b3d94 100644 --- a/local/missing-cran-packages-db.R +++ b/local/missing-cran-packages-db.R @@ -3,34 +3,22 @@ library(bincraft) library(dplyr) library(DBI) -con <- DBI::dbConnect( - RPostgres::Postgres(), - dbname = "build_metadata", - host = "r-binaries.devxy.io", - port = 15432, - user = "r_binaries", - password = Sys.getenv("PGPASS"), +con <- DBI::dbConnect(RPostgres::Postgres(), + dbname = "build_metadata", host = "r-binaries.devxy.io", + port = 15432, user = "r_binaries", password = Sys.getenv("PGPASS"), sslmode = "require" ) `%nin%` <- Negate(`%in%`) -new_packages <- get_new_cran_packages(lubridate::interval( - lubridate::today(), - lubridate::today() - 2 -))$name -removed_pkgs <- get_removed_cran_packages(lubridate::interval( - lubridate::today(), - lubridate::today() - 2 -))$name +new_packages <- get_new_cran_packages(lubridate::interval(lubridate::today(), lubridate::today() - 2))$name +removed_pkgs <- get_removed_cran_packages(lubridate::interval(lubridate::today(), lubridate::today() - 2))$name # filter windows packages # filter new packages from the last X days -cran_pkgs <- unique( - tools::CRAN_package_db() |> - filter(`OS_type` != "windows" | is.na(`OS_type`)) |> - filter(`Package` %nin% new_packages) |> - pull(Package) -) +cran_pkgs <- unique(tools::CRAN_package_db() |> + filter(`OS_type` != "windows" | is.na(`OS_type`)) |> + filter(`Package` %nin% new_packages) |> + pull(Package)) arch <- "arm64" platform <- "redhat-8" @@ -40,24 +28,13 @@ platform <- "alpine-321" platform <- "ubuntu-2204" platform <- "ubuntu-2404" -data <- dbGetQuery( - con, - "SELECT name FROM single_builds WHERE platform = $1 AND arch = $2 and removed = FALSE;", - params = list(platform, arch) -) -removed_pkgs = get_removed_cran_packages(lubridate::interval( - lubridate::today(), - lubridate::today() - 2 -))$name +data <- dbGetQuery(con, "SELECT name FROM single_builds WHERE platform = $1 AND arch = $2 and removed = FALSE;", params = list(platform, arch)) +removed_pkgs = get_removed_cran_packages(lubridate::interval(lubridate::today(), lubridate::today() - 2))$name pkgs_db <- unique(data$name) pkgs_db = setdiff(pkgs_db, removed_pkgs) pkgs <- setdiff(cran_pkgs, pkgs_db) -formatted_pkgs <- gsub( - '"', - "'", - capture.output(dput(as.character(na.omit(pkgs[1:length(pkgs)])))) -) +formatted_pkgs <- gsub('"', "'", capture.output(dput(as.character(na.omit(pkgs[1:length(pkgs)]))))) formatted_pkgs_one_line <- paste(formatted_pkgs, collapse = " ") cat(formatted_pkgs_one_line, "\n", sep = "") @@ -67,6 +44,7 @@ clipr::write_clip(formatted_pkgs_one_line) # sapply(pkgs, function(x) which(grepl(sprintf("^%s$", x), cran_pkgs))) + s3fs::s3_file_system( aws_access_key_id = Sys.getenv("HETZNER_S3_ACCESS_KEY_K3S"), aws_secret_access_key = Sys.getenv("HETZNER_S3_SECRET_KEY_K3S"), diff --git a/local/missing-cran-packages.R b/local/missing-cran-packages.R index ca5cad8..ab71b5b 100644 --- a/local/missing-cran-packages.R +++ b/local/missing-cran-packages.R @@ -10,39 +10,19 @@ s3fs::s3_file_system( ) s3fs::s3_dir_ls("s3://devxy-r-package-binaries") -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/jammy/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib" -)) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/jammy/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib")) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib" -)) # done -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib" -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib")) # done +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib")) -files_b = basename(files) +files_b=basename(files) files_b_split = sapply(strsplit(basename(files_b), "_"), function(x) x[1]) cran_pkgs <- tools::CRAN_package_db() |> @@ -50,11 +30,7 @@ cran_pkgs <- tools::CRAN_package_db() |> pull(Package) pkgs = setdiff(cran_pkgs, files_b_split) -formatted_pkgs <- gsub( - '"', - "'", - capture.output(dput(as.character(na.omit(pkgs[1:900])))) -) +formatted_pkgs <- gsub('"', "'", capture.output(dput(as.character(na.omit(pkgs[1:900]))))) formatted_pkgs_one_line <- paste(formatted_pkgs, collapse = " ") cat(formatted_pkgs_one_line, "\n", sep = "") diff --git a/local/missing-packages-in-index.R b/local/missing-packages-in-index.R index 6453888..810c89d 100644 --- a/local/missing-packages-in-index.R +++ b/local/missing-packages-in-index.R @@ -7,109 +7,42 @@ s3fs::s3_file_system( region_name = "hel1", ) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/jammy/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib" -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/jammy/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib")) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib" -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib")) -files_b = basename(files) +files_b=basename(files) files_b_split = sapply(strsplit(basename(files_b), "_"), function(x) x[1]) -files_b_split = setdiff( - files_b_split, - c("PACKAGES", "PACKAGES.gz", "PACKAGES.rds", "PACKAGES.db", "Archive") -) +files_b_split = setdiff(files_b_split, c("PACKAGES", "PACKAGES.gz", "PACKAGES.rds", "PACKAGES.db", "Archive")) # windows-only -files_b_split = setdiff( - files_b_split, - c( - "PACKAGES", - "PACKAGES.gz", - "PACKAGES.rds", - "PACKAGES.db", - "Archive", - "RInno", - "KeyboardSimulator", - "R2PPT", - "RWinEdt", - "blatr", - "excel.link", - "spectrino", - "taskscheduleR", - "MDSGUI", - "BiplotGUI", - "R2wd" - ) -) -pkgs_index = available.packages( - "https://cran.devxy.io/amd64/jammy/latest/src/contrib" -)[, "Package"] -pkgs_index_b = basename(pkgs_index) +files_b_split = setdiff(files_b_split, c("PACKAGES", "PACKAGES.gz", "PACKAGES.rds", "PACKAGES.db", "Archive", "RInno", "KeyboardSimulator", "R2PPT", "RWinEdt", "blatr", "excel.link", "spectrino", "taskscheduleR", "MDSGUI", "BiplotGUI", "R2wd")) +pkgs_index = available.packages("https://cran.devxy.io/amd64/jammy/latest/src/contrib")[, "Package"] +pkgs_index_b=basename(pkgs_index) if (length(files_b_split) != length(pkgs_index_b)) { pkgs_missing = setdiff(files_b_split, pkgs_index_b) message("Packages missing in index but present in S3:") pkgs_missing - formatted_pkgs <- gsub( - '"', - "'", - capture.output(dput(as.character(na.omit(pkgs_missing[1:900])))) - ) + formatted_pkgs <- gsub('"', "'", capture.output(dput(as.character(na.omit(pkgs_missing[1:900]))))) formatted_pkgs_one_line <- paste(formatted_pkgs, collapse = " ") cat(formatted_pkgs_one_line, "\n", sep = "") } -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib" -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/noble/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel8/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/rhel9/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/amd64/alpine320/latest/src/contrib")) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib" -)) -files <- s3fs::s3_dir_ls(sprintf( - "devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib" -)) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/jammy/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/noble/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel8/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/rhel9/latest/src/contrib")) +files <- s3fs::s3_dir_ls(sprintf("devxy-r-package-binaries-hel1/arm64/alpine320/latest/src/contrib")) diff --git a/local/packages-to-build.R b/local/packages-to-build.R index 7a3652d..91ee96e 100644 --- a/local/packages-to-build.R +++ b/local/packages-to-build.R @@ -17,11 +17,7 @@ suppressPackageStartupMessages(library(data.table)) arch = Sys.getenv("ARCH") # target: alpine-322, ubuntu-2404, redhat-9, etc. -platform = paste( - Sys.getenv("OS"), - gsub("[.]", "", Sys.getenv("OS_VERSION")), - sep = "-" -) +platform = paste(Sys.getenv("OS"), gsub("[.]", "", Sys.getenv("OS_VERSION")), sep = "-") # Use bincraft's codename detection for S3 paths (e.g. "rhel10" not "redhat10") codename = bincraft::set_codename(NULL) @@ -38,9 +34,7 @@ con <- DBI::dbConnect( cran_archive = tools::CRAN_archive_db() cran_release = tools::CRAN_package_db() # Subset cran_archive to only those packages -cran_archive_in_release <- cran_archive[ - names(cran_archive) %in% cran_release$Package -] +cran_archive_in_release <- cran_archive[names(cran_archive) %in% cran_release$Package] archive_versions <- rbindlist( lapply(names(cran_archive), function(pkg) { @@ -132,15 +126,11 @@ query_error <- function(pkg, ver) { # Fetch all relevant columns from the database errored_pkgs <- DBI::dbGetQuery( con, - sprintf( - "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE and platform='%s' and arch='%s'", - platform, - arch - ) + sprintf("SELECT name, tag FROM single_builds WHERE error_occurred = TRUE and platform='%s' and arch='%s'", platform, arch) ) errored_pkgs <- as.data.table(errored_pkgs) setkey(pkgs_to_build, Package, Version) -setnames(errored_pkgs, c("Package", "Version")) +setnames(errored_pkgs, c("Package","Version")) setkey(errored_pkgs, Package, Version) ### Final subsetting @@ -150,62 +140,3 @@ pkgs <- pkgs_no_error[!s3_dt] # Deduplicate pkgs <- unique(pkgs) setorder(pkgs, Package, Version) - -### R-minor sensitivity (classify once per package, applied to all versions) -source(file.path("local", "r-minor-helpers.R")) -risky_deps <- bincraft::abi_risky_linking_deps() - -release_meta <- data.table( - Package = cran_release$Package, - NeedsCompilation = cran_release$NeedsCompilation, - LinkingTo = cran_release$LinkingTo -) - -meta <- release_meta[Package %in% unique(pkgs$Package)] -meta[, - triage := mapply( - classify_from_metadata, - NeedsCompilation, - LinkingTo, - MoreArgs = list(risky_deps = risky_deps) - ) -] - -# Only the "ambiguous" compiled packages need a source grep. -ambiguous <- meta[triage == "ambiguous", Package] -sensitive_ambiguous <- character() -if (length(ambiguous) > 0L) { - tmp_src <- file.path(tempdir(), "abi_src") - dir.create(tmp_src, showWarnings = FALSE, recursive = TRUE) - sens <- vapply( - ambiguous, - function(pkg) { - out <- tryCatch( - { - dl <- utils::download.packages( - pkg, - destdir = tmp_src, - repos = "https://cloud.r-project.org", - quiet = TRUE - ) - isTRUE(as.logical(bincraft::needs_per_minor_recompile(dl[1L, 2L]))) - }, - error = function(e) TRUE - ) # fail safe: treat as sensitive - out - }, - logical(1L) - ) - sensitive_ambiguous <- ambiguous[sens] -} - -sensitive_pkgs <- unique(c( - meta[triage == "sensitive", Package], - sensitive_ambiguous -)) -pkgs[, r_minor_sensitive := Package %in% sensitive_pkgs] -sprintf( - "R-minor-sensitive packages: %s of %s", - length(sensitive_pkgs), - uniqueN(pkgs$Package) -) diff --git a/local/packages-without-any-binary.R b/local/packages-without-any-binary.R index f42196f..a6994ad 100644 --- a/local/packages-without-any-binary.R +++ b/local/packages-without-any-binary.R @@ -1,24 +1,17 @@ ### Lists packages without any successful binaries, i.e. pkgs for which all builds errored (per platform & arch) library(DBI) library(dplyr) -con <- DBI::dbConnect( - RPostgres::Postgres(), - dbname = "build_metadata", - host = "r-binaries.devxy.io", - port = 15432, - user = "r_binaries", - password = Sys.getenv("PGPASS"), +con <- DBI::dbConnect(RPostgres::Postgres(), + dbname = "build_metadata", host = "r-binaries.devxy.io", + port = 15432, user = "r_binaries", password = Sys.getenv("PGPASS"), sslmode = "require" ) -cran_pkgs <- tools::CRAN_package_db() |> - filter(`Date/Publication` <= "2024-12-02") |> +cran_pkgs <- tools::CRAN_package_db() |> + filter(`Date/Publication` <= "2024-12-02") |> pull(Package) -data <- dbGetQuery( - con, - "SELECT name,platform,arch,removed,error_occurred FROM single_builds;" -) +data <- dbGetQuery(con, "SELECT name,platform,arch,removed,error_occurred FROM single_builds;") pkgs <- data |> filter(platform == "alpine-320", arch == "arm64") |> @@ -29,11 +22,7 @@ pkgs <- data |> pkgs = setdiff(cran_pkgs, pkgs) # Format, remove line breaks, and print as a single line -formatted_pkgs <- gsub( - '"', - "'", - capture.output(dput(as.character(na.omit(pkgs[1:900])))) -) +formatted_pkgs <- gsub('"', "'", capture.output(dput(as.character(na.omit(pkgs[1:900]))))) formatted_pkgs_one_line <- paste(formatted_pkgs, collapse = " ") diff --git a/local/query-pkgs-without-old-versions.R b/local/query-pkgs-without-old-versions.R deleted file mode 100644 index 29ba891..0000000 --- a/local/query-pkgs-without-old-versions.R +++ /dev/null @@ -1,39 +0,0 @@ -library(s3fs) - -# List all files under contrib// -all_files <- s3fs::s3_dir_ls( - "s3://devxy-r-package-binaries-hel1/arm64/alpine322/latest/src/contrib/", - recurse = TRUE, - type = "file" -) - -pattern <- ".*/src/contrib/([^/_]+)_.*" -matches <- regmatches(all_files, regexec(pattern, all_files)) -pkg_names <- unique( - vapply( - matches, - function(x) if (length(x) > 1) x[2] else NA_character_, - character(1) - ) -) -pkg_names <- pkg_names[!is.na(pkg_names)] - -# For each package, check if Archive// contains any files -no_archive_files <- character(0) -for (pkg in pkg_names) { - archive_dir1 <- sprintf( - "s3://devxy-r-package-binaries-hel1/arm64/alpine322/latest/src/contrib/Archive/%s", - pkg - ) - archive_files <- unique(c( - tryCatch( - s3fs::s3_dir_ls(archive_dir1, recurse = TRUE), - error = function(e) character(0) - ) - )) - if (length(archive_files) == 0) { - no_archive_files <- c(no_archive_files, pkg) - } -} - -print(no_archive_files) diff --git a/local/r-minor-helpers.R b/local/r-minor-helpers.R deleted file mode 100644 index 65aafdf..0000000 --- a/local/r-minor-helpers.R +++ /dev/null @@ -1,33 +0,0 @@ -# Metadata-only ABI triage so the full build avoids downloading every source. -# Mirrors bincraft::abi_classify rules 1-2; "ambiguous" packages still need a -# source grep via bincraft::needs_per_minor_recompile(). - -classify_from_metadata <- function(needs_compilation, linking_to, risky_deps) { - nc <- if (length(needs_compilation) == 0L || is.na(needs_compilation)) { - "" - } else { - tolower(trimws(needs_compilation)) - } - if (!identical(nc, "yes")) { - return("not-sensitive") - } - lt <- if (length(linking_to) == 0L || is.na(linking_to)) "" else linking_to - linked <- trimws(unlist(strsplit(lt, "[,\n]"))) - linked <- sub("\\s*\\(.*\\)$", "", linked) # strip "(>= x)" constraints - linked <- linked[nzchar(linked)] - if (any(linked %in% risky_deps)) { - return("sensitive") - } - "ambiguous" -} - -parse_build_args <- function(args) { - sensitive_only <- "--sensitive-only" %in% args - pos <- args[!startsWith(args, "--")] - list( - sensitive_only = sensitive_only, - split_into = as.integer(pos[1L]), - split_index = as.integer(pos[2L]), - ncpus = as.integer(pos[3L]) - ) -} diff --git a/local/test-package-loading.R b/local/test-package-loading.R deleted file mode 100644 index 26a2e82..0000000 --- a/local/test-package-loading.R +++ /dev/null @@ -1,331 +0,0 @@ -install.packages( - "pak", - repos = sprintf( - "https://r-lib.github.io/p/pak/stable/%s/%s/%s", - .Platform$pkgType, - R.Version()$os, - R.Version()$arch - ) -) - -Sys.setenv(PKG_SYSREQS = TRUE) -all_pkgs <- rownames(available.packages()) - -to_skip = c("ABRSQOL", "ACA", "ACE.CoCo") -all_pkgs = setdiff(all_pkgs, to_skip) - -for (i in all_pkgs) { - message(sprintf("\nInstalling %s", i)) - pak::pkg_install(i) - library(i, character.only = TRUE) -} - - -# Example data -all_pkgs <- rownames(available.packages()) -to_skip <- c( - "ABRSQOL", - "ACA", - "ACE.CoCo", - "ACEsimFit", - "ACNE", - "absorber", - "adapt4pv", - "adaptMCMC", - "addhaz", - "ADDT", - "ahaz", - "arm", - "arules", - "arulesCBA", - "aster2", - "BayesFactor", - "bc3net", - "bgsmtr", - "biglasso", - "BinNonNor", - "BinNor", - "bioassayR", - "birankr", - "BiRewire", - "bolasso", - "Boptbd", - "Brobdingnag", - "BSW", - "BTLLasso", - "bvartools", - "cAIC4", - "Category", - "celda", - "centiserve", - "cjoint", - "clinical", - "clipper", - "CodataGS", - "conos", - "CopulaInference", - "covEB", - "cplm", - "CRTgeeDR", - "cthreshER", - "ctmcmove", - "curephEM", - "CVST", - "dcGSA", - "dclone", - "dcsvm", - "DelayedArray", - "dglars", - "dhglm", - "disordR", - "distrom", - "dmm", - "DNABarcodes", - "DoubleCone", - "DRR", - "DTRlearn2", - "DWDLargeR", - "eds", - "EMCluster", - "EMMREML", - "evalITR", - "EventPointer", - "evola", - "excursions", - "expm", - "fanc", - "FAS", - "fastadi", - "fastPLS", - "fastRG", - "fdaPDE", - "flare", - "FoReco", - "frailtyHL", - "freebird", - "FSTpackage", - "gamlr", - "gamlss.lasso", - "gamm4", - "gbmt", - "gdim", - "gdistance", - "GeDS", - "geeM", - "genlasso", - "GenOrd", - "GenoScan", - "geomorph", - "geostatsp", - "GhostKnockoff", - "GIGSEA", - "GlarmaVarSel", - "glmm", - "glmmrBase", - "glmmrOptim", - "glmnet", - "glober", - "GPvam", - "graphpcor", - "gremlin", - "growthrate", - "grpCox", - "GSD", - "HelpersMG", - "hglm", - "hglm.data", - "hibayes", - "hierSDR", - "HMTL", - "hsem", - "ibmdbR", - "inca", - "INLAspacetime", - "INLAtools", - "invertiforms", - "irlba", - "islasso", - "ISLET", - "isotonic.pen", - "jordan", - "kinship2", - "KnockoffScreen", - "lcpm", - "leidenAlg", - "lfe", - "lingmatch", - "LKT", - "lme4", - "lme4breeding", - "lme4GS", - "logcondiscr", - "LPmerge", - "LRMF3", - "MAP", - "marcox", - "markovchain", - "MatrixExtra", - "matter", - "MBC", - "mcen", - "mclogit", - "MCMCglmm", - "mdhglm", - "MDPtoolbox", - "mediation", - "mefa4", - "metafor", - "mgwrsar", - "mi", - "midasml", - "mind", - "monocle", - "msda", - "MuData", - "MultiGlarmaVarSel", - "MultiOrd", - "MultiVarSel", - "mvglmmRank", - "N2R", - "nadiv", - "NBtsVarSel", - "NegBinBetaBinreg", - "NetworkRiskMeasures", - "neuroim2", - "NOISeq", - "numbat", - "optbdmaeAT", - "optimbase", - "OptimModel", - "optrcdmaeAT", - "OrdNor", - "pagoda2", - "PCovR", - "pedgene", - "pedigree", - "pedigreemm", - "pense", - "PERMANOVA", - "phateR", - "PhylogeneticEM", - "pleio", - "POINT", - "PoisBinNonNor", - "PoisBinOrd", - "PoisBinOrdNonNor", - "PoisBinOrdNor", - "PoisNonNor", - "PoisNor", - "PRISMA", - "ProbitSpatial", - "prodest", - "psqn", - "qlcMatrix", - "qpcR", - "QRM", - "quadrupen", - "QZ", - "ramps", - "randnet", - "randPedPCA", - "rBMF", - "RCBR", - "RealVAMS", - "REBayes", - "recommenderlab", - "Rediscover", - "reglogit", - "RESET", - "RGE", - "RGENERATEPREC", - "riemtan", - "RNewsflow", - "robustlmm", - "rsparse", - "rSPDE", - "rwc", - "S4Arrays", - "saeMSPE", - "sbw", - "scITD", - "scoup", - "sdwd", - "SEAGLE", - "sensory", - "serrsBayes", - "sglasso", - "sharpPen", - "SiPSiC", - "SKAT", - "snpReady", - "snpStats", - "softImpute", - "sommer", - "soptdmaeA", - "SOR", - "SparseArray", - "SparseChol", - "sparseLRMatrix", - "sparsenet", - "sparsenetgls", - "sparsestep", - "spatialprobit", - "spatialreg", - "spatstat.sparse", - "speedglm", - "sRDA", - "sSDR", - "ssfa", - "stcos", - "StratifiedSampling", - "sureLDA", - "survey", - "surveyvoi", - "svydiags", - "systemfit", - "TargetScore", - "text2map", - "textir", - "textmineR", - "textTinyR", - "tmvtnorm", - "TPEA", - "triversity", - "tsapp", - "tvReg", - "uwot", - "vagam", - "VAM", - "WaveSampling", - "WGScan", - "wordspace", - "workflowsets", - "ACSSpack", - "ADDT", - "AER" -) - -# Find the position of the last package in to_skip within all_pkgs -last_skip <- tail(to_skip, 1) - -# Find its position in all_pkgs (returns NA if not found) -start_pos <- match(last_skip, all_pkgs) - -# If not found, start from the beginning; else, start after last_skip -if (is.na(start_pos)) { - to_process <- all_pkgs -} else { - to_process <- all_pkgs[(start_pos + 1):length(all_pkgs)] -} - -if (length(to_process) == 0) { - message("All packages have been processed.") -} else { - for (i in to_process) { - message(sprintf("\nInstalling %s", i)) - pak::pkg_install(i) - library(i, character.only = TRUE) - } - # Update to_skip to include all up to the last processed - to_skip <- all_pkgs[1:(last_skip_pos + length(to_process))] -} diff --git a/local/tests/test-build-all-args.R b/local/tests/test-build-all-args.R deleted file mode 100644 index 3308fc3..0000000 --- a/local/tests/test-build-all-args.R +++ /dev/null @@ -1,13 +0,0 @@ -source(file.path("..", "r-minor-helpers.R")) - -test_that("parse_build_args splits flags from positionals", { - a <- parse_build_args(c("--sensitive-only", "4", "2", "8")) - expect_true(a$sensitive_only) - expect_identical(a$split_into, 4L) - expect_identical(a$split_index, 2L) - expect_identical(a$ncpus, 8L) - - b <- parse_build_args(c("4", "2", "8")) - expect_false(b$sensitive_only) - expect_identical(b$split_into, 4L) -}) diff --git a/local/tests/test-r-minor-helpers.R b/local/tests/test-r-minor-helpers.R deleted file mode 100644 index ac7b0a6..0000000 --- a/local/tests/test-r-minor-helpers.R +++ /dev/null @@ -1,28 +0,0 @@ -source(file.path("..", "r-minor-helpers.R")) - -test_that("pure-r (NeedsCompilation != yes) is not sensitive", { - expect_identical(classify_from_metadata("no", NA, c("Rcpp")), "not-sensitive") - expect_identical( - classify_from_metadata("", "Rcpp", c("Rcpp")), - "not-sensitive" - ) -}) - -test_that("LinkingTo a risky dep is sensitive (version constraints stripped)", { - expect_identical( - classify_from_metadata("yes", "Rcpp (>= 1.0)", c("Rcpp")), - "sensitive" - ) - expect_identical( - classify_from_metadata("yes", "R6,\n cpp11", c("Rcpp", "cpp11")), - "sensitive" - ) -}) - -test_that("compiled but no risky LinkingTo is ambiguous (needs source)", { - expect_identical( - classify_from_metadata("yes", "R6", c("Rcpp", "cpp11")), - "ambiguous" - ) - expect_identical(classify_from_metadata("yes", NA, c("Rcpp")), "ambiguous") -}) diff --git a/local/weekly-missing-binaries-audit.R b/local/weekly-missing-binaries-audit.R index 6b32037..c6b67e5 100644 --- a/local/weekly-missing-binaries-audit.R +++ b/local/weekly-missing-binaries-audit.R @@ -15,14 +15,10 @@ library(httr2, quietly = TRUE) # Environment / config # --------------------------------------------------------------------------- platform <- Sys.getenv("PLATFORM") -arch <- Sys.getenv("ARCH") +arch <- Sys.getenv("ARCH") -if (nchar(platform) == 0) { - stop("PLATFORM env var is not set") -} -if (nchar(arch) == 0) { - stop("ARCH env var is not set") -} +if (nchar(platform) == 0) stop("PLATFORM env var is not set") +if (nchar(arch) == 0) stop("ARCH env var is not set") # Map platform names to S3 codenames s3_codename <- gsub("-", "", platform) @@ -41,13 +37,8 @@ os_family <- if (grepl("^ubuntu", platform)) { platform } -cat(sprintf( - "Platform: %s | Arch: %s | S3 codename: %s | OS family: %s\n", - platform, - arch, - s3_codename, - os_family -)) +cat(sprintf("Platform: %s | Arch: %s | S3 codename: %s | OS family: %s\n", + platform, arch, s3_codename, os_family)) # --------------------------------------------------------------------------- # 1. Query PostgreSQL for known build failures (before s3fs init to avoid @@ -56,20 +47,19 @@ cat(sprintf( cat("Connecting to PostgreSQL...\n") con <- DBI::dbConnect( RPostgres::Postgres(), - dbname = "build_metadata", - host = "r-binaries.devxy.io", - port = 15432, - user = "rpkgs", + dbname = "build_metadata", + host = "r-binaries.devxy.io", + port = 15432, + user = "rpkgs", password = Sys.getenv("PGPASS"), - sslmode = "require" + sslmode = "require" ) errored_pkgs <- DBI::dbGetQuery( con, sprintf( "SELECT name, tag FROM single_builds WHERE error_occurred = TRUE AND platform = '%s' AND arch = '%s'", - platform, - arch + platform, arch ) ) DBI::dbDisconnect(con) @@ -79,12 +69,7 @@ if (nrow(errored_dt) > 0) { setnames(errored_dt, c("Package", "Version")) setkey(errored_dt, Package, Version) } -cat(sprintf( - "Found %d known build failures for %s/%s\n", - nrow(errored_dt), - platform, - arch -)) +cat(sprintf("Found %d known build failures for %s/%s\n", nrow(errored_dt), platform, arch)) # --------------------------------------------------------------------------- # 2. CRAN release packages (uses curl internally - must come after PG) @@ -101,36 +86,28 @@ cran_dt <- data.table( # --------------------------------------------------------------------------- cat("Connecting to S3...\n") s3fs::s3_file_system( - aws_access_key_id = Sys.getenv("B2_S3_ACCESS_KEY"), + aws_access_key_id = Sys.getenv("B2_S3_ACCESS_KEY"), aws_secret_access_key = Sys.getenv("B2_S3_SECRET_KEY"), - endpoint = "https://s3.eu-central-003.backblazeb2.com", - region_name = "eu-central-003", - refresh = TRUE + endpoint = "https://s3.eu-central-003.backblazeb2.com", + region_name = "eu-central-003", + refresh = TRUE ) -s3_path <- sprintf( - "devxy-rpkgs-binaries/%s/%s/latest/src/contrib", - arch, - s3_codename -) +s3_path <- sprintf("devxy-rpkgs-binaries/%s/%s/latest/src/contrib", arch, s3_codename) cat(sprintf("Listing S3 path: %s\n", s3_path)) s3_pkgs <- tryCatch( s3fs::s3_dir_ls(s3_path, recurse = FALSE), error = function(e) { - cat(sprintf( - "WARNING: Could not list S3 path %s: %s\n", - s3_path, - conditionMessage(e) - )) + cat(sprintf("WARNING: Could not list S3 path %s: %s\n", s3_path, conditionMessage(e))) character(0) } ) file_names <- basename(s3_pkgs) -matches <- regexec("^([A-Za-z0-9.]+)_([0-9][^/]*)\\.tar\\.gz$", file_names) -parts <- regmatches(file_names, matches) -parts <- parts[sapply(parts, length) == 3] +matches <- regexec("^([A-Za-z0-9.]+)_([0-9][^/]*)\\.tar\\.gz$", file_names) +parts <- regmatches(file_names, matches) +parts <- parts[sapply(parts, length) == 3] if (length(parts) == 0) { s3_dt <- data.table(Package = character(0), Version = character(0)) } else { @@ -140,18 +117,13 @@ if (length(parts) == 0) { ) } -cat(sprintf( - "S3 contains %d tarballs for %s/%s\n", - nrow(s3_dt), - arch, - s3_codename -)) +cat(sprintf("S3 contains %d tarballs for %s/%s\n", nrow(s3_dt), arch, s3_codename)) # --------------------------------------------------------------------------- # 4. Find missing packages (CRAN release version not in S3) # --------------------------------------------------------------------------- setkey(cran_dt, Package, Version) -setkey(s3_dt, Package, Version) +setkey(s3_dt, Package, Version) missing_dt <- cran_dt[!s3_dt] cat(sprintf("%d CRAN release packages missing from S3\n", nrow(missing_dt))) @@ -160,15 +132,9 @@ cat(sprintf("%d CRAN release packages missing from S3\n", nrow(missing_dt))) # --------------------------------------------------------------------------- script_dir <- tryCatch( dirname(normalizePath( - if (exists("ofile", envir = sys.frame(1), inherits = FALSE)) { - sys.frame(1)$ofile - } else { - commandArgs(trailingOnly = FALSE)[grepl( - "--file=", - commandArgs(trailingOnly = FALSE) - )] |> - sub("--file=", "", x = _) - }, + if (exists("ofile", envir = sys.frame(1), inherits = FALSE)) sys.frame(1)$ofile + else commandArgs(trailingOnly = FALSE)[grepl("--file=", commandArgs(trailingOnly = FALSE))] |> + sub("--file=", "", x = _), mustWork = FALSE )), error = function(e) "local" @@ -177,23 +143,13 @@ excluded_path <- file.path(script_dir, "excluded-packages.json") excluded_pkgs <- data.table(package = character(0), reason = character(0)) if (file.exists(excluded_path)) { - excluded_raw <- jsonlite::fromJSON(excluded_path) + excluded_raw <- jsonlite::fromJSON(excluded_path) excluded_pkgs <- as.data.table(excluded_raw) - cat(sprintf( - "Loaded %d excluded packages from %s\n", - nrow(excluded_pkgs), - excluded_path - )) + cat(sprintf("Loaded %d excluded packages from %s\n", nrow(excluded_pkgs), excluded_path)) missing_dt <- missing_dt[!Package %in% excluded_pkgs$package] - cat(sprintf( - "%d packages remain after removing exclusions\n", - nrow(missing_dt) - )) + cat(sprintf("%d packages remain after removing exclusions\n", nrow(missing_dt))) } else { - cat(sprintf( - "No excluded-packages.json found at %s -- skipping exclusion step\n", - excluded_path - )) + cat(sprintf("No excluded-packages.json found at %s -- skipping exclusion step\n", excluded_path)) } # --------------------------------------------------------------------------- @@ -201,34 +157,24 @@ if (file.exists(excluded_path)) { # --------------------------------------------------------------------------- if (nrow(errored_dt) > 0) { known_failures_dt <- missing_dt[errored_dt, nomatch = 0] - rebuildable_dt <- missing_dt[!errored_dt] + rebuildable_dt <- missing_dt[!errored_dt] } else { known_failures_dt <- missing_dt[0] - rebuildable_dt <- missing_dt + rebuildable_dt <- missing_dt } -cat(sprintf( - "Rebuildable: %d | Known failures: %d\n", - nrow(rebuildable_dt), - nrow(known_failures_dt) -)) +cat(sprintf("Rebuildable: %d | Known failures: %d\n", + nrow(rebuildable_dt), nrow(known_failures_dt))) # --------------------------------------------------------------------------- # 7. Write rebuildable package names to cache RDS # --------------------------------------------------------------------------- -cache_dir <- "/mnt/cache/packages" -cache_file <- file.path( - cache_dir, - sprintf("weekly_rebuild_%s_%s.rds", platform, arch) -) +cache_dir <- "/mnt/cache/packages" +cache_file <- file.path(cache_dir, sprintf("weekly_rebuild_%s_%s.rds", platform, arch)) if (dir.exists(cache_dir)) { saveRDS(rebuildable_dt$Package, cache_file) - cat(sprintf( - "Wrote %d rebuildable packages to %s\n", - nrow(rebuildable_dt), - cache_file - )) + cat(sprintf("Wrote %d rebuildable packages to %s\n", nrow(rebuildable_dt), cache_file)) } else { cat(sprintf("Cache dir %s does not exist -- skipping RDS write\n", cache_dir)) } @@ -240,47 +186,29 @@ forgejo_token <- Sys.getenv("FORGEJO_TOKEN") if (nchar(forgejo_token) == 0) { cat("FORGEJO_TOKEN not set -- skipping issue update\n") } else { - issue_title <- sprintf( - "Missing package binaries for latest version (%s)", - os_family - ) + issue_title <- sprintf("Missing package binaries for latest version (%s)", os_family) - n_missing <- nrow(missing_dt) - n_rebuild <- nrow(rebuildable_dt) + n_missing <- nrow(missing_dt) + n_rebuild <- nrow(rebuildable_dt) - arch_lines <- sprintf( - "### %s (%d missing, %d to rebuild)", - arch, - n_missing, - n_rebuild - ) + arch_lines <- sprintf("### %s (%d missing, %d to rebuild)", arch, n_missing, n_rebuild) if (nrow(rebuildable_dt) > 0) { - arch_lines <- c( - arch_lines, + arch_lines <- c(arch_lines, paste0("- ", rebuildable_dt$Package, " (", rebuildable_dt$Version, ")") ) } else { arch_lines <- c(arch_lines, "_None_") } if (nrow(known_failures_dt) > 0) { - arch_lines <- c( - arch_lines, + arch_lines <- c(arch_lines, "", "#### Known build failures", - paste0( - "- ", - known_failures_dt$Package, - " (", - known_failures_dt$Version, - ")" - ) + paste0("- ", known_failures_dt$Package, " (", known_failures_dt$Version, ")") ) } build_excluded_footer <- function() { - if (nrow(excluded_pkgs) == 0) { - return(character(0)) - } + if (nrow(excluded_pkgs) == 0) return(character(0)) entries <- paste( paste0(excluded_pkgs$package, " (", excluded_pkgs$reason, ")"), collapse = ", " @@ -289,12 +217,11 @@ if (nchar(forgejo_token) == 0) { } forgejo_base <- "https://git.devxy.io/api/v1" - repo <- "devxy/build-cran-binaries" + repo <- "devxy/build-cran-binaries" search_url <- sprintf( "%s/repos/%s/issues?type=issues&state=open&q=%s&limit=50", - forgejo_base, - repo, + forgejo_base, repo, utils::URLencode(issue_title, reserved = TRUE) ) search_resp <- httr2::request(search_url) |> @@ -303,19 +230,15 @@ if (nchar(forgejo_token) == 0) { existing_issues <- httr2::resp_body_json(search_resp, simplifyVector = FALSE) - match_idx <- which( - sapply(existing_issues, function(x) x$title) == issue_title - ) + match_idx <- which(sapply(existing_issues, function(x) x$title) == issue_title) today_str <- format(Sys.Date(), "%Y-%m-%d") if (length(match_idx) > 0) { # ---- Update existing issue ---- issue_number <- existing_issues[[match_idx[1]]]$number - old_body <- existing_issues[[match_idx[1]]]$body - if (is.null(old_body)) { - old_body <- "" - } + old_body <- existing_issues[[match_idx[1]]]$body + if (is.null(old_body)) old_body <- "" lines <- strsplit(old_body, "\n", fixed = TRUE)[[1]] @@ -335,11 +258,7 @@ if (nchar(forgejo_token) == 0) { if (length(plat_idx) == 0) { # Platform section missing -- insert before --- footer footer_idx <- which(lines == "---") - insert_at <- if (length(footer_idx) > 0) { - footer_idx[length(footer_idx)] - } else { - length(lines) + 1 - } + insert_at <- if (length(footer_idx) > 0) footer_idx[length(footer_idx)] else length(lines) + 1 new_plat_block <- c(sprintf("## %s", platform), "", arch_lines, "") lines <- c( @@ -352,14 +271,10 @@ if (nchar(forgejo_token) == 0) { # End of platform section: next ## or --- at a higher level, or EOF next_section <- which(grepl("^## |^---", lines) & seq_along(lines) > pi) - plat_end <- if (length(next_section) > 0) { - next_section[1] - 1 - } else { - length(lines) - } + plat_end <- if (length(next_section) > 0) next_section[1] - 1 else length(lines) - plat_lines <- lines[seq(pi, plat_end)] - arch_local_idx <- which(plat_lines == arch_header) + plat_lines <- lines[seq(pi, plat_end)] + arch_local_idx <- which(plat_lines == arch_header) if (length(arch_local_idx) == 0) { # Append arch subsection at end of platform block @@ -370,13 +285,11 @@ if (nchar(forgejo_token) == 0) { lines[seq(plat_end + 1, length(lines))] ) } else { - ai <- pi + arch_local_idx[1] - 1 # absolute line index + ai <- pi + arch_local_idx[1] - 1 # absolute line index # End of arch subsection - next_arch <- which( - grepl("^### |^## |^---", lines) & seq_along(lines) > ai - ) - arch_end <- if (length(next_arch) > 0) next_arch[1] - 1 else plat_end + next_arch <- which(grepl("^### |^## |^---", lines) & seq_along(lines) > ai) + arch_end <- if (length(next_arch) > 0) next_arch[1] - 1 else plat_end lines <- c( lines[seq_len(ai - 1)], @@ -389,12 +302,8 @@ if (nchar(forgejo_token) == 0) { # Rebuild excluded footer excl_hdr_idx <- which(lines == "## Excluded packages") if (length(excl_hdr_idx) > 0) { - pre_dash <- which(lines == "---" & seq_along(lines) < excl_hdr_idx[1]) - remove_from <- if (length(pre_dash) > 0) { - pre_dash[length(pre_dash)] - } else { - excl_hdr_idx[1] - } + pre_dash <- which(lines == "---" & seq_along(lines) < excl_hdr_idx[1]) + remove_from <- if (length(pre_dash) > 0) pre_dash[length(pre_dash)] else excl_hdr_idx[1] lines <- lines[seq_len(remove_from - 1)] } footer <- build_excluded_footer() @@ -404,15 +313,10 @@ if (nchar(forgejo_token) == 0) { new_body <- paste(lines, collapse = "\n") - patch_url <- sprintf( - "%s/repos/%s/issues/%d", - forgejo_base, - repo, - issue_number - ) + patch_url <- sprintf("%s/repos/%s/issues/%d", forgejo_base, repo, issue_number) httr2::request(patch_url) |> httr2::req_headers( - Authorization = paste("token", forgejo_token), + Authorization = paste("token", forgejo_token), `Content-Type` = "application/json" ) |> httr2::req_body_json(list(body = new_body)) |> @@ -420,6 +324,7 @@ if (nchar(forgejo_token) == 0) { httr2::req_perform() cat(sprintf("Updated Forgejo issue #%d: %s\n", issue_number, issue_title)) + } else { # ---- Create new issue ---- body_lines <- c( @@ -437,21 +342,17 @@ if (nchar(forgejo_token) == 0) { post_url <- sprintf("%s/repos/%s/issues", forgejo_base, repo) create_resp <- httr2::request(post_url) |> httr2::req_headers( - Authorization = paste("token", forgejo_token), + Authorization = paste("token", forgejo_token), `Content-Type` = "application/json" ) |> httr2::req_body_json(list( title = issue_title, - body = paste(body_lines, collapse = "\n") + body = paste(body_lines, collapse = "\n") )) |> httr2::req_perform() new_issue <- httr2::resp_body_json(create_resp) - cat(sprintf( - "Created Forgejo issue #%d: %s\n", - new_issue$number, - issue_title - )) + cat(sprintf("Created Forgejo issue #%d: %s\n", new_issue$number, issue_title)) } } diff --git a/renovate.json b/renovate.json index 53c7306..97ca6ad 100644 --- a/renovate.json +++ b/renovate.json @@ -1,7 +1,11 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["local>devxy/renovate-config"], - "ignorePaths": ["docker/**"], + "extends": [ + "local>devxy/renovate-config" + ], + "ignorePaths": [ + "docker/**" + ], "customManagers": [ { "customType": "regex",