├── .gitignore ├── dependencies ├── .gitignore ├── poppler │ ├── build.sh │ ├── docker-compose.yml │ ├── Dockerfile │ ├── Dockerfile-clang20 │ ├── Dockerfile-clang19 │ ├── Dockerfile-clang17 │ └── Dockerfile-clang18 ├── protobuf │ ├── build.sh │ ├── docker-compose.yml │ ├── Dockerfile │ ├── Dockerfile-clang17 │ ├── Dockerfile-clang19 │ ├── Dockerfile-clang20 │ └── Dockerfile-clang18 ├── skopeo │ ├── build.sh │ ├── docker-compose.yml │ └── Dockerfile ├── imagemagick │ ├── build.sh │ ├── docker-compose.yml │ ├── Dockerfile │ ├── Dockerfile-clang20 │ ├── Dockerfile-clang19 │ ├── Dockerfile-clang17 │ └── Dockerfile-clang18 └── jags │ ├── build.sh │ ├── package.fedora-38 │ ├── package.fedora-42 │ ├── Dockerfile-fedora38 │ ├── Dockerfile-fedora42 │ ├── Dockerfile │ ├── Dockerfile-clang20 │ ├── Dockerfile-clang19 │ ├── Dockerfile-clang17 │ ├── Dockerfile-clang18 │ └── docker-compose.yml ├── website ├── styles.css ├── update-manifest.R ├── .gitignore ├── DESCRIPTION ├── R │ ├── utils.R │ ├── cran.R │ ├── html.R │ └── docker.R ├── containers.qmd ├── _quarto.yml ├── tag.qmd ├── gha.qmd ├── internals.qmd └── local.qmd ├── containers ├── mkl │ ├── mklconfig.txt │ ├── oneAPI.repo │ ├── r-check │ └── Dockerfile ├── intel │ ├── mklconfig.txt │ ├── oneAPI.repo │ ├── r-check │ └── Dockerfile ├── donttest │ ├── rig.gpg │ ├── r-check │ └── Dockerfile ├── atlas │ ├── r-check │ └── Dockerfile ├── c23 │ ├── r-check │ └── Makevars ├── gcc13 │ ├── r-check │ └── Dockerfile ├── gcc14 │ ├── r-check │ └── Dockerfile ├── gcc15 │ ├── r-check │ └── Dockerfile ├── lto │ ├── r-check │ └── Dockerfile ├── nold │ ├── r-check │ └── Dockerfile ├── s390x │ ├── r-check │ └── Dockerfile ├── clang16 │ ├── r-check │ └── Makevars ├── clang17 │ ├── r-check │ └── Makevars ├── clang18 │ ├── r-check │ └── Makevars ├── clang19 │ ├── r-check │ └── Makevars ├── clang20 │ ├── r-check │ └── Makevars ├── gcc-asan │ └── r-check ├── noremap │ ├── r-check │ └── Makevars ├── ubuntu-next │ └── r-check ├── ubuntu-clang │ └── r-check ├── ubuntu-gcc12 │ └── r-check ├── ubuntu-release │ └── r-check ├── centos7 │ ├── r-check │ └── Dockerfile ├── rchk │ ├── r-check │ └── Dockerfile ├── valgrind │ ├── valgrind.supp │ ├── r-check │ └── Dockerfile ├── clang-asan │ ├── r-check │ └── Dockerfile ├── clang-ubsan │ ├── r-check │ └── Dockerfile ├── rhel8 │ └── Dockerfile ├── nosuggests │ ├── r-check │ └── Dockerfile ├── rhel7 │ └── Dockerfile └── rhel9 │ └── Dockerfile ├── README.md ├── tests ├── get-platforms.py └── get-containers.py ├── .github └── workflows │ ├── check-pkg-at-url.yml │ └── r-builds.yml └── docker-compose.yml /.gitignore: -------------------------------------------------------------------------------- 1 | /integration 2 | -------------------------------------------------------------------------------- /dependencies/.gitignore: -------------------------------------------------------------------------------- 1 | *.deb 2 | *.rpm 3 | -------------------------------------------------------------------------------- /website/styles.css: -------------------------------------------------------------------------------- 1 | /* css styles */ 2 | -------------------------------------------------------------------------------- /containers/mkl/mklconfig.txt: -------------------------------------------------------------------------------- 1 | default=exclude 2 | mkl=latest 3 | -------------------------------------------------------------------------------- /containers/intel/mklconfig.txt: -------------------------------------------------------------------------------- 1 | default=exclude 2 | mkl=latest 3 | -------------------------------------------------------------------------------- /dependencies/poppler/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | cp /root/*.deb /output 4 | -------------------------------------------------------------------------------- /dependencies/protobuf/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | cp /root/*.deb /output 4 | -------------------------------------------------------------------------------- /dependencies/skopeo/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | cp /root/*.deb /output 4 | -------------------------------------------------------------------------------- /website/update-manifest.R: -------------------------------------------------------------------------------- 1 | 2 | pkgload::load_all() 3 | update_manifest() 4 | -------------------------------------------------------------------------------- /dependencies/imagemagick/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | cp /root/*.deb /output 4 | -------------------------------------------------------------------------------- /website/.gitignore: -------------------------------------------------------------------------------- 1 | /.quarto/ 2 | /_site 3 | /index_cache 4 | /manifest.json 5 | -------------------------------------------------------------------------------- /dependencies/jags/build.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | cp /root/*.deb /output || cp /root/*.rpm /output 4 | -------------------------------------------------------------------------------- /containers/donttest/rig.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/r-hub/containers/HEAD/containers/donttest/rig.gpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Docker containers for R developers 3 | 4 | Please see the list of available containers and more information 5 | at . 6 | 7 | # License 8 | 9 | MIT @ The R Consortium, Posit PBC 10 | -------------------------------------------------------------------------------- /containers/mkl/oneAPI.repo: -------------------------------------------------------------------------------- 1 | [oneAPI] 2 | name=Intel® oneAPI repository 3 | baseurl=https://yum.repos.intel.com/oneapi 4 | enabled=1 5 | gpgcheck=1 6 | repo_gpgcheck=1 7 | gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB 8 | -------------------------------------------------------------------------------- /website/DESCRIPTION: -------------------------------------------------------------------------------- 1 | Package: rhubcontainersweb 2 | Version: 1.0.0 3 | License: MIT 4 | Depends: 5 | cli, 6 | gh, 7 | glue, 8 | jsonlite, 9 | prettyunits, 10 | processx, 11 | purrr 12 | Suggests: 13 | rmarkdown 14 | -------------------------------------------------------------------------------- /containers/intel/oneAPI.repo: -------------------------------------------------------------------------------- 1 | [oneAPI] 2 | name=Intel® oneAPI repository 3 | baseurl=https://yum.repos.intel.com/oneapi 4 | enabled=1 5 | gpgcheck=1 6 | repo_gpgcheck=1 7 | gpgkey=https://yum.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB 8 | -------------------------------------------------------------------------------- /website/R/utils.R: -------------------------------------------------------------------------------- 1 | 2 | first_char <- function(x) { 3 | substr(x, 1, 1) 4 | } 5 | 6 | last_char <- function(x) { 7 | substr(x, nchar(x), nchar(x)) 8 | } 9 | 10 | unquote <- function(x) { 11 | ifelse( 12 | first_char(x) == last_char(x) & first_char(x) %in% c("'", '"'), 13 | substr(x, 2L, nchar(x) - 1L), 14 | x 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /containers/atlas/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/c23/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/gcc13/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/gcc14/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/gcc15/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/lto/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/nold/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/s390x/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/clang16/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/clang17/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/clang18/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/clang19/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/clang20/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/donttest/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/gcc-asan/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/noremap/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/ubuntu-next/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/ubuntu-clang/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/ubuntu-gcc12/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/ubuntu-release/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | for pkg in `ls $checkdir/*.tar.gz`; do 17 | do_check "$pkg" 18 | done 19 | -------------------------------------------------------------------------------- /containers/lto/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ghcr.io/r-hub/containers/ubuntu-release:latest 3 | ENV R_HUB=true 4 | 5 | RUN makeconf="/opt/R/release/lib/R/etc/Makeconf"; \ 6 | sed -i -E '/^LTO ?=/ s/$/ '"-flto"/ "${makeconf}" && \ 7 | sed -i -E '/^LTO_FC ?=/ s/$/ '"-flto"/ "${makeconf}" && \ 8 | sed -i -E '/^LTO_OPT ?=/ s/$/ '"-flto"/ "${makeconf}" && \ 9 | sed -i -E '/^LTO_FC_OPT ?=/ s/$/ '"-flto"/ "${makeconf}" 10 | -------------------------------------------------------------------------------- /dependencies/skopeo/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | skopeo: 4 | platform: linux/amd64 5 | command: /root/build.sh 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | volumes: 10 | - .:/output 11 | 12 | skopeo-arm64: 13 | platform: linux/arm64 14 | command: /root/build.sh 15 | build: 16 | context: . 17 | dockerfile: Dockerfile 18 | volumes: 19 | - .:/output 20 | -------------------------------------------------------------------------------- /containers/intel/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -a && . /opt/intel/oneapi/setvars.sh && set +a 3 | set -e 4 | 5 | checkdir=${1-/check} 6 | 7 | do_check () { 8 | pkg=${1} 9 | echo Checking "$pkg" 10 | ( 11 | cd `dirname $pkg` 12 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 13 | R CMD check $CHECK_ARGS $pkg 14 | ) 15 | } 16 | 17 | for pkg in `ls $checkdir/*.tar.gz`; do 18 | do_check "$pkg" 19 | done 20 | -------------------------------------------------------------------------------- /containers/mkl/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -a && . /opt/intel/oneapi/setvars.sh && set +a 3 | set -e 4 | 5 | checkdir=${1-/check} 6 | 7 | do_check () { 8 | pkg=${1} 9 | echo Checking "$pkg" 10 | ( 11 | cd `dirname $pkg` 12 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 13 | R CMD check $CHECK_ARGS $pkg 14 | ) 15 | } 16 | 17 | for pkg in `ls $checkdir/*.tar.gz`; do 18 | do_check "$pkg" 19 | done 20 | -------------------------------------------------------------------------------- /containers/centos7/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 12 | R CMD check $CHECK_ARGS $pkg 13 | ) 14 | } 15 | 16 | if [[ -n "${R_VERSION}" ]]; then 17 | rig default "${R_VERSION}" 18 | fi 19 | 20 | for pkg in `ls $checkdir/*.tar.gz`; do 21 | do_check "$pkg" 22 | done 23 | -------------------------------------------------------------------------------- /dependencies/jags/package.fedora-38: -------------------------------------------------------------------------------- 1 | 2 | cat < /tmp/nfpm.yml 3 | name: jags 4 | version: 4.3.2 5 | arch: $(cat /tmp/arch) 6 | release: 1 7 | maintainer: Gabor Csardi 8 | description: | 9 | Just Another Gibbs Sampler 10 | vendor: Gabor Csardi 11 | homepage: https://mcmc-jags.sourceforge.io/ 12 | license: GPLv2 13 | depends: 14 | - libstdc++ 15 | - glibc 16 | - libgcc 17 | contents: 18 | - src: /opt/jags 19 | dst: / 20 | EOF 21 | 22 | nfpm package \ 23 | -f /tmp/nfpm.yml \ 24 | -p rpm \ 25 | -t /root 26 | -------------------------------------------------------------------------------- /dependencies/jags/package.fedora-42: -------------------------------------------------------------------------------- 1 | 2 | cat < /tmp/nfpm.yml 3 | name: jags 4 | version: 4.3.2 5 | arch: $(cat /tmp/arch) 6 | release: 1 7 | maintainer: Gabor Csardi 8 | description: | 9 | Just Another Gibbs Sampler 10 | vendor: Gabor Csardi 11 | homepage: https://mcmc-jags.sourceforge.io/ 12 | license: GPLv2 13 | depends: 14 | - libstdc++ 15 | - glibc 16 | - libgcc 17 | contents: 18 | - src: /opt/jags 19 | dst: / 20 | EOF 21 | 22 | nfpm package \ 23 | -f /tmp/nfpm.yml \ 24 | -p rpm \ 25 | -t /root 26 | -------------------------------------------------------------------------------- /containers/rchk/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = list(direct = 'LinkingTo', indirect = 'hard'))" 12 | tar xzf $pkg 13 | descdir="`tar tzf $pkg | grep DESCRIPTION | head -1`" 14 | package="`dirname $descdir`" 15 | cd $package 16 | /opt/R/devel-rchk/bin/rchk.sh 17 | ) 18 | } 19 | 20 | for pkg in `ls $checkdir/*.tar.gz`; do 21 | do_check "$pkg" 22 | done 23 | -------------------------------------------------------------------------------- /website/containers.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: R-hub containers 3 | --- 4 | 5 | ```{r include = FALSE, cache = FALSE} 6 | pkgload::load_all() 7 | conts <- load_new_manifest() 8 | ``` 9 | 10 | ```{r echo = FALSE, output = "asis", cache = FALSE} 11 | tags <- purrr::map_chr(conts$containers, "tag") 12 | out <- character(length(tags)) 13 | for (t in seq_along(tags)) { 14 | tag <- tags[t] 15 | out1 <- knitr::knit_child("tag.qmd", quiet = TRUE) 16 | out[t] <- paste(out1, collapse = "\n") 17 | } 18 | cat(out, sep = "\n\n") 19 | ``` 20 | 21 | --- 22 | Container data last updated: `r conts$updated`. 23 | Download [`manifest.json`](manifest.json) 24 | -------------------------------------------------------------------------------- /website/_quarto.yml: -------------------------------------------------------------------------------- 1 | project: 2 | type: website 3 | render: 4 | - "index.qmd" 5 | - "containers.qmd" 6 | - "local.qmd" 7 | - "gha.qmd" 8 | - "internals.qmd" 9 | 10 | website: 11 | title: "R-hub" 12 | navbar: 13 | left: 14 | - href: index.qmd 15 | text: Home 16 | - href: containers.qmd 17 | text: Containers 18 | - href: local.qmd 19 | text: Run on your machine 20 | - href: gha.qmd 21 | text: Run on GitHub Actions 22 | right: 23 | - href: internals.qmd 24 | text: Internals 25 | - href: https://github.com/r-hub/containers 26 | text: At GitHub 27 | 28 | format: 29 | html: 30 | theme: cosmo 31 | css: styles.css 32 | toc: true 33 | -------------------------------------------------------------------------------- /containers/clang16/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-16 2 | CC17 = clang-16 -std=gnu17 3 | CC23 = clang-16 -std=gnu2x 4 | CC90 = clang-16 -std=gnu90 5 | CC99 = clang-16 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic 8 | C17FLAGS=-O3 -Wall -pedantic 9 | C23FLAGS=-O3 -Wall -pedantic 10 | C90FLAGS=-O3 -Wall -pedantic 11 | C99FLAGS=-O3 -Wall -pedantic 12 | 13 | CXX=clang++-16 -stdlib=libc++ 14 | CXX11=clang++-16 -stdlib=libc++ 15 | CXX14=clang++-16 -stdlib=libc++ 16 | CXX17=clang++-16 -stdlib=libc++ 17 | CXX20=clang++-16 -stdlib=libc++ 18 | CXX23=clang++-16 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti 26 | 27 | FC=gfortran-12 28 | FFLAGS=-O2 -mtune=native -Wall -pedantic 29 | -------------------------------------------------------------------------------- /containers/noremap/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-16 2 | CC17 = clang-16 -std=gnu17 3 | CC23 = clang-16 -std=gnu2x 4 | CC90 = clang-16 -std=gnu90 5 | CC99 = clang-16 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic 8 | C17FLAGS=-O3 -Wall -pedantic 9 | C23FLAGS=-O3 -Wall -pedantic 10 | C90FLAGS=-O3 -Wall -pedantic 11 | C99FLAGS=-O3 -Wall -pedantic 12 | 13 | CXX=clang++-16 -stdlib=libc++ 14 | CXX11=clang++-16 -stdlib=libc++ 15 | CXX14=clang++-16 -stdlib=libc++ 16 | CXX17=clang++-16 -stdlib=libc++ 17 | CXX20=clang++-16 -stdlib=libc++ 18 | CXX23=clang++-16 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti 26 | 27 | FC=gfortran-12 28 | FFLAGS=-O2 -mtune=native -Wall -pedantic 29 | -------------------------------------------------------------------------------- /containers/c23/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-16 -std=gnu2x 2 | CC17 = clang-16 -std=gnu17 3 | CC23 = clang-16 -std=gnu2x 4 | CC90 = clang-16 -std=gnu90 5 | CC99 = clang-16 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic 8 | C17FLAGS=-O3 -Wall -pedantic 9 | C23FLAGS=-O3 -Wall -pedantic 10 | C90FLAGS=-O3 -Wall -pedantic 11 | C99FLAGS=-O3 -Wall -pedantic 12 | 13 | CXX=clang++-16 -stdlib=libc++ 14 | CXX11=clang++-16 -stdlib=libc++ 15 | CXX14=clang++-16 -stdlib=libc++ 16 | CXX17=clang++-16 -stdlib=libc++ 17 | CXX20=clang++-16 -stdlib=libc++ 18 | CXX23=clang++-16 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti 26 | 27 | FC=gfortran-12 28 | FFLAGS=-O2 -mtune=native -Wall -pedantic 29 | -------------------------------------------------------------------------------- /containers/valgrind/valgrind.supp: -------------------------------------------------------------------------------- 1 | # By R and R-hub 2 | 3 | { 4 | Suppression for wcsrtombs 5 | Memcheck:Cond 6 | fun:__wcsnlen_sse4_1 7 | fun:wcsrtombs 8 | fun:wcstombs 9 | } 10 | 11 | { 12 | Suppression for do_makename 13 | Memcheck:Addr16 14 | fun:__wcsnlen_sse4_1 15 | fun:wcsrtombs 16 | fun:wcstombs 17 | } 18 | 19 | { 20 | Suppression for gotoblas #1 21 | Memcheck:Value8 22 | fun:____strtoul_l_internal 23 | fun:get_coretype 24 | fun:gotoblas_dynamic_init 25 | fun:gotoblas_init 26 | fun:call_init 27 | fun:call_init 28 | fun:_dl_init 29 | fun:(below main) 30 | } 31 | 32 | { 33 | Suppression for gotoblas #2 34 | Memcheck:Cond 35 | fun:____strtoul_l_internal 36 | fun:get_coretype 37 | fun:gotoblas_dynamic_init 38 | fun:gotoblas_init 39 | fun:call_init 40 | fun:call_init 41 | fun:_dl_init 42 | fun:(below main) 43 | } 44 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-fedora38: -------------------------------------------------------------------------------- 1 | FROM fedora:38 2 | 3 | WORKDIR /root 4 | 5 | RUN curl -L -o jags.tar.gz \ 6 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 7 | tar xzf jags.tar.gz && \ 8 | rm jags.tar.gz 9 | 10 | RUN dnf install -y gcc gfortran g++ flexiblas-devel libtool 11 | 12 | RUN cd JAGS-* && \ 13 | ./configure --prefix=/usr --with-blas='-lflexiblas' && \ 14 | make && \ 15 | make install DESTDIR=/opt/jags 16 | 17 | RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch 18 | 19 | RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ 20 | dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ 21 | rm "nfpm_$(cat /tmp/arch).rpm" 22 | 23 | COPY package.fedora-38 /root/package.sh 24 | 25 | RUN /root/package.sh 26 | 27 | COPY build.sh /root/build.sh 28 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-fedora42: -------------------------------------------------------------------------------- 1 | FROM fedora:42 2 | 3 | WORKDIR /root 4 | 5 | RUN curl -L -o jags.tar.gz \ 6 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 7 | tar xzf jags.tar.gz && \ 8 | rm jags.tar.gz 9 | 10 | RUN dnf install -y gcc gfortran g++ flexiblas-devel libtool 11 | 12 | RUN cd JAGS-* && \ 13 | ./configure --prefix=/usr --with-blas='-lflexiblas' && \ 14 | make && \ 15 | make install DESTDIR=/opt/jags 16 | 17 | RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch 18 | 19 | RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(cat /tmp/arch).rpm" && \ 20 | dnf install -y "nfpm_$(cat /tmp/arch).rpm" && \ 21 | rm "nfpm_$(cat /tmp/arch).rpm" 22 | 23 | COPY package.fedora-42 /root/package.sh 24 | 25 | RUN /root/package.sh 26 | 27 | COPY build.sh /root/build.sh 28 | -------------------------------------------------------------------------------- /tests/get-platforms.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import yaml 4 | import json 5 | import argparse 6 | 7 | parser = argparse.ArgumentParser(description="Print R-builds platforms as JSON.") 8 | parser.add_argument( 9 | 'platforms', 10 | type = str, 11 | nargs = '?', 12 | default = 'all', 13 | help = 'Comma-separated list of platforms. Default is "all" to use all platforms.' 14 | ) 15 | args = parser.parse_args() 16 | 17 | with open("docker-compose.yml", "r") as stream: 18 | try: 19 | conf = yaml.safe_load(stream) 20 | serv = conf.get("services") 21 | keys = serv.keys() 22 | skeys = [ str(key) for key in keys ] 23 | if args.platforms != 'all': 24 | platforms = args.platforms.split(",") 25 | skeys = [ p for p in platforms if p in skeys ] 26 | print(json.dumps(skeys)) 27 | 28 | except yaml.YAMLError as exc: 29 | print(exc) 30 | -------------------------------------------------------------------------------- /website/R/cran.R: -------------------------------------------------------------------------------- 1 | 2 | issues_summary <- function(exclude = c("OK", "NOTE")) { 3 | x <- tools:::CRAN_check_details() 4 | x <- subset(x, ! Status %in% exclude) 5 | tab <- as.data.frame( 6 | with(x, table(substring(Check, 1, 42), factor(Flavor))) 7 | ) 8 | names(tab) <- c("check", "flavor", "count") 9 | tab 10 | } 11 | 12 | issues_flavors_summary <- function(exclude = c("OK", "NOTE")) { 13 | x <- tools:::CRAN_check_details() 14 | x <- subset(x, ! Status %in% exclude) 15 | tab <- as.data.frame(table(x$Flavor)) 16 | names(tab) <- c("flavor", "count") 17 | tab 18 | } 19 | 20 | additional_issues <- function() { 21 | x <- readRDS(gzcon(url( 22 | "https://cran.r-project.org/web/checks/check_issues.rds" 23 | ))) 24 | as.data.frame(x) 25 | } 26 | 27 | additional_issues_summary <- function() { 28 | x <- readRDS(gzcon(url( 29 | "https://cran.r-project.org/web/checks/check_issues.rds" 30 | ))) 31 | tab <- as.data.frame(table(x$kind)) 32 | names(tab) <- c("kind", "count") 33 | tab 34 | } 35 | -------------------------------------------------------------------------------- /website/R/html.R: -------------------------------------------------------------------------------- 1 | 2 | format_id <- function(id) { 3 | id <- sub("^ghcr.io/r-hub/containers/[-.a-zA-Z0-9]+@sha256:", "", id) 4 | substr(id, 1, 7) 5 | } 6 | 7 | format_tag <- function(tag) { 8 | tag <- sub("ghcr.io/r-hub/containers/", "", tag, fixed = TRUE) 9 | tag <- sub(":latest", "", tag, fixed = TRUE) 10 | tag 11 | } 12 | 13 | get_cont_data <- function(id) { 14 | conts <- load_new_manifest() 15 | tags <- format_tag(purrr::map_chr(conts$containers, "tag")) 16 | if (!id %in% tags) stop("Unknown container: ", id) 17 | conts$containers[[which(tags == id)]]$builds[[1]] 18 | } 19 | 20 | os_name <- function(id) { 21 | cont <- get_cont_data(id) 22 | os_release <- strsplit(cont$`/etc/os-release`, "\n", fixed = TRUE)[[1]] 23 | pn <- grep("^PRETTY_NAME", os_release, value = TRUE)[1] 24 | pn <- sub("^PRETTY_NAME=", "", pn) 25 | pn <- unquote(pn) 26 | pn 27 | } 28 | 29 | r_ver <- function(id) { 30 | cont <- get_cont_data(id) 31 | sess <- strsplit(cont$`sessionInfo()`, "\n", fixed = TRUE)[[1]] 32 | sess[1] 33 | } 34 | -------------------------------------------------------------------------------- /tests/get-containers.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import os 4 | import json 5 | import argparse 6 | 7 | parser = argparse.ArgumentParser(description="Print containers as JSON.") 8 | parser.add_argument( 9 | 'containers', 10 | type = str, 11 | nargs = '?', 12 | default = 'all', 13 | help = 'Comma-separated list of containers. Default is "all" to use all containers.' 14 | ) 15 | args = parser.parse_args() 16 | 17 | conts = os.listdir("containers") 18 | if args.containers != 'all': 19 | containers = args.containers.split(",") 20 | conts = [ p for p in containers if p in conts ] 21 | 22 | # some hardcoded platforms and secrets 23 | testplatforms = { 24 | 's390x': 'linux/s390x' 25 | } 26 | platforms = { 27 | 's390x': 'linux/s390x', 28 | 'rhel8': 'linux/amd64,linux/arm64', 29 | 'rhel9': 'linux/amd64,linux/arm64' 30 | } 31 | conf = [ { 32 | 'container': c, 33 | 'testplatform': testplatforms[c] if c in testplatforms else 'linux/amd64', 34 | 'platform': platforms[c] if c in platforms else 'linux/amd64' 35 | } for c in conts ] 36 | 37 | print(json.dumps(conf)) 38 | -------------------------------------------------------------------------------- /containers/clang19/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-19 2 | CC17 = clang-19 -std=gnu17 3 | CC23 = clang-19 -std=gnu2x 4 | CC90 = clang-19 -std=gnu90 5 | CC99 = clang-19 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 8 | C17FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 9 | C23FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 10 | C90FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 11 | C99FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 12 | 13 | CXX=clang++-19 -stdlib=libc++ 14 | CXX11=clang++-19 -stdlib=libc++ 15 | CXX14=clang++-19 -stdlib=libc++ 16 | CXX17=clang++-19 -stdlib=libc++ 17 | CXX20=clang++-19 -stdlib=libc++ 18 | CXX23=clang++-19 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 26 | 27 | FC=flang-new-19 28 | FFLAGS=-O2 -pedantic 29 | FLIBS=-L/usr/lib/llvm-19/lib -lFortranRuntime -lFortranDecimal -lm 30 | -------------------------------------------------------------------------------- /containers/clang20/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-20 2 | CC17 = clang-20 -std=gnu17 3 | CC23 = clang-20 -std=gnu2x 4 | CC90 = clang-20 -std=gnu90 5 | CC99 = clang-20 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 8 | C17FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 9 | C23FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 10 | C90FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 11 | C99FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 12 | 13 | CXX=clang++-20 -stdlib=libc++ 14 | CXX11=clang++-20 -stdlib=libc++ 15 | CXX14=clang++-20 -stdlib=libc++ 16 | CXX17=clang++-20 -stdlib=libc++ 17 | CXX20=clang++-20 -stdlib=libc++ 18 | CXX23=clang++-20 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 26 | 27 | FC=flang-new-20 28 | FFLAGS=-O2 -pedantic 29 | FLIBS=-L/usr/lib/llvm-20/lib -lFortranRuntime -lFortranDecimal -lm 30 | -------------------------------------------------------------------------------- /containers/clang17/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-17 2 | CC17 = clang-17 -std=gnu17 3 | CC23 = clang-17 -std=gnu2x 4 | CC90 = clang-17 -std=gnu90 5 | CC99 = clang-17 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 8 | C17FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 9 | C23FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 10 | C90FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 11 | C99FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 12 | 13 | CXX=clang++-17 -stdlib=libc++ 14 | CXX11=clang++-17 -stdlib=libc++ 15 | CXX14=clang++-17 -stdlib=libc++ 16 | CXX17=clang++-17 -stdlib=libc++ 17 | CXX20=clang++-17 -stdlib=libc++ 18 | CXX23=clang++-17 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 26 | 27 | FC=flang-new-17 28 | FFLAGS=-O2 -pedantic 29 | FLIBS=-L/usr/lib/llvm-17/lib -lFortran_main -lFortranRuntime -lFortranDecimal -lm 30 | -------------------------------------------------------------------------------- /containers/clang18/Makevars: -------------------------------------------------------------------------------- 1 | CC=clang-18 2 | CC17 = clang-18 -std=gnu17 3 | CC23 = clang-18 -std=gnu2x 4 | CC90 = clang-18 -std=gnu90 5 | CC99 = clang-18 -std=gnu99 6 | 7 | CFLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 8 | C17FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 9 | C23FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 10 | C90FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 11 | C99FLAGS=-O3 -Wall -pedantic -Wp,-D_FORTIFY_SOURCE=3 12 | 13 | CXX=clang++-18 -stdlib=libc++ 14 | CXX11=clang++-18 -stdlib=libc++ 15 | CXX14=clang++-18 -stdlib=libc++ 16 | CXX17=clang++-18 -stdlib=libc++ 17 | CXX20=clang++-18 -stdlib=libc++ 18 | CXX23=clang++-18 -stdlib=libc++ 19 | 20 | CXXFLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 21 | CXX11FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 22 | CXX14FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 23 | CXX17FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 24 | CXX20FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 25 | CXX23FLAGS=-O3 -Wall -pedantic -frtti -Wp,-D_FORTIFY_SOURCE=3 26 | 27 | FC=flang-new-18 28 | FFLAGS=-O2 -pedantic 29 | FLIBS=-L/usr/lib/llvm-18/lib -lFortran_main -lFortranRuntime -lFortranDecimal -lm 30 | F_VISIBILITY= 31 | -------------------------------------------------------------------------------- /containers/clang-asan/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | cd `dirname $pkg` 10 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 11 | R CMD check $CHECK_ARGS $pkg 12 | packagename=$(basename $pkg | sed "s/_.*$//") 13 | cd ${packagename}.Rcheck 14 | fail=false 15 | exfile="${packagename}-Ex.Rout" 16 | pattern='UndefinedBehaviorSanitizer\|AddressSanitizer' 17 | if [[ -f "${exfile}" ]] && grep -q ${pattern} ${exfile}; then 18 | fail=true 19 | echo ---------------------------------------------------------- 20 | echo ${exfile} 21 | echo ---------------------------------------------------------- 22 | cat ${exfile} 23 | echo ---------------------------------------------------------- 24 | fi 25 | testfiles=$(ls tests | grep ".Rout.fail$") 26 | for f in $testfiles; do 27 | if grep -q ${pattern} tests/$f; then 28 | fail=true 29 | echo ---------------------------------------------------------- 30 | echo tests/${f} 31 | echo ---------------------------------------------------------- 32 | cat tests/${f} 33 | echo ---------------------------------------------------------- 34 | fi 35 | done 36 | if [[ "$fail" = "true" ]]; then exit 1; fi 37 | } 38 | 39 | for pkg in `ls $checkdir/*.tar.gz`; do 40 | do_check "$pkg" 41 | done 42 | -------------------------------------------------------------------------------- /containers/clang-ubsan/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | cd `dirname $pkg` 10 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 11 | R CMD check $CHECK_ARGS $pkg 12 | packagename=$(basename $pkg | sed "s/_.*$//") 13 | cd ${packagename}.Rcheck 14 | fail=false 15 | exfile="${packagename}-Ex.Rout" 16 | pattern='UndefinedBehaviorSanitizer\|AddressSanitizer' 17 | if [[ -f "${exfile}" ]] && grep -q ${pattern} ${exfile}; then 18 | fail=true 19 | echo ---------------------------------------------------------- 20 | echo ${exfile} 21 | echo ---------------------------------------------------------- 22 | cat ${exfile} 23 | echo ---------------------------------------------------------- 24 | fi 25 | testfiles=$(ls tests | grep ".Rout.fail$") 26 | for f in $testfiles; do 27 | if grep -q ${pattern} tests/$f; then 28 | fail=true 29 | echo ---------------------------------------------------------- 30 | echo tests/${f} 31 | echo ---------------------------------------------------------- 32 | cat tests/${f} 33 | echo ---------------------------------------------------------- 34 | fi 35 | done 36 | if [[ "$fail" = "true" ]]; then exit 1; fi 37 | } 38 | 39 | for pkg in `ls $checkdir/*.tar.gz`; do 40 | do_check "$pkg" 41 | done 42 | -------------------------------------------------------------------------------- /.github/workflows/check-pkg-at-url.yml: -------------------------------------------------------------------------------- 1 | 2 | name: Check any R package at an URL 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | inpurl: 8 | description: 'URL to a source R package' 9 | required: true 10 | type: string 11 | inpcont: 12 | description: 'Check container' 13 | required: true 14 | type: choice 15 | options: 16 | - 'atlas' 17 | - 'centos7' 18 | - 'clang-asan' 19 | - 'clang16' 20 | - 'gcc13' 21 | - 'nold' 22 | - 'ubuntu-clang' 23 | - 'ubuntu-gcc12' 24 | - 'ubuntu-next' 25 | - 'ubuntu-release' 26 | inprver: 27 | description: 'R version (for containers with multiple R versions)' 28 | required: false 29 | type: string 30 | 31 | jobs: 32 | check: 33 | runs-on: ubuntu-latest 34 | name: Check with ${{ github.event.inputs.inpcont }} 35 | container: 36 | image: ghcr.io/r-hub/containers/${{ github.event.inputs.inpcont }}:latest 37 | 38 | steps: 39 | - name: Download package 40 | run: | 41 | mkdir /check 42 | cd /check 43 | curl -LO "${{ github.event.inputs.inpurl }}" 44 | 45 | - name: Install dependencies and check package 46 | run: r-check 47 | env: 48 | R_VERSION: ${{ github.event.inputs.inprver }} 49 | 50 | - name: Upload check result as artifact 51 | if: always() 52 | uses: actions/upload-artifact@v4 53 | with: 54 | name: check-results 55 | path: /check 56 | -------------------------------------------------------------------------------- /containers/valgrind/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | cd `dirname $pkg` 10 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 11 | R CMD check $CHECK_ARGS $pkg 12 | packagename=$(basename $pkg | sed "s/_.*$//") 13 | cd ${packagename}.Rcheck 14 | fail=false 15 | exfile="${packagename}-Ex.Rout" 16 | if [[ -f "${exfile}" ]] && grep -q '^==[0-9][0-9]*==\s*at' ${exfile}; then 17 | fail=true 18 | echo ---------------------------------------------------------- 19 | echo ${exfile} 20 | echo ---------------------------------------------------------- 21 | cat ${exfile} 22 | echo ---------------------------------------------------------- 23 | fi 24 | if [[ -d tests ]]; then 25 | testfiles=$(ls tests | grep ".Rout.fail$") 26 | for f in $testfiles; do 27 | if grep -q '^==[0-9][0-9]*==\s*at' tests/$f; then 28 | fail=true 29 | echo ---------------------------------------------------------- 30 | echo tests/${f} 31 | echo ---------------------------------------------------------- 32 | cat tests/${f} 33 | echo ---------------------------------------------------------- 34 | fi 35 | done 36 | fi 37 | if [[ "$fail" = "true" ]]; then exit 1; fi 38 | } 39 | 40 | for pkg in `ls $checkdir/*.tar.gz`; do 41 | do_check "$pkg" 42 | done 43 | -------------------------------------------------------------------------------- /dependencies/skopeo/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl libgpgme-dev libassuan-dev libbtrfs-dev \ 9 | libdevmapper-dev pkg-config 10 | 11 | RUN export DEBIAN_FRONTEND=noninteractive && \ 12 | apt-get update -y && \ 13 | apt-get install -y golang-1.18 go-md2man 14 | 15 | ENV GOROOT="/usr/lib/go-1.18" 16 | 17 | RUN curl -L https://github.com/containers/skopeo/archive/refs/tags/v1.11.1.tar.gz \ 18 | -o skopeo-1.11.1.tar.gz && \ 19 | mkdir -p $GOROOT/src/github.com/containers && \ 20 | tar xzf skopeo-*.tar.gz -C $GOROOT/src/github.com/containers 21 | 22 | RUN export DEBIAN_FRONTEND=noninteractive && \ 23 | apt-get update -y && \ 24 | apt-get install -y make checkinstall 25 | 26 | RUN cd $GOROOT/src/github.com/containers/skopeo-* && \ 27 | export PATH=/usr/lib/go-1.18/bin:$PATH && \ 28 | make bin/skopeo 29 | 30 | RUN cd $GOROOT/src/github.com/containers/skopeo-* && \ 31 | export PATH=/usr/lib/go-1.18/bin:$PATH && \ 32 | checkinstall -y -D --pkgname skopeo \ 33 | --maintainer "csardi.gabor@gmail.com" \ 34 | --requires '"libc6 (>= 2.34), libdevmapper1.02.1 (>= 2:1.02.97), libgpgme11 (>= 1.4.1), libassuan0 (>= 2.5.5), libselinux1 (>= 3.3), libudev1 (>= 249.11), libpcre2-8-0 (>= 10.39)"' \ 35 | --arch $(dpkg --print-architecture) \ 36 | --pkglicense "Apache-2.0" 37 | 38 | RUN cp $GOROOT/src/github.com/containers/skopeo-*/*.deb /root 39 | 40 | COPY build.sh /root/build.sh 41 | -------------------------------------------------------------------------------- /containers/s390x/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM --platform=linux/s390x ubuntu:24.04 3 | ENV R_HUB=true 4 | 5 | RUN export DEBIAN_FRONTEND=noninteractive && \ 6 | apt-get update && \ 7 | apt-get install -y r-base && \ 8 | apt-get clean 9 | 10 | # Use R-hub repo 11 | RUN echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/ubuntu-24.04-s390x/4.3', getOption('repos')))" \ 12 | >> /usr/lib/R/library/base/R/Rprofile 13 | 14 | # System requirements that pak does not know about 15 | RUN export DEBIAN_FRONTEND=noninteractive && \ 16 | apt-get update -y && \ 17 | apt-get install -y patch && \ 18 | apt-get clean 19 | 20 | # Install pak into system lib 21 | RUN export DEBIAN_FRONTEND=noninteractive && \ 22 | apt-get update && \ 23 | apt-get install -y libcurl4-openssl-dev && \ 24 | apt-get clean 25 | RUN R -q -e 'install.packages("pak", lib = .Library)' 26 | RUN R -q -e 'library(pak)' 27 | 28 | # Locale 29 | 30 | RUN export DEBIAN_FRONTEND=noninteractive && \ 31 | apt-get update -y && \ 32 | apt-get install -y locales && \ 33 | apt-get clean && \ 34 | locale-gen en_GB.UTF-8 en_US.UTF-8 && \ 35 | update-locale 36 | ENV LC_ALL en_US.UTF-8 37 | ENV LC_COLLATE C 38 | ENV LANG en_US.UTF-8 39 | ENV TZ UTC 40 | 41 | # useful for R CMD check 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get update -y && \ 45 | apt-get install -y devscripts && \ 46 | apt-get clean 47 | 48 | # Very minimal test 49 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 50 | 51 | # Copy check script 52 | 53 | COPY r-check /usr/local/bin 54 | 55 | # check config 56 | 57 | ENV _R_CHECK_BASHISMS_=false 58 | 59 | WORKDIR /root 60 | -------------------------------------------------------------------------------- /.github/workflows/r-builds.yml: -------------------------------------------------------------------------------- 1 | 2 | name: R builds 3 | 4 | on: 5 | workflow_dispatch: 6 | inputs: 7 | platforms: 8 | description: | 9 | Comma-separated list of platforms. Default is "all" to use all platforms. 10 | required: false 11 | default: 'all' 12 | type: string 13 | schedule: 14 | - cron: '55 2 * * *' 15 | 16 | permissions: 17 | contents: write 18 | 19 | jobs: 20 | setup-matrix: 21 | runs-on: ubuntu-latest 22 | outputs: 23 | platforms: ${{ steps.setup-matrix.outputs.platforms }} 24 | steps: 25 | - uses: actions/checkout@v4 26 | - name: Set up matrix of R builds 27 | id: setup-matrix 28 | run: | 29 | platforms=$(python tests/get-platforms.py ${{ github.event.inputs.platforms }}) 30 | echo "platforms=$platforms" >> $GITHUB_OUTPUT 31 | 32 | package-files: 33 | needs: setup-matrix 34 | strategy: 35 | fail-fast: false 36 | matrix: 37 | platform: ${{ fromJson(needs.setup-matrix.outputs.platforms) }} 38 | runs-on: ubuntu-latest 39 | name: ${{ matrix.platform }} 40 | steps: 41 | - uses: actions/checkout@v4 42 | 43 | - name: Build base image 44 | run: docker compose build ${{ matrix.platform }} 45 | 46 | - name: Build R 47 | run: docker compose up ${{ matrix.platform }} 48 | 49 | - name: Copy package 50 | run: | 51 | pkg=$(find integration -name "*.deb" -or -name "*.rpm") 52 | cp "$pkg" . 53 | ls -l "$pkg" 54 | 55 | - name: Release 56 | uses: softprops/action-gh-release@v1 57 | with: 58 | files: | 59 | *-rstudio-*.deb 60 | *-rstudio-*.rpm 61 | name: "Latest builds" 62 | tag_name: latest 63 | -------------------------------------------------------------------------------- /containers/rhel8/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM redhat/ubi8:latest 2 | ENV R_HUB=true 3 | 4 | ARG R_VERSION=release 5 | 6 | # To work around a rig bug and a pak bug 7 | ENV RIG_PLATFORM=rhel-8 8 | ENV PKG_SYSREQS_PLATFORM=redhat-8 9 | ENV LANG=en_US.UTF-8 10 | ENV TZ=UTC 11 | 12 | # ## Notes 13 | # 14 | # * Need to do this in a single step, so no layer is registered. 15 | # (Although I am not sure if that would be a real problem.) 16 | # * Need to supply two secrets, for the RedHat Org and the activation key: 17 | # REDHAT_ORG_RHEL8=... REDHAT_ACTIVATION_KEY_RHEL8=... \ 18 | # docker build --secret id=REDHAT_ORG_RHEL8 \ 19 | # --secret id=REDHAT_ACTIVATION_KEY_RHEL8 . 20 | # * We install a couple of packages that allow installing the tidyverse 21 | # without registration. 22 | # * You can use rig to install more R versions, but this currently needs 23 | # registration: https://github.com/r-lib/rig/issues/247 24 | 25 | RUN --mount=type=secret,id=REDHAT_ORG_RHEL8 \ 26 | --mount=type=secret,id=REDHAT_ACTIVATION_KEY_RHEL8 \ 27 | subscription-manager register \ 28 | --org `cat /run/secrets/REDHAT_ORG_RHEL8` \ 29 | --activationkey `cat /run/secrets/REDHAT_ACTIVATION_KEY_RHEL8` && \ 30 | yum install -y https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm && \ 31 | rig add ${R_VERSION} && \ 32 | yum install -y harfbuzz-devel fribidi-devel glibc-langpack-en diffutils perl patch && \ 33 | yum clean all && \ 34 | rm -rf /tmp/* && \ 35 | subscription-manager unregister 36 | 37 | # For R CMD check 38 | 39 | RUN curl -o /usr/local/bin/checkbashisms \ 40 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 41 | chmod +x /usr/local/bin/checkbashisms 42 | 43 | # Very minimal test 44 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 45 | -------------------------------------------------------------------------------- /containers/nosuggests/r-check: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | set -e 3 | 4 | checkdir=${1-/check} 5 | 6 | do_check () { 7 | pkg=${1} 8 | echo Checking "$pkg" 9 | ( 10 | cd `dirname $pkg` 11 | 12 | # We do _not_ install soft dependencies, but we need to install some 13 | # testing packages, if they are requested: 14 | # https://github.com/wch/r-source/blob/19442601da115d28f6e5a8341e0e62ed8d0aa11c/src/library/tools/R/check.R#L220 15 | # Currently they are: RUnit, testthat, tinytest. 16 | # We also include all packages in 'VignetteBuilder', we assume no 17 | # dependency requirements here. 18 | 19 | # NOTE: this also works if a package has 'Remotes' package sources 20 | # declared to the testing package or the vignette builder. 21 | 22 | R -q -e " 23 | options(pak.no_extra_messages = TRUE) 24 | testing <- c('testthat', 'RUnit', 'tinytest') 25 | vign <- pak:::remote(function() { 26 | desc::desc_get_list('VignetteBuilder', character(), file = '$pkg') 27 | }) 28 | ok <- c(vign, testing) 29 | suggested <- pak::pkg_deps( 30 | 'deps::$pkg', 31 | dependencies = list(direct = 'Suggests', indirect = character()) 32 | ) 33 | # drop the 'deps::...' ref 34 | suggested <- suggested[-1,,drop = FALSE] 35 | # use 'ref', not 'package', so Remotes work 36 | extra <- suggested[['ref']][ suggested[['package']] %in% ok ] 37 | pak::pkg_install(c('deps::$pkg', extra))" 38 | 39 | # We remove pak from the system library, to checks packages 40 | # depending on it properly 41 | R -q -e 'remove.packages("pak", lib = .Library)' 42 | 43 | R CMD check $CHECK_ARGS $pkg 44 | ) 45 | } 46 | 47 | for pkg in `ls $checkdir/*.tar.gz`; do 48 | do_check "$pkg" 49 | done 50 | -------------------------------------------------------------------------------- /containers/rhel7/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM registry.access.redhat.com/ubi7/ubi 2 | ENV R_HUB=true 3 | 4 | ARG R_VERSION=release 5 | 6 | RUN rm /etc/rhsm-host 7 | 8 | # To work around a rig bug and a pak bug 9 | ENV RIG_PLATFORM=rhel-7 10 | ENV PKG_SYSREQS_PLATFORM=redhat-7 11 | 12 | # ## Notes 13 | # 14 | # * Need to do this in a single step, so no layer is registered. 15 | # (Although I am not sure if that would be a real problem.) 16 | # * Need to supply two secrets, for the RedHat Org and the activation key: 17 | # REDHAT_ORG_RHEL7=... REDHAT_ACTIVATION_KEY_RHEL7=... \ 18 | # docker build --platform linux/amd64 \ 19 | # --secret id=REDHAT_ORG_RHEL7 --secret id=REDHAT_ACTIVATION_KEY_RHEL7 . 20 | # * There is no RHEL7 for linux/arm64, you need to supply `--platform` when 21 | # building on a non-x86_64 platform. 22 | # * We install a couple of packages that allow installing the tidyverse 23 | # without registration. 24 | # * You can use rig to install more R versions, but this currently needs 25 | # registration: https://github.com/r-lib/rig/issues/247 26 | 27 | RUN --mount=type=secret,id=REDHAT_ORG_RHEL7 \ 28 | --mount=type=secret,id=REDHAT_ACTIVATION_KEY_RHEL7 \ 29 | subscription-manager register \ 30 | --org `cat /run/secrets/REDHAT_ORG_RHEL7` \ 31 | --activationkey `cat /run/secrets/REDHAT_ACTIVATION_KEY_RHEL7` && \ 32 | yum install -y https://archives.fedoraproject.org/pub/archive/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm && \ 33 | yum install -y https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm && \ 34 | rig add ${R_VERSION} && \ 35 | yum install -y harfbuzz-devel fribidi-devel libtiff-devel devscripts-minimal patch && \ 36 | yum clean all && \ 37 | rm -rf /tmp/* && \ 38 | subscription-manager unregister 39 | 40 | # For R CMD check 41 | ENV _R_CHECK_BASHISMS_=false 42 | 43 | # Very minimal test 44 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 45 | -------------------------------------------------------------------------------- /containers/rhel9/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM redhat/ubi9:latest 2 | ENV R_HUB=true 3 | 4 | ARG R_VERSION=release 5 | 6 | # To work around a rig bug and a pak bug 7 | ENV RIG_PLATFORM=rhel-9 8 | ENV PKG_SYSREQS_PLATFORM=redhat-9 9 | ENV LANG=en_US.UTF-8 10 | ENV TZ=UTC 11 | 12 | # ## Notes 13 | # 14 | # * Need to do this in a single step, so no layer is registered. 15 | # (Although I am not sure if that would be a real problem.) 16 | # * Need to supply two secrets, for the RedHat Org and the activation key: 17 | # REDHAT_ORG_RHEL9=... REDHAT_ACTIVATION_KEY_RHEL9=... \ 18 | # docker build --secret id=REDHAT_ORG_RHEL9 \ 19 | # --secret id=REDHAT_ACTIVATION_KEY_RHEL9 . 20 | # * We install a couple of packages that allow installing the tidyverse 21 | # without registration. 22 | # * You can use rig to install more R versions, but this currently needs 23 | # registration: https://github.com/r-lib/rig/issues/247 24 | # * The sed line fixes this bug: https://github.com/r-lib/rig/issues/248 25 | 26 | RUN --mount=type=secret,id=REDHAT_ORG_RHEL9 \ 27 | --mount=type=secret,id=REDHAT_ACTIVATION_KEY_RHEL9 \ 28 | subscription-manager register \ 29 | --org `cat /run/secrets/REDHAT_ORG_RHEL9` \ 30 | --activationkey `cat /run/secrets/REDHAT_ACTIVATION_KEY_RHEL9` && \ 31 | yum install -y https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm && \ 32 | rig add ${R_VERSION} && \ 33 | sed -i 's|/rhel8/|/rhel9/|g' /opt/R/current/lib/R/library/base/R/Rprofile && \ 34 | yum install -y --allowerasing fribidi-devel glibc-langpack-en diffutils perl libcurl patch && \ 35 | yum clean all && \ 36 | rm -rf /tmp/* && \ 37 | subscription-manager unregister 38 | 39 | # For R CMD check 40 | 41 | RUN curl -o /usr/local/bin/checkbashisms \ 42 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 43 | chmod +x /usr/local/bin/checkbashisms 44 | 45 | # Very minimal test 46 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 47 | -------------------------------------------------------------------------------- /dependencies/poppler/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | poppler: 4 | platform: linux/amd64 5 | command: /root/build.sh 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | volumes: 10 | - .:/output 11 | 12 | poppler-clang17: 13 | platform: linux/amd64 14 | command: /root/build.sh 15 | build: 16 | context: . 17 | dockerfile: Dockerfile-clang17 18 | volumes: 19 | - .:/output 20 | 21 | poppler-clang18: 22 | platform: linux/amd64 23 | command: /root/build.sh 24 | build: 25 | context: . 26 | dockerfile: Dockerfile-clang18 27 | volumes: 28 | - .:/output 29 | 30 | poppler-clang19: 31 | platform: linux/amd64 32 | command: /root/build.sh 33 | build: 34 | context: . 35 | dockerfile: Dockerfile-clang19 36 | volumes: 37 | - .:/output 38 | 39 | poppler-clang20: 40 | platform: linux/amd64 41 | command: /root/build.sh 42 | build: 43 | context: . 44 | dockerfile: Dockerfile-clang20 45 | volumes: 46 | - .:/output 47 | 48 | poppler-arm64: 49 | platform: linux/arm64 50 | command: /root/build.sh 51 | build: 52 | context: . 53 | dockerfile: Dockerfile 54 | volumes: 55 | - .:/output 56 | 57 | poppler-clang17-arm64: 58 | platform: linux/arm64 59 | command: /root/build.sh 60 | build: 61 | context: . 62 | dockerfile: Dockerfile-clang17 63 | volumes: 64 | - .:/output 65 | 66 | poppler-clang18-arm64: 67 | platform: linux/arm64 68 | command: /root/build.sh 69 | build: 70 | context: . 71 | dockerfile: Dockerfile-clang18 72 | volumes: 73 | - .:/output 74 | 75 | poppler-clang19-arm64: 76 | platform: linux/arm64 77 | command: /root/build.sh 78 | build: 79 | context: . 80 | dockerfile: Dockerfile-clang19 81 | volumes: 82 | - .:/output 83 | 84 | poppler-clang20-arm64: 85 | platform: linux/arm64 86 | command: /root/build.sh 87 | build: 88 | context: . 89 | dockerfile: Dockerfile-clang20 90 | volumes: 91 | - .:/output 92 | -------------------------------------------------------------------------------- /dependencies/protobuf/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | protobuf: 4 | platform: linux/amd64 5 | command: /root/build.sh 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | volumes: 10 | - .:/output 11 | 12 | protobuf-clang17: 13 | platform: linux/amd64 14 | command: /root/build.sh 15 | build: 16 | context: . 17 | dockerfile: Dockerfile-clang17 18 | volumes: 19 | - .:/output 20 | 21 | protobuf-clang18: 22 | platform: linux/amd64 23 | command: /root/build.sh 24 | build: 25 | context: . 26 | dockerfile: Dockerfile-clang18 27 | volumes: 28 | - .:/output 29 | 30 | protobuf-clang19: 31 | platform: linux/amd64 32 | command: /root/build.sh 33 | build: 34 | context: . 35 | dockerfile: Dockerfile-clang19 36 | volumes: 37 | - .:/output 38 | 39 | protobuf-clang20: 40 | platform: linux/amd64 41 | command: /root/build.sh 42 | build: 43 | context: . 44 | dockerfile: Dockerfile-clang20 45 | volumes: 46 | - .:/output 47 | 48 | protobuf-arm64: 49 | platform: linux/arm64 50 | command: /root/build.sh 51 | build: 52 | context: . 53 | dockerfile: Dockerfile 54 | volumes: 55 | - .:/output 56 | 57 | protobuf-clang17-arm64: 58 | platform: linux/arm64 59 | command: /root/build.sh 60 | build: 61 | context: . 62 | dockerfile: Dockerfile-clang17 63 | volumes: 64 | - .:/output 65 | 66 | protobuf-clang18-arm64: 67 | platform: linux/arm64 68 | command: /root/build.sh 69 | build: 70 | context: . 71 | dockerfile: Dockerfile-clang18 72 | volumes: 73 | - .:/output 74 | 75 | protobuf-clang19-arm64: 76 | platform: linux/arm64 77 | command: /root/build.sh 78 | build: 79 | context: . 80 | dockerfile: Dockerfile-clang19 81 | volumes: 82 | - .:/output 83 | 84 | protobuf-clang20-arm64: 85 | platform: linux/arm64 86 | command: /root/build.sh 87 | build: 88 | context: . 89 | dockerfile: Dockerfile-clang20 90 | volumes: 91 | - .:/output 92 | -------------------------------------------------------------------------------- /dependencies/imagemagick/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | imagemagick: 4 | platform: linux/amd64 5 | command: /root/build.sh 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | volumes: 10 | - .:/output 11 | 12 | imagemagick-clang17: 13 | platform: linux/amd64 14 | command: /root/build.sh 15 | build: 16 | context: . 17 | dockerfile: Dockerfile-clang17 18 | volumes: 19 | - .:/output 20 | 21 | imagemagick-clang18: 22 | platform: linux/amd64 23 | command: /root/build.sh 24 | build: 25 | context: . 26 | dockerfile: Dockerfile-clang18 27 | volumes: 28 | - .:/output 29 | 30 | imagemagick-clang19: 31 | platform: linux/amd64 32 | command: /root/build.sh 33 | build: 34 | context: . 35 | dockerfile: Dockerfile-clang19 36 | volumes: 37 | - .:/output 38 | 39 | imagemagick-clang20: 40 | platform: linux/amd64 41 | command: /root/build.sh 42 | build: 43 | context: . 44 | dockerfile: Dockerfile-clang20 45 | volumes: 46 | - .:/output 47 | 48 | imagemagick-arm64: 49 | platform: linux/arm64 50 | command: /root/build.sh 51 | build: 52 | context: . 53 | dockerfile: Dockerfile 54 | volumes: 55 | - .:/output 56 | 57 | imagemagick-clang17-arm64: 58 | platform: linux/arm64 59 | command: /root/build.sh 60 | build: 61 | context: . 62 | dockerfile: Dockerfile-clang17 63 | volumes: 64 | - .:/output 65 | 66 | imagemagick-clang18-arm64: 67 | platform: linux/arm64 68 | command: /root/build.sh 69 | build: 70 | context: . 71 | dockerfile: Dockerfile-clang18 72 | volumes: 73 | - .:/output 74 | 75 | imagemagick-clang19-arm64: 76 | platform: linux/arm64 77 | command: /root/build.sh 78 | build: 79 | context: . 80 | dockerfile: Dockerfile-clang19 81 | volumes: 82 | - .:/output 83 | 84 | imagemagick-clang20-arm64: 85 | platform: linux/arm64 86 | command: /root/build.sh 87 | build: 88 | context: . 89 | dockerfile: Dockerfile-clang20 90 | volumes: 91 | - .:/output 92 | -------------------------------------------------------------------------------- /dependencies/protobuf/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz && \ 10 | tar xzf protobuf-cpp-*.tar.gz && \ 11 | rm protobuf-cpp-*.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 16, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-16 libc++abi-16-dev libc++-16-dev libomp-16-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-16 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-16 /usr/bin/clang++ 30 | 31 | RUN cd protobuf-* && \ 32 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 33 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 34 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 35 | make 36 | 37 | RUN export DEBIAN_FRONTEND=noninteractive && \ 38 | apt-get install -y checkinstall && \ 39 | cd protobuf-* && \ 40 | mkdir -p /usr/share/doc/protobuf-clang/ && \ 41 | cp LICENSE README.md /usr/share/doc/protobuf-clang/ && \ 42 | echo /usr/share/doc/protobuf-clang/LICENSE > /tmp/xlist && \ 43 | echo /usr/share/doc/protobuf-clang/README.md >> /tmp/xlist && \ 44 | checkinstall -y -D --pkgname protobuf-clang \ 45 | --maintainer "csardi.gabor@gmail.com" \ 46 | --include /tmp/xlist \ 47 | --requires 'libc++1-16,libc++abi1-16,libunwind-16,libc6,libgcc-s1' \ 48 | --arch $(dpkg --print-architecture) \ 49 | --pkglicense "See LICENSE file." 50 | 51 | RUN cp protobuf-*/protobuf-clang*.deb /root/ 52 | 53 | COPY build.sh /root/build.sh 54 | -------------------------------------------------------------------------------- /dependencies/protobuf/Dockerfile-clang17: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz && \ 10 | tar xzf protobuf-cpp-*.tar.gz && \ 11 | rm protobuf-cpp-*.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 17 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-17 libc++abi-17-dev libc++-17-dev libomp-17-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-17 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-17 /usr/bin/clang++ 30 | 31 | RUN cd protobuf-* && \ 32 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 33 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 34 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 35 | make 36 | 37 | RUN export DEBIAN_FRONTEND=noninteractive && \ 38 | apt-get install -y checkinstall && \ 39 | cd protobuf-* && \ 40 | mkdir -p /usr/share/doc/protobuf-clang17/ && \ 41 | cp LICENSE README.md /usr/share/doc/protobuf-clang17/ && \ 42 | echo /usr/share/doc/protobuf-clang17/LICENSE > /tmp/xlist && \ 43 | echo /usr/share/doc/protobuf-clang17/README.md >> /tmp/xlist && \ 44 | checkinstall -y -D --pkgname protobuf-clang17 \ 45 | --maintainer "csardi.gabor@gmail.com" \ 46 | --include /tmp/xlist \ 47 | --requires 'libc++1-17,libc++abi1-17,libunwind-17,libc6,libgcc-s1' \ 48 | --arch $(dpkg --print-architecture) \ 49 | --pkglicense "See LICENSE file." 50 | 51 | RUN cp protobuf-*/protobuf-clang*.deb /root/ 52 | 53 | COPY build.sh /root/build.sh 54 | -------------------------------------------------------------------------------- /dependencies/protobuf/Dockerfile-clang19: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz && \ 10 | tar xzf protobuf-cpp-*.tar.gz && \ 11 | rm protobuf-cpp-*.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 19 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-19 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-19 /usr/bin/clang++ 30 | 31 | RUN cd protobuf-* && \ 32 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 33 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 34 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 35 | make 36 | 37 | RUN export DEBIAN_FRONTEND=noninteractive && \ 38 | apt-get install -y checkinstall && \ 39 | cd protobuf-* && \ 40 | mkdir -p /usr/share/doc/protobuf-clang19/ && \ 41 | cp LICENSE README.md /usr/share/doc/protobuf-clang19/ && \ 42 | echo /usr/share/doc/protobuf-clang19/LICENSE > /tmp/xlist && \ 43 | echo /usr/share/doc/protobuf-clang19/README.md >> /tmp/xlist && \ 44 | checkinstall -y -D --pkgname protobuf-clang19 \ 45 | --maintainer "csardi.gabor@gmail.com" \ 46 | --include /tmp/xlist \ 47 | --requires 'libc++1-19,libc++abi1-19,libunwind-19,libc6,libgcc-s1' \ 48 | --arch $(dpkg --print-architecture) \ 49 | --pkglicense "See LICENSE file." 50 | 51 | RUN cp protobuf-*/protobuf-clang*.deb /root/ 52 | 53 | COPY build.sh /root/build.sh 54 | -------------------------------------------------------------------------------- /dependencies/protobuf/Dockerfile-clang20: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz && \ 10 | tar xzf protobuf-cpp-*.tar.gz && \ 11 | rm protobuf-cpp-*.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 20 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-20 libc++abi-20-dev libc++-20-dev libomp-20-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-20 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-20 /usr/bin/clang++ 30 | 31 | RUN cd protobuf-* && \ 32 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 33 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 34 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 35 | make 36 | 37 | RUN export DEBIAN_FRONTEND=noninteractive && \ 38 | apt-get install -y checkinstall && \ 39 | cd protobuf-* && \ 40 | mkdir -p /usr/share/doc/protobuf-clang20/ && \ 41 | cp LICENSE README.md /usr/share/doc/protobuf-clang20/ && \ 42 | echo /usr/share/doc/protobuf-clang20/LICENSE > /tmp/xlist && \ 43 | echo /usr/share/doc/protobuf-clang20/README.md >> /tmp/xlist && \ 44 | checkinstall -y -D --pkgname protobuf-clang20 \ 45 | --maintainer "csardi.gabor@gmail.com" \ 46 | --include /tmp/xlist \ 47 | --requires 'libc++1,libc++abi1,libunwind,libc6,libgcc-s1' \ 48 | --arch $(dpkg --print-architecture) \ 49 | --pkglicense "See LICENSE file." 50 | 51 | RUN cp protobuf-*/protobuf-clang*.deb /root/ 52 | 53 | COPY build.sh /root/build.sh 54 | -------------------------------------------------------------------------------- /dependencies/protobuf/Dockerfile-clang18: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://github.com/protocolbuffers/protobuf/releases/download/v3.20.3/protobuf-cpp-3.20.3.tar.gz && \ 10 | tar xzf protobuf-cpp-*.tar.gz && \ 11 | rm protobuf-cpp-*.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 18 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-18 libc++abi-18-dev libc++-18-dev libomp-18-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-18 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-18 /usr/bin/clang++ 30 | 31 | RUN cd protobuf-* && \ 32 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 33 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 34 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 35 | make 36 | 37 | RUN export DEBIAN_FRONTEND=noninteractive && \ 38 | apt-get install -y checkinstall && \ 39 | cd protobuf-* && \ 40 | mkdir -p /usr/share/doc/protobuf-clang18/ && \ 41 | cp LICENSE README.md /usr/share/doc/protobuf-clang18/ && \ 42 | echo /usr/share/doc/protobuf-clang18/LICENSE > /tmp/xlist && \ 43 | echo /usr/share/doc/protobuf-clang18/README.md >> /tmp/xlist && \ 44 | checkinstall -y -D --pkgname protobuf-clang18 \ 45 | --maintainer "csardi.gabor@gmail.com" \ 46 | --include /tmp/xlist \ 47 | --requires 'libc++1-18,libc++abi1-18,libunwind-18,libc6,libgcc-s1' \ 48 | --arch $(dpkg --print-architecture) \ 49 | --pkglicense "See LICENSE file." 50 | 51 | RUN cp protobuf-*/protobuf-clang*.deb /root/ 52 | 53 | COPY build.sh /root/build.sh 54 | -------------------------------------------------------------------------------- /website/tag.qmd: -------------------------------------------------------------------------------- 1 | 2 | ## `` `r format_tag(tag)` `` 3 | 4 | ::: {.panel-tabset} 5 | 6 | ```{r echo = FALSE, output = "asis"} 7 | builds <- conts$containers[[which(tags == tag)]]$builds 8 | bout <- character(length(builds)) 9 | for (b in seq_along(builds)) { 10 | build <- builds[[b]] 11 | bout[b] <- glue::glue(r"( 12 | # { format_id(build$id) } 13 | 14 | **id:** { build$id }
15 | **tag:** { build$tag }
16 | **created:** { build$created }
17 | **size:** { prettyunits::pretty_bytes(build$size) }
18 | 19 |
20 | OS version 21 | ```` 22 | > uname -a 23 | { build[["uname -a"]] } 24 | 25 | > cat /etc/os-release 26 | { build[["/etc/os-release"]] } 27 | ```` 28 |
29 | 30 |
31 | R session information 32 | ```` 33 | > sessionInfo() 34 | { build$`sessionInfo()` } 35 | ```` 36 |
37 | 38 |
39 | R capabilities 40 | ```` 41 | > capabilities() 42 | { build$`capabilities()` } 43 | ```` 44 |
45 | 46 |
47 | R external software 48 | ```` 49 | > extSoftVersion() 50 | { build$`extSoftVersion()` } 51 | 52 | > libcurlVersion() 53 | { build$`libcurlVersion()` } 54 | 55 | > La_version() 56 | { build$`La_version()` } 57 | 58 | > La_library() 59 | { build$`La_library()` } 60 | 61 | > grSoftVersion() 62 | { build$`grSoftVersion()` } 63 | 64 | > pcre_config() 65 | { build$`pcre_config()` } 66 | ```` 67 |
68 | 69 |
70 | R localization 71 | ```` 72 | > l10n_info() 73 | { build$`l10n_info()` } 74 | ```` 75 |
76 | 77 |
78 | R config 79 | ```` 80 | > R CMD config --all 81 | { build$`R CMD config --all` } 82 | ```` 83 |
84 | 85 |
86 | Compilers 87 | ```` 88 | > $(CC) --version 89 | { build[["$(CC) --version"]] } 90 | > $(CXX) --version 91 | { build[["$(CXX) --version"]] } 92 | > $(FC) --version 93 | { build[["$(FC) --version"]] } 94 | ```` 95 |
96 | 97 |
98 | OS packages 99 | ```` 100 | { build[["OS packages"]] } 101 | ```` 102 |
103 | 104 | )") 105 | } 106 | cat(bout, sep = "\n\n") 107 | ``` 108 | 109 | ::: 110 | -------------------------------------------------------------------------------- /dependencies/imagemagick/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://imagemagick.org/archive/ImageMagick.tar.gz && \ 10 | tar xzf ImageMagick.tar.gz && \ 11 | rm ImageMagick.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 16, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-16 libc++abi-16-dev libc++-16-dev libomp-16-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-16 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-16 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y libjpeg8-dev libpng-dev libtiff-dev 33 | 34 | RUN cd ImageMagick-* && \ 35 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 36 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 37 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 38 | make 39 | 40 | RUN export DEBIAN_FRONTEND=noninteractive && \ 41 | apt-get install -y checkinstall 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get install -y checkinstall && \ 45 | cd ImageMagick-* && \ 46 | mkdir -p /usr/share/doc/imagemagick-clang/ && \ 47 | cp LICENSE README.md /usr/share/doc/imagemagick-clang/ && \ 48 | echo /usr/share/doc/imagemagick-clang/LICENSE > /tmp/xlist && \ 49 | echo /usr/share/doc/imagemagick-clang/README.md >> /tmp/xlist && \ 50 | checkinstall -y -D --pkgname imagemagick-clang \ 51 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 52 | --maintainer "csardi.gabor@gmail.com" \ 53 | --include /tmp/xlist \ 54 | --requires 'libc++1-16,libc++abi1-16,libunwind-16,libc6,libgcc-s1,libomp5-16,zlib1g,libxml2,liblzma5,libpng16-16,libjpeg-turbo8,libtiff5,libjbig0' \ 55 | --arch $(dpkg --print-architecture) \ 56 | --pkglicense "See LICENSE file." 57 | 58 | RUN cp ImageMagick-*/imagemagick-clang*.deb /root/ 59 | 60 | COPY build.sh /root/build.sh 61 | -------------------------------------------------------------------------------- /dependencies/imagemagick/Dockerfile-clang20: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://imagemagick.org/archive/ImageMagick.tar.gz && \ 10 | tar xzf ImageMagick.tar.gz && \ 11 | rm ImageMagick.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 20, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-20 libc++abi-20-dev libc++-20-dev libomp-20-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-20 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-20 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y libjpeg8-dev libpng-dev libtiff-dev 33 | 34 | RUN cd ImageMagick-* && \ 35 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 36 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 37 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 38 | make 39 | 40 | RUN export DEBIAN_FRONTEND=noninteractive && \ 41 | apt-get install -y checkinstall 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get install -y checkinstall && \ 45 | cd ImageMagick-* && \ 46 | mkdir -p /usr/share/doc/imagemagick-clang20/ && \ 47 | cp LICENSE README.md /usr/share/doc/imagemagick-clang20/ && \ 48 | echo /usr/share/doc/imagemagick-clang20/LICENSE > /tmp/xlist && \ 49 | echo /usr/share/doc/imagemagick-clang20/README.md >> /tmp/xlist && \ 50 | checkinstall -y -D --pkgname imagemagick-clang20 \ 51 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 52 | --maintainer "csardi.gabor@gmail.com" \ 53 | --include /tmp/xlist \ 54 | --requires 'libc++1,libc++abi1,libunwind,libc6,libgcc-s1,libomp5-20,zlib1g,libxml2,liblzma5,libpng16-16,libjpeg-turbo8,libtiff5,libjbig0' \ 55 | --arch $(dpkg --print-architecture) \ 56 | --pkglicense "See LICENSE file." 57 | 58 | RUN cp ImageMagick-*/imagemagick-clang20*.deb /root/ 59 | 60 | COPY build.sh /root/build.sh 61 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -L -o jags.tar.gz \ 10 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 11 | tar xzf jags.tar.gz && \ 12 | rm jags.tar.gz 13 | 14 | # ------------------------------------------------------------------------------------ 15 | # clang 16, gfortran-12 16 | 17 | RUN export DEBIAN_FRONTEND=noninteractive && \ 18 | apt-get update -y && \ 19 | apt-get install -y gnupg curl && \ 20 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 21 | > /etc/apt/sources.list.d/llvm.list && \ 22 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 23 | >> /etc/apt/sources.list.d/llvm.list && \ 24 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 25 | apt-get update -y && \ 26 | apt-get install -y clang-16 libc++abi-16-dev libc++-16-dev libomp-16-dev && \ 27 | apt-get install -y pkg-config make gfortran 28 | 29 | RUN ln -s /usr/bin/clang-16 /usr/bin/clang && \ 30 | ln -s /usr/bin/clang++-16 /usr/bin/clang++ 31 | 32 | # dependencies 33 | RUN apt-get install -y libopenblas-dev 34 | 35 | RUN cd JAGS-* && \ 36 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 37 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 38 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 39 | make 40 | 41 | RUN export DEBIAN_FRONTEND=noninteractive && \ 42 | apt-get install -y checkinstall && \ 43 | cd JAGS-* && \ 44 | mkdir -p /usr/share/doc/jags-clang/ && \ 45 | cp COPYING README INSTALL AUTHORS NEWS /usr/share/doc/jags-clang/ && \ 46 | echo /usr/share/doc/jags-clang/COPYING > /tmp/xlist && \ 47 | echo /usr/share/doc/jags-clang/README >> /tmp/xlist && \ 48 | echo /usr/share/doc/jags-clang/INSTALL >> /tmp/xlist && \ 49 | echo /usr/share/doc/jags-clang/AUTHORS >> /tmp/xlist && \ 50 | echo /usr/share/doc/jags-clang/NEWS >> /tmp/xlist && \ 51 | checkinstall -y -D --pkgname jags-clang \ 52 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 53 | --maintainer "csardi.gabor@gmail.com" \ 54 | --include /tmp/xlist \ 55 | --requires 'libc++1-16,libc++abi1-16,libunwind-16,libc6,libgcc-s1' \ 56 | --arch $(dpkg --print-architecture) \ 57 | --pkglicense "See COPYING file." 58 | 59 | RUN cp JAGS-*/jags-clang*.deb /root/ 60 | 61 | COPY build.sh /root/build.sh 62 | -------------------------------------------------------------------------------- /dependencies/imagemagick/Dockerfile-clang19: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://imagemagick.org/archive/ImageMagick.tar.gz && \ 10 | tar xzf ImageMagick.tar.gz && \ 11 | rm ImageMagick.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 19, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-19 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-19 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y libjpeg8-dev libpng-dev libtiff-dev 33 | 34 | RUN cd ImageMagick-* && \ 35 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 36 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 37 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 38 | make 39 | 40 | RUN export DEBIAN_FRONTEND=noninteractive && \ 41 | apt-get install -y checkinstall 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get install -y checkinstall && \ 45 | cd ImageMagick-* && \ 46 | mkdir -p /usr/share/doc/imagemagick-clang19/ && \ 47 | cp LICENSE README.md /usr/share/doc/imagemagick-clang19/ && \ 48 | echo /usr/share/doc/imagemagick-clang19/LICENSE > /tmp/xlist && \ 49 | echo /usr/share/doc/imagemagick-clang19/README.md >> /tmp/xlist && \ 50 | checkinstall -y -D --pkgname imagemagick-clang19 \ 51 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 52 | --maintainer "csardi.gabor@gmail.com" \ 53 | --include /tmp/xlist \ 54 | --requires 'libc++1-19,libc++abi1-19,libunwind-19,libc6,libgcc-s1,libomp5-19,zlib1g,libxml2,liblzma5,libpng16-16,libjpeg-turbo8,libtiff5,libjbig0' \ 55 | --arch $(dpkg --print-architecture) \ 56 | --pkglicense "See LICENSE file." 57 | 58 | RUN cp ImageMagick-*/imagemagick-clang19*.deb /root/ 59 | 60 | COPY build.sh /root/build.sh 61 | -------------------------------------------------------------------------------- /dependencies/imagemagick/Dockerfile-clang17: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://imagemagick.org/archive/ImageMagick.tar.gz && \ 10 | tar xzf ImageMagick.tar.gz && \ 11 | rm ImageMagick.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 17, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-17 libc++abi-17-dev libc++-17-dev libomp-17-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-17 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-17 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y libjpeg8-dev libpng-dev libtiff-dev 33 | 34 | RUN cd ImageMagick-* && \ 35 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 36 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 37 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 38 | make 39 | 40 | RUN export DEBIAN_FRONTEND=noninteractive && \ 41 | apt-get install -y checkinstall 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get install -y checkinstall && \ 45 | cd ImageMagick-* && \ 46 | mkdir -p /usr/share/doc/imagemagick-clang17/ && \ 47 | cp LICENSE README.md /usr/share/doc/imagemagick-clang17/ && \ 48 | echo /usr/share/doc/imagemagick-clang17/LICENSE > /tmp/xlist && \ 49 | echo /usr/share/doc/imagemagick-clang17/README.md >> /tmp/xlist && \ 50 | checkinstall -y -D --pkgname imagemagick-clang17 \ 51 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 52 | --maintainer "csardi.gabor@gmail.com" \ 53 | --include /tmp/xlist \ 54 | --requires 'libc++1-17,libc++abi1-17,libunwind-17,libc6,libgcc-s1,libomp5-17,zlib1g,libxml2,liblzma5,libpng16-16,libjpeg-turbo8,libtiff5,libjbig0' \ 55 | --arch $(dpkg --print-architecture) \ 56 | --pkglicense "See LICENSE file." 57 | 58 | RUN cp ImageMagick-*/imagemagick-clang17*.deb /root/ 59 | 60 | COPY build.sh /root/build.sh 61 | -------------------------------------------------------------------------------- /dependencies/imagemagick/Dockerfile-clang18: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -LO https://imagemagick.org/archive/ImageMagick.tar.gz && \ 10 | tar xzf ImageMagick.tar.gz && \ 11 | rm ImageMagick.tar.gz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 18, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-18 libc++abi-18-dev libc++-18-dev libomp-18-dev && \ 26 | apt-get install -y pkg-config make 27 | 28 | RUN ln -s /usr/bin/clang-18 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-18 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y libjpeg8-dev libpng-dev libtiff-dev 33 | 34 | RUN cd ImageMagick-* && \ 35 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 36 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 37 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 38 | make 39 | 40 | RUN export DEBIAN_FRONTEND=noninteractive && \ 41 | apt-get install -y checkinstall 42 | 43 | RUN export DEBIAN_FRONTEND=noninteractive && \ 44 | apt-get install -y checkinstall && \ 45 | cd ImageMagick-* && \ 46 | mkdir -p /usr/share/doc/imagemagick-clang18/ && \ 47 | cp LICENSE README.md /usr/share/doc/imagemagick-clang18/ && \ 48 | echo /usr/share/doc/imagemagick-clang18/LICENSE > /tmp/xlist && \ 49 | echo /usr/share/doc/imagemagick-clang18/README.md >> /tmp/xlist && \ 50 | checkinstall -y -D --pkgname imagemagick-clang18 \ 51 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 52 | --maintainer "csardi.gabor@gmail.com" \ 53 | --include /tmp/xlist \ 54 | --requires 'libc++1-18,libc++abi1-18,libunwind-18,libc6,libgcc-s1,libomp5-18,zlib1g,libxml2,liblzma5,libpng16-16,libjpeg-turbo8,libtiff5,libjbig0' \ 55 | --arch $(dpkg --print-architecture) \ 56 | --pkglicense "See LICENSE file." 57 | 58 | RUN cp ImageMagick-*/imagemagick-clang18*.deb /root/ 59 | 60 | COPY build.sh /root/build.sh 61 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-clang20: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -L -o jags.tar.gz \ 10 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 11 | tar xzf jags.tar.gz && \ 12 | rm jags.tar.gz 13 | 14 | # ------------------------------------------------------------------------------------ 15 | # clang 20, gfortran-12 16 | 17 | RUN export DEBIAN_FRONTEND=noninteractive && \ 18 | apt-get update -y && \ 19 | apt-get install -y gnupg curl && \ 20 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 21 | > /etc/apt/sources.list.d/llvm.list && \ 22 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 23 | >> /etc/apt/sources.list.d/llvm.list && \ 24 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 25 | apt-get update -y && \ 26 | apt-get install -y clang-20 libc++abi-20-dev libc++-20-dev libomp-20-dev && \ 27 | apt-get install -y pkg-config make gfortran 28 | 29 | RUN ln -s /usr/bin/clang-20 /usr/bin/clang && \ 30 | ln -s /usr/bin/clang++-20 /usr/bin/clang++ 31 | 32 | # dependencies 33 | RUN apt-get install -y libopenblas-dev 34 | 35 | RUN cd JAGS-* && \ 36 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 37 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 38 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 39 | make 40 | 41 | RUN export DEBIAN_FRONTEND=noninteractive && \ 42 | apt-get install -y checkinstall && \ 43 | cd JAGS-* && \ 44 | mkdir -p /usr/share/doc/jags-clang20/ && \ 45 | cp COPYING README INSTALL AUTHORS NEWS /usr/share/doc/jags-clang20/ && \ 46 | echo /usr/share/doc/jags-clang20/COPYING > /tmp/xlist && \ 47 | echo /usr/share/doc/jags-clang20/README >> /tmp/xlist && \ 48 | echo /usr/share/doc/jags-clang20/INSTALL >> /tmp/xlist && \ 49 | echo /usr/share/doc/jags-clang20/AUTHORS >> /tmp/xlist && \ 50 | echo /usr/share/doc/jags-clang20/NEWS >> /tmp/xlist && \ 51 | checkinstall -y -D --pkgname jags-clang20 \ 52 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 53 | --maintainer "csardi.gabor@gmail.com" \ 54 | --include /tmp/xlist \ 55 | --requires 'libc++1,libc++abi1,libunwind,libc6,libgcc-s1' \ 56 | --arch $(dpkg --print-architecture) \ 57 | --pkglicense "See LICENSE file." 58 | 59 | RUN cp JAGS-*/jags-clang20*.deb /root/ 60 | 61 | COPY build.sh /root/build.sh 62 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-clang19: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -L -o jags.tar.gz \ 10 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 11 | tar xzf jags.tar.gz && \ 12 | rm jags.tar.gz 13 | 14 | # ------------------------------------------------------------------------------------ 15 | # clang 19, gfortran-12 16 | 17 | RUN export DEBIAN_FRONTEND=noninteractive && \ 18 | apt-get update -y && \ 19 | apt-get install -y gnupg curl && \ 20 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 21 | > /etc/apt/sources.list.d/llvm.list && \ 22 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 23 | >> /etc/apt/sources.list.d/llvm.list && \ 24 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 25 | apt-get update -y && \ 26 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev && \ 27 | apt-get install -y pkg-config make gfortran 28 | 29 | RUN ln -s /usr/bin/clang-19 /usr/bin/clang && \ 30 | ln -s /usr/bin/clang++-19 /usr/bin/clang++ 31 | 32 | # dependencies 33 | RUN apt-get install -y libopenblas-dev 34 | 35 | RUN cd JAGS-* && \ 36 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 37 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 38 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 39 | make 40 | 41 | RUN export DEBIAN_FRONTEND=noninteractive && \ 42 | apt-get install -y checkinstall && \ 43 | cd JAGS-* && \ 44 | mkdir -p /usr/share/doc/jags-clang19/ && \ 45 | cp COPYING README INSTALL AUTHORS NEWS /usr/share/doc/jags-clang19/ && \ 46 | echo /usr/share/doc/jags-clang19/COPYING > /tmp/xlist && \ 47 | echo /usr/share/doc/jags-clang19/README >> /tmp/xlist && \ 48 | echo /usr/share/doc/jags-clang19/INSTALL >> /tmp/xlist && \ 49 | echo /usr/share/doc/jags-clang19/AUTHORS >> /tmp/xlist && \ 50 | echo /usr/share/doc/jags-clang19/NEWS >> /tmp/xlist && \ 51 | checkinstall -y -D --pkgname jags-clang19 \ 52 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 53 | --maintainer "csardi.gabor@gmail.com" \ 54 | --include /tmp/xlist \ 55 | --requires 'libc++1-19,libc++abi1-19,libunwind-19,libc6,libgcc-s1' \ 56 | --arch $(dpkg --print-architecture) \ 57 | --pkglicense "See LICENSE file." 58 | 59 | RUN cp JAGS-*/jags-clang19*.deb /root/ 60 | 61 | COPY build.sh /root/build.sh 62 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-clang17: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -L -o jags.tar.gz \ 10 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 11 | tar xzf jags.tar.gz && \ 12 | rm jags.tar.gz 13 | 14 | # ------------------------------------------------------------------------------------ 15 | # clang 17, gfortran-12 16 | 17 | RUN export DEBIAN_FRONTEND=noninteractive && \ 18 | apt-get update -y && \ 19 | apt-get install -y gnupg curl && \ 20 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 21 | > /etc/apt/sources.list.d/llvm.list && \ 22 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 23 | >> /etc/apt/sources.list.d/llvm.list && \ 24 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 25 | apt-get update -y && \ 26 | apt-get install -y clang-17 libc++abi-17-dev libc++-17-dev libomp-17-dev && \ 27 | apt-get install -y pkg-config make gfortran 28 | 29 | RUN ln -s /usr/bin/clang-17 /usr/bin/clang && \ 30 | ln -s /usr/bin/clang++-17 /usr/bin/clang++ 31 | 32 | # dependencies 33 | RUN apt-get install -y libopenblas-dev 34 | 35 | RUN cd JAGS-* && \ 36 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 37 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 38 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 39 | make 40 | 41 | RUN export DEBIAN_FRONTEND=noninteractive && \ 42 | apt-get install -y checkinstall && \ 43 | cd JAGS-* && \ 44 | mkdir -p /usr/share/doc/jags-clang17/ && \ 45 | cp COPYING README INSTALL AUTHORS NEWS /usr/share/doc/jags-clang17/ && \ 46 | echo /usr/share/doc/jags-clang17/COPYING > /tmp/xlist && \ 47 | echo /usr/share/doc/jags-clang17/README >> /tmp/xlist && \ 48 | echo /usr/share/doc/jags-clang17/INSTALL >> /tmp/xlist && \ 49 | echo /usr/share/doc/jags-clang17/AUTHORS >> /tmp/xlist && \ 50 | echo /usr/share/doc/jags-clang17/NEWS >> /tmp/xlist && \ 51 | checkinstall -y -D --pkgname jags-clang17 \ 52 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 53 | --maintainer "csardi.gabor@gmail.com" \ 54 | --include /tmp/xlist \ 55 | --requires 'libc++1-17,libc++abi1-17,libunwind-17,libc6,libgcc-s1' \ 56 | --arch $(dpkg --print-architecture) \ 57 | --pkglicense "See LICENSE file." 58 | 59 | RUN cp JAGS-*/jags-clang17*.deb /root/ 60 | 61 | COPY build.sh /root/build.sh 62 | -------------------------------------------------------------------------------- /dependencies/jags/Dockerfile-clang18: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl && \ 9 | curl -L -o jags.tar.gz \ 10 | https://sourceforge.net/projects/mcmc-jags/files/JAGS/4.x/Source/JAGS-4.3.2.tar.gz/download && \ 11 | tar xzf jags.tar.gz && \ 12 | rm jags.tar.gz 13 | 14 | # ------------------------------------------------------------------------------------ 15 | # clang 18, gfortran-12 16 | 17 | RUN export DEBIAN_FRONTEND=noninteractive && \ 18 | apt-get update -y && \ 19 | apt-get install -y gnupg curl && \ 20 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 21 | > /etc/apt/sources.list.d/llvm.list && \ 22 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 23 | >> /etc/apt/sources.list.d/llvm.list && \ 24 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 25 | apt-get update -y && \ 26 | apt-get install -y clang-18 libc++abi-18-dev libc++-18-dev libomp-18-dev && \ 27 | apt-get install -y pkg-config make gfortran 28 | 29 | RUN ln -s /usr/bin/clang-18 /usr/bin/clang && \ 30 | ln -s /usr/bin/clang++-18 /usr/bin/clang++ 31 | 32 | # dependencies 33 | RUN apt-get install -y libopenblas-dev 34 | 35 | RUN cd JAGS-* && \ 36 | ./configure --prefix=/usr/local/clang CC=clang CXX=clang++ \ 37 | 'CXXFLAGS=-stdlib=libc++ -O3 -g' \ 38 | LDFLAGS=-stdlib=libc++ 'LIBS=-lc++ -lc++abi' && \ 39 | make 40 | 41 | RUN export DEBIAN_FRONTEND=noninteractive && \ 42 | apt-get install -y checkinstall && \ 43 | cd JAGS-* && \ 44 | mkdir -p /usr/share/doc/jags-clang18/ && \ 45 | cp COPYING README INSTALL AUTHORS NEWS /usr/share/doc/jags-clang18/ && \ 46 | echo /usr/share/doc/jags-clang18/COPYING > /tmp/xlist && \ 47 | echo /usr/share/doc/jags-clang18/README >> /tmp/xlist && \ 48 | echo /usr/share/doc/jags-clang18/INSTALL >> /tmp/xlist && \ 49 | echo /usr/share/doc/jags-clang18/AUTHORS >> /tmp/xlist && \ 50 | echo /usr/share/doc/jags-clang18/NEWS >> /tmp/xlist && \ 51 | checkinstall -y -D --pkgname jags-clang18 \ 52 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 53 | --maintainer "csardi.gabor@gmail.com" \ 54 | --include /tmp/xlist \ 55 | --requires 'libc++1-18,libc++abi1-18,libunwind-18,libc6,libgcc-s1' \ 56 | --arch $(dpkg --print-architecture) \ 57 | --pkglicense "See LICENSE file." 58 | 59 | RUN cp JAGS-*/jags-clang18*.deb /root/ 60 | 61 | COPY build.sh /root/build.sh 62 | -------------------------------------------------------------------------------- /dependencies/poppler/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl xz-utils && \ 9 | curl -LO https://poppler.freedesktop.org/poppler-24.03.0.tar.xz && \ 10 | tar xf poppler-*.xz && \ 11 | rm poppler-*.xz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 16, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-16 libc++abi-16-dev libc++-16-dev libomp-16-dev && \ 26 | apt-get install -y pkg-config make gfortran 27 | 28 | RUN ln -s /usr/bin/clang-16 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-16 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y cmake libnss3-dev \ 33 | libtiff-dev liblcms2-dev libopenjp2-7-dev \ 34 | libboost1.74-all-dev libfreetype-dev libfontconfig-dev \ 35 | libcurl4-openssl-dev qtbase5-dev 36 | 37 | RUN cd poppler-* && \ 38 | mkdir build && \ 39 | cd build && \ 40 | CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -O3 -g" LDFLAGS="-stdlib=libc++ -lc++ -lc++abi" \ 41 | cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/clang \ 42 | -DCMAKE_BUILD_TYPE=release -DENABLE_QT6=OFF -DENABLE_GPGME=OFF && \ 43 | make 44 | 45 | RUN export DEBIAN_FRONTEND=noninteractive && \ 46 | apt-get install -y checkinstall && \ 47 | cd poppler-* && \ 48 | mkdir -p /usr/share/doc/poppler-clang/ && \ 49 | cp COPYING NEWS ChangeLog README.md /usr/share/doc/poppler-clang/ && \ 50 | echo /usr/share/doc/poppler-clang/COPYING > /tmp/xlist && \ 51 | echo /usr/share/doc/poppler-clang/NEWS >> /tmp/xlist && \ 52 | echo /usr/share/doc/poppler-clang/ChangeLog >> /tmp/xlist && \ 53 | echo /usr/share/doc/poppler-clang/README.md >> /tmp/xlist && \ 54 | cd build && \ 55 | checkinstall -y -D --pkgname poppler-clang \ 56 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 57 | --maintainer "csardi.gabor@gmail.com" \ 58 | --include /tmp/xlist \ 59 | --requires 'libc++1-16,libc++abi1-16,libunwind-16,libc6,libgcc-s1' \ 60 | --arch $(dpkg --print-architecture) \ 61 | --pkglicense "See COPYING file." 62 | 63 | RUN cp poppler-*/build/poppler-clang*.deb /root/ 64 | 65 | COPY build.sh /root/build.sh 66 | -------------------------------------------------------------------------------- /dependencies/poppler/Dockerfile-clang20: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl xz-utils && \ 9 | curl -LO https://poppler.freedesktop.org/poppler-24.05.0.tar.xz && \ 10 | tar xf poppler-*.xz && \ 11 | rm poppler-*.xz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 20, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-20 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-20 libc++abi-20-dev libc++-20-dev libomp-20-dev && \ 26 | apt-get install -y pkg-config make gfortran 27 | 28 | RUN ln -s /usr/bin/clang-20 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-20 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y cmake libnss3-dev \ 33 | libtiff-dev liblcms2-dev libopenjp2-7-dev \ 34 | libboost1.74-all-dev libfreetype-dev libfontconfig-dev \ 35 | libcurl4-openssl-dev qtbase5-dev 36 | 37 | RUN cd poppler-* && \ 38 | mkdir build && \ 39 | cd build && \ 40 | CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -O3 -g" LDFLAGS="-stdlib=libc++ -lc++ -lc++abi" \ 41 | cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/clang \ 42 | -DCMAKE_BUILD_TYPE=release -DENABLE_QT6=OFF -DENABLE_GPGME=OFF && \ 43 | make 44 | 45 | RUN export DEBIAN_FRONTEND=noninteractive && \ 46 | apt-get install -y checkinstall && \ 47 | cd poppler-* && \ 48 | mkdir -p /usr/share/doc/poppler-clang20/ && \ 49 | cp COPYING NEWS ChangeLog README.md /usr/share/doc/poppler-clang20/ && \ 50 | echo /usr/share/doc/poppler-clang20/COPYING > /tmp/xlist && \ 51 | echo /usr/share/doc/poppler-clang20/NEWS >> /tmp/xlist && \ 52 | echo /usr/share/doc/poppler-clang20/aChangeLog >> /tmp/xlist && \ 53 | echo /usr/share/doc/poppler-clang20/README.md >> /tmp/xlist && \ 54 | cd build && \ 55 | checkinstall -y -D --pkgname poppler-clang20 \ 56 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 57 | --maintainer "csardi.gabor@gmail.com" \ 58 | --include /tmp/xlist \ 59 | --requires 'libc++1,libc++abi1,libunwind,libc6,libgcc-s1' \ 60 | --arch $(dpkg --print-architecture) \ 61 | --pkglicense "See COPYING file." 62 | 63 | RUN cp poppler-*/build/poppler-clang*.deb /root/ 64 | 65 | COPY build.sh /root/build.sh 66 | -------------------------------------------------------------------------------- /dependencies/poppler/Dockerfile-clang19: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl xz-utils && \ 9 | curl -LO https://poppler.freedesktop.org/poppler-24.05.0.tar.xz && \ 10 | tar xf poppler-*.xz && \ 11 | rm poppler-*.xz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 19, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev && \ 26 | apt-get install -y pkg-config make gfortran 27 | 28 | RUN ln -s /usr/bin/clang-19 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-19 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y cmake libnss3-dev \ 33 | libtiff-dev liblcms2-dev libopenjp2-7-dev \ 34 | libboost1.74-all-dev libfreetype-dev libfontconfig-dev \ 35 | libcurl4-openssl-dev qtbase5-dev 36 | 37 | RUN cd poppler-* && \ 38 | mkdir build && \ 39 | cd build && \ 40 | CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -O3 -g" LDFLAGS="-stdlib=libc++ -lc++ -lc++abi" \ 41 | cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/clang \ 42 | -DCMAKE_BUILD_TYPE=release -DENABLE_QT6=OFF -DENABLE_GPGME=OFF && \ 43 | make 44 | 45 | RUN export DEBIAN_FRONTEND=noninteractive && \ 46 | apt-get install -y checkinstall && \ 47 | cd poppler-* && \ 48 | mkdir -p /usr/share/doc/poppler-clang19/ && \ 49 | cp COPYING NEWS ChangeLog README.md /usr/share/doc/poppler-clang19/ && \ 50 | echo /usr/share/doc/poppler-clang19/COPYING > /tmp/xlist && \ 51 | echo /usr/share/doc/poppler-clang19/NEWS >> /tmp/xlist && \ 52 | echo /usr/share/doc/poppler-clang19/aChangeLog >> /tmp/xlist && \ 53 | echo /usr/share/doc/poppler-clang19/README.md >> /tmp/xlist && \ 54 | cd build && \ 55 | checkinstall -y -D --pkgname poppler-clang19 \ 56 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 57 | --maintainer "csardi.gabor@gmail.com" \ 58 | --include /tmp/xlist \ 59 | --requires 'libc++1-19,libc++abi1-19,libunwind-19,libc6,libgcc-s1' \ 60 | --arch $(dpkg --print-architecture) \ 61 | --pkglicense "See COPYING file." 62 | 63 | RUN cp poppler-*/build/poppler-clang*.deb /root/ 64 | 65 | COPY build.sh /root/build.sh 66 | -------------------------------------------------------------------------------- /dependencies/poppler/Dockerfile-clang17: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl xz-utils && \ 9 | curl -LO https://poppler.freedesktop.org/poppler-24.03.0.tar.xz && \ 10 | tar xf poppler-*.xz && \ 11 | rm poppler-*.xz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 17, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-17 libc++abi-17-dev libc++-17-dev libomp-17-dev && \ 26 | apt-get install -y pkg-config make gfortran 27 | 28 | RUN ln -s /usr/bin/clang-17 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-17 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y cmake libnss3-dev \ 33 | libtiff-dev liblcms2-dev libopenjp2-7-dev \ 34 | libboost1.74-all-dev libfreetype-dev libfontconfig-dev \ 35 | libcurl4-openssl-dev qtbase5-dev 36 | 37 | RUN cd poppler-* && \ 38 | mkdir build && \ 39 | cd build && \ 40 | CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -O3 -g" LDFLAGS="-stdlib=libc++ -lc++ -lc++abi" \ 41 | cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/clang \ 42 | -DCMAKE_BUILD_TYPE=release -DENABLE_QT6=OFF -DENABLE_GPGME=OFF && \ 43 | make 44 | 45 | RUN export DEBIAN_FRONTEND=noninteractive && \ 46 | apt-get install -y checkinstall && \ 47 | cd poppler-* && \ 48 | mkdir -p /usr/share/doc/poppler-clang17/ && \ 49 | cp COPYING NEWS ChangeLog README.md /usr/share/doc/poppler-clang17/ && \ 50 | echo /usr/share/doc/poppler-clang17/COPYING > /tmp/xlist && \ 51 | echo /usr/share/doc/poppler-clang17/NEWS >> /tmp/xlist && \ 52 | echo /usr/share/doc/poppler-clang17/aChangeLog >> /tmp/xlist && \ 53 | echo /usr/share/doc/poppler-clang17/README.md >> /tmp/xlist && \ 54 | cd build && \ 55 | checkinstall -y -D --pkgname poppler-clang17 \ 56 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 57 | --maintainer "csardi.gabor@gmail.com" \ 58 | --include /tmp/xlist \ 59 | --requires 'libc++1-17,libc++abi1-17,libunwind-17,libc6,libgcc-s1' \ 60 | --arch $(dpkg --print-architecture) \ 61 | --pkglicense "See COPYING file." 62 | 63 | RUN cp poppler-*/build/poppler-clang*.deb /root/ 64 | 65 | COPY build.sh /root/build.sh 66 | -------------------------------------------------------------------------------- /dependencies/poppler/Dockerfile-clang18: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | 4 | WORKDIR /root 5 | 6 | RUN export DEBIAN_FRONTEND=noninteractive && \ 7 | apt-get update -y && \ 8 | apt-get install -y curl xz-utils && \ 9 | curl -LO https://poppler.freedesktop.org/poppler-24.03.0.tar.xz && \ 10 | tar xf poppler-*.xz && \ 11 | rm poppler-*.xz 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # clang 18, gfortran-12 15 | 16 | RUN export DEBIAN_FRONTEND=noninteractive && \ 17 | apt-get update -y && \ 18 | apt-get install -y gnupg curl && \ 19 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 20 | > /etc/apt/sources.list.d/llvm.list && \ 21 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-18 main" \ 22 | >> /etc/apt/sources.list.d/llvm.list && \ 23 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 24 | apt-get update -y && \ 25 | apt-get install -y clang-18 libc++abi-18-dev libc++-18-dev libomp-18-dev && \ 26 | apt-get install -y pkg-config make gfortran 27 | 28 | RUN ln -s /usr/bin/clang-18 /usr/bin/clang && \ 29 | ln -s /usr/bin/clang++-18 /usr/bin/clang++ 30 | 31 | # dependencies 32 | RUN apt-get install -y cmake libnss3-dev \ 33 | libtiff-dev liblcms2-dev libopenjp2-7-dev \ 34 | libboost1.74-all-dev libfreetype-dev libfontconfig-dev \ 35 | libcurl4-openssl-dev qtbase5-dev 36 | 37 | RUN cd poppler-* && \ 38 | mkdir build && \ 39 | cd build && \ 40 | CC=clang CXX=clang++ CXXFLAGS="-stdlib=libc++ -O3 -g" LDFLAGS="-stdlib=libc++ -lc++ -lc++abi" \ 41 | cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/clang \ 42 | -DCMAKE_BUILD_TYPE=release -DENABLE_QT6=OFF -DENABLE_GPGME=OFF && \ 43 | make 44 | 45 | RUN export DEBIAN_FRONTEND=noninteractive && \ 46 | apt-get install -y checkinstall && \ 47 | cd poppler-* && \ 48 | mkdir -p /usr/share/doc/poppler-clang18/ && \ 49 | cp COPYING NEWS ChangeLog README.md /usr/share/doc/poppler-clang18/ && \ 50 | echo /usr/share/doc/poppler-clang18/COPYING > /tmp/xlist && \ 51 | echo /usr/share/doc/poppler-clang18/NEWS >> /tmp/xlist && \ 52 | echo /usr/share/doc/poppler-clang18/aChangeLog >> /tmp/xlist && \ 53 | echo /usr/share/doc/poppler-clang18/README.md >> /tmp/xlist && \ 54 | cd build && \ 55 | checkinstall -y -D --pkgname poppler-clang18 \ 56 | --pkgversion $(basename `pwd` | sed 's/^[^-]*-//') \ 57 | --maintainer "csardi.gabor@gmail.com" \ 58 | --include /tmp/xlist \ 59 | --requires 'libc++1-18,libc++abi1-18,libunwind-18,libc6,libgcc-s1' \ 60 | --arch $(dpkg --print-architecture) \ 61 | --pkglicense "See COPYING file." 62 | 63 | RUN cp poppler-*/build/poppler-clang*.deb /root/ 64 | 65 | COPY build.sh /root/build.sh 66 | -------------------------------------------------------------------------------- /dependencies/jags/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | jags: 4 | platform: linux/amd64 5 | command: /root/build.sh 6 | build: 7 | context: . 8 | dockerfile: Dockerfile 9 | volumes: 10 | - .:/output 11 | 12 | jags-clang17: 13 | platform: linux/amd64 14 | command: /root/build.sh 15 | build: 16 | context: . 17 | dockerfile: Dockerfile-clang17 18 | volumes: 19 | - .:/output 20 | 21 | jags-clang18: 22 | platform: linux/amd64 23 | command: /root/build.sh 24 | build: 25 | context: . 26 | dockerfile: Dockerfile-clang18 27 | volumes: 28 | - .:/output 29 | 30 | jags-clang19: 31 | platform: linux/amd64 32 | command: /root/build.sh 33 | build: 34 | context: . 35 | dockerfile: Dockerfile-clang19 36 | volumes: 37 | - .:/output 38 | 39 | jags-clang20: 40 | platform: linux/amd64 41 | command: /root/build.sh 42 | build: 43 | context: . 44 | dockerfile: Dockerfile-clang20 45 | volumes: 46 | - .:/output 47 | 48 | jags-arm64: 49 | platform: linux/arm64 50 | command: /root/build.sh 51 | build: 52 | context: . 53 | dockerfile: Dockerfile 54 | volumes: 55 | - .:/output 56 | 57 | jags-clang17-arm64: 58 | platform: linux/arm64 59 | command: /root/build.sh 60 | build: 61 | context: . 62 | dockerfile: Dockerfile-clang17 63 | volumes: 64 | - .:/output 65 | 66 | jags-clang18-arm64: 67 | platform: linux/arm64 68 | command: /root/build.sh 69 | build: 70 | context: . 71 | dockerfile: Dockerfile-clang18 72 | volumes: 73 | - .:/output 74 | 75 | jags-clang19-arm64: 76 | platform: linux/arm64 77 | command: /root/build.sh 78 | build: 79 | context: . 80 | dockerfile: Dockerfile-clang19 81 | volumes: 82 | - .:/output 83 | 84 | jags-clang20-arm64: 85 | platform: linux/arm64 86 | command: /root/build.sh 87 | build: 88 | context: . 89 | dockerfile: Dockerfile-clang20 90 | volumes: 91 | - .:/output 92 | 93 | jags-fedora-38: 94 | platform: linux/amd64 95 | command: /root/build.sh 96 | build: 97 | context: . 98 | dockerfile: Dockerfile-fedora38 99 | volumes: 100 | - .:/output 101 | 102 | jags-fedora-38-arm64: 103 | platform: linux/arm64 104 | command: /root/build.sh 105 | build: 106 | context: . 107 | dockerfile: Dockerfile-fedora38 108 | volumes: 109 | - .:/output 110 | 111 | jags-fedora-42: 112 | platform: linux/amd64 113 | command: /root/build.sh 114 | build: 115 | context: . 116 | dockerfile: Dockerfile-fedora42 117 | volumes: 118 | - .:/output 119 | 120 | jags-fedora-42-arm64: 121 | platform: linux/arm64 122 | command: /root/build.sh 123 | build: 124 | context: . 125 | dockerfile: Dockerfile-fedora42 126 | volumes: 127 | - .:/output 128 | -------------------------------------------------------------------------------- /containers/centos7/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM centos:7 3 | ENV R_HUB=true 4 | 5 | WORKDIR /root 6 | 7 | RUN yum install -y https://dl.fedoraproject.org/pub/archive/epel/7/$(arch)/Packages/e/epel-release-7-14.noarch.rpm || \ 8 | yum install -y https://dl.fedoraproject.org/pub/archive/epel/7/$(arch)/Packages/e/epel-release-7-12.noarch.rpm 9 | 10 | # Use vault.centos.org since CentOS 7 is EOL and the official mirrors are no longer available 11 | RUN sed -i -e 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/* 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # Install pre-built R and requirements 15 | 16 | RUN yum install -y https://github.com/r-lib/rig/releases/download/latest/r-rig-latest-1.$(arch).rpm 17 | 18 | ENV R_VERSIONS="devel next release oldrel/1 oldrel/2 oldrel/3 oldrel/4" 19 | 20 | RUN for R_VERSION in $R_VERSIONS; do \ 21 | rig add ${R_VERSION}; \ 22 | rm -rf /tmp/rig; \ 23 | done 24 | RUN rig default release 25 | 26 | # ------------------------------------------------------------------------------------ 27 | # Auto-install system requirements 28 | 29 | ENV PKG_SYSREQS=true 30 | ENV R_PKG_SYSREQS2=true 31 | 32 | # ------------------------------------------------------------------------------------ 33 | # Set CRAN repo, no P3M for CentOS 34 | 35 | RUN for R_VERSION in `ls /opt/R/`; do \ 36 | echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 37 | >> /opt/R/${R_VERSION}/lib/R/library/base/R/Rprofile; \ 38 | done 39 | 40 | # ------------------------------------------------------------------------------------ 41 | # Locale 42 | 43 | RUN sed -i 's/^override_install_langs/# override_install_langs/' /etc/yum.conf 44 | RUN yum -y -q reinstall glibc-common 45 | ENV LANG en_US.UTF-8 46 | 47 | # ------------------------------------------------------------------------------------ 48 | # Install pak 49 | 50 | RUN for R_VERSION in `ls /opt/R/`; do \ 51 | /opt/R/${R_VERSION}/bin/R -q -e \ 52 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))'; \ 53 | done 54 | 55 | # ------------------------------------------------------------------------------------ 56 | # Use user's package library for the rest 57 | 58 | RUN for R_VERSION in `ls /opt/R/`; do \ 59 | /opt/R/${R_VERSION}/bin/R -q -e \ 60 | 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)'; \ 61 | done 62 | 63 | # ------------------------------------------------------------------------------------ 64 | # Copy check script 65 | 66 | COPY r-check /usr/local/bin 67 | 68 | # ------------------------------------------------------------------------------------ 69 | # Install rig, set default R version 70 | 71 | RUN ARCH="$(arch)"; \ 72 | if [ "$ARCH" = "aarch64" ]; then ARM64="-arm64"; else ARM64=""; fi; \ 73 | curl -Ls https://github.com/r-lib/rig/releases/download/latest/rig-linux${ARM64}-latest.tar.gz | tar xz -C /usr/local && \ 74 | rig default next 75 | 76 | # ------------------------------------------------------------------------------------ 77 | # Check config, no need to check the PDF manual and vignettes here. 78 | # We also avoid that bashism checks, as it needs external tools. 79 | 80 | ENV _R_CHECK_TESTS_NLINES_="0" 81 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 82 | ENV _R_CHECK_BASHISMS_=false 83 | -------------------------------------------------------------------------------- /containers/rchk/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN export DEBIAN_FRONTEND=noninteractive && \ 9 | apt-get update -y && \ 10 | apt-get install -y curl && \ 11 | cd /tmp && \ 12 | . /etc/os-release && \ 13 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/r-rstudio-${ID}-$(echo $VERSION_ID | tr -d .)-devel-rchk_1_$(dpkg --print-architecture).deb" && \ 14 | apt install -y ./r-*.deb && \ 15 | rm r-*.deb && \ 16 | apt-get clean 17 | 18 | # System requirements that pak does not know about 19 | RUN export DEBIAN_FRONTEND=noninteractive && \ 20 | apt-get update -y && \ 21 | apt-get install -y patch && \ 22 | apt-get clean 23 | 24 | # ------------------------------------------------------------------------------------ 25 | # Put R on PATH 26 | # AUto-install system requirements 27 | 28 | ENV PATH="/opt/R/devel-rchk/bin:${PATH}" 29 | ENV PKG_SYSREQS=true 30 | ENV R_PKG_SYSREQS2=true 31 | 32 | # ------------------------------------------------------------------------------------ 33 | # Set CRAN repo, R-hub repo 34 | 35 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 36 | >> /opt/R/devel-rchk/lib/R/library/base/R/Rprofile 37 | 38 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 39 | . /etc/os-release; \ 40 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 41 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 42 | >> /opt/R/devel-rchk/lib/R/library/base/R/Rprofile; \ 43 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 44 | >> /opt/R/devel-rchk/lib/R/library/base/R/Rprofile; \ 45 | fi 46 | # ------------------------------------------------------------------------------------ 47 | # Install pak 48 | 49 | RUN /opt/R/devel-rchk/bin/R -q -e \ 50 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch)); st <- pak::lib_status()' 51 | 52 | # ------------------------------------------------------------------------------------ 53 | # Locale 54 | 55 | RUN export DEBIAN_FRONTEND=noninteractive && \ 56 | apt-get update -y && \ 57 | apt-get install -y locales && \ 58 | apt-get clean && \ 59 | locale-gen en_GB.UTF-8 en_US.UTF-8 && \ 60 | update-locale 61 | ENV LC_COLLATE C 62 | ENV LANG en_GB.UTF-8 63 | 64 | # ------------------------------------------------------------------------------------ 65 | # System packages 66 | 67 | RUN export DEBIAN_FRONTEND=noninteractive && \ 68 | apt-get update -y && \ 69 | apt-get install -y git && \ 70 | apt-get clean 71 | 72 | # ------------------------------------------------------------------------------------ 73 | # Use user's package library for the rest 74 | 75 | RUN /opt/R/devel-rchk/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 76 | 77 | # ------------------------------------------------------------------------------------ 78 | # Copy check script 79 | 80 | COPY r-check /usr/local/bin 81 | 82 | # ------------------------------------------------------------------------------------ 83 | # Very minimal test 84 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 85 | 86 | # ------------------------------------------------------------------------------------ 87 | # Config for r-hub/actions 88 | 89 | ENV RHUB_ACTIONS_DEPS_DEPENDENCIES='list(direct = "LinkingTo", indirect = "hard")' 90 | ENV RHUB_ACTIONS_CHECK_SCRIPT=rchk.sh 91 | -------------------------------------------------------------------------------- /containers/nold/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN export DEBIAN_FRONTEND=noninteractive && \ 9 | apt-get update -y && \ 10 | apt-get install -y curl && \ 11 | cd /tmp && \ 12 | . /etc/os-release && \ 13 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/r-rstudio-${ID}-$(echo $VERSION_ID | tr -d .)-devel-nold_1_$(dpkg --print-architecture).deb" && \ 14 | apt install -y ./r-*.deb && \ 15 | apt-get clean 16 | 17 | # System requirements that pak does not know about 18 | RUN export DEBIAN_FRONTEND=noninteractive && \ 19 | apt-get update -y && \ 20 | apt-get install -y patch && \ 21 | apt-get clean 22 | 23 | # ------------------------------------------------------------------------------------ 24 | # Put R on PATH 25 | # AUto-install system requirements 26 | 27 | ENV PATH="/opt/R/devel-nold/bin:${PATH}" 28 | ENV PKG_SYSREQS=true 29 | ENV R_PKG_SYSREQS2=true 30 | 31 | # ------------------------------------------------------------------------------------ 32 | # Set CRAN repo, use P3M on x86_64 33 | 34 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 35 | >> /opt/R/devel-nold/lib/R/library/base/R/Rprofile 36 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 37 | . /etc/os-release; \ 38 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 39 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 40 | >> /opt/R/devel-nold/lib/R/library/base/R/Rprofile; \ 41 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 42 | >> /opt/R/devel-nold/lib/R/library/base/R/Rprofile; \ 43 | fi 44 | 45 | # ------------------------------------------------------------------------------------ 46 | # Install pak 47 | 48 | RUN /opt/R/devel-nold/bin/R -q -e \ 49 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 50 | 51 | # ------------------------------------------------------------------------------------ 52 | # Locale 53 | 54 | RUN export DEBIAN_FRONTEND=noninteractive && \ 55 | apt-get update -y && \ 56 | apt-get install -y locales && \ 57 | apt-get clean && \ 58 | locale-gen en_US.UTF-8 en_US.UTF-8 && \ 59 | update-locale 60 | ENV LC_ALL en_US.UTF-8 61 | ENV LANG en_US.UTF-8 62 | 63 | # ------------------------------------------------------------------------------------ 64 | # Use user's package library for the rest 65 | 66 | RUN /opt/R/devel-nold/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 67 | 68 | # ------------------------------------------------------------------------------------ 69 | # Copy check script 70 | 71 | COPY r-check /usr/local/bin 72 | 73 | # ------------------------------------------------------------------------------------ 74 | # Useful system packages, some are needed for R CMD check 75 | 76 | RUN export DEBIAN_FRONTEND=noninteractive && \ 77 | apt-get update -y && \ 78 | apt-get install -y pkg-config perl tidy qpdf git && \ 79 | apt-get clean 80 | 81 | RUN curl -o /usr/local/bin/checkbashisms \ 82 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 83 | chmod +x /usr/local/bin/checkbashisms 84 | 85 | # ------------------------------------------------------------------------------------ 86 | # Very minimal test 87 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 88 | 89 | # ------------------------------------------------------------------------------------ 90 | # Check config 91 | 92 | ENV _R_CHECK_TESTS_NLINES_="0" 93 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 94 | -------------------------------------------------------------------------------- /website/gha.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Run on GitHub Actions 3 | --- 4 | 5 | # For your own package 6 | 7 | ## Regular check 8 | 9 | If your package is on GitHub and you want to check it with some of these 10 | containers regularly, then you can use a workflow like this: 11 | 12 | ```yaml 13 | name: R CMD check (ATLAS) 14 | 15 | on: 16 | push: 17 | branches: [main, master] 18 | pull_request: 19 | branches: [main, master] 20 | 21 | jobs: 22 | check: 23 | runs-on: ubuntu-latest 24 | container: 25 | image: ghcr.io/r-hub/containers/atlas:latest 26 | 27 | steps: 28 | - uses: actions/checkout@v4 29 | 30 | - name: Install dependencies 31 | run: | 32 | R -q -e 'pak::pkg_install(c("deps::.", "any::rcmdcheck"), dependencies = TRUE)' 33 | 34 | - uses: r-lib/actions/check-r-package@v2 35 | ``` 36 | 37 | ## Occasional check 38 | 39 | Alternatively, you can create a workflow that you run manually, with the 40 | selected container: 41 | 42 | ```yaml 43 | name: R CMD check with and R-hub container 44 | 45 | on: 46 | workflow_dispatch: 47 | inputs: 48 | inpcont: 49 | description: 'Check container' 50 | required: true 51 | type: choice 52 | options: 53 | - 'atlas' 54 | - 'gcc13' 55 | - 'nold' 56 | 57 | jobs: 58 | check: 59 | runs-on: ubuntu-latest 60 | container: 61 | image: ghcr.io/r-hub/containers/${{ github.event.inputs.inpcont }}:latest 62 | 63 | steps: 64 | - uses: actions/checkout@v4 65 | - name: Install dependencies 66 | run: | 67 | R -q -e 'pak::pkg_install(c("deps::.", "any::rcmdcheck"), dependencies = TRUE)' 68 | - uses: r-lib/actions/check-r-package@v2 69 | ``` 70 | 71 | # For somebody else's package 72 | 73 | ## Write your own universal check workflow 74 | 75 | To run a check in a container for somebody else's package, you could use 76 | a workflow like this: 77 | 78 | ```yaml 79 | name: Check any R package at an URL 80 | 81 | on: 82 | workflow_dispatch: 83 | inputs: 84 | inpurl: 85 | description: 'URL to a source R package' 86 | required: true 87 | type: string 88 | inpcont: 89 | description: 'Check container' 90 | required: true 91 | type: choice 92 | options: 93 | - 'atlas' 94 | - 'gcc13' 95 | - 'nold' 96 | 97 | jobs: 98 | check: 99 | runs-on: ubuntu-latest 100 | container: 101 | image: ghcr.io/r-hub/containers/${{ github.event.inputs.inpcont }}:latest 102 | 103 | steps: 104 | - name: Download package 105 | run: | 106 | mkdir /check 107 | curl -LO "${{ github.event.inputs.inpurl }}" --output-dir /check 108 | 109 | - name: Install dependencies and check package 110 | run: r-check 111 | 112 | - name: Upload check result as artifact 113 | uses: actions/upload-artifact@v4 114 | with: 115 | name: check-results 116 | path: /check 117 | ``` 118 | 119 | You can start it manually, specify the URL of the R source package you 120 | want to check and select the name of the container. 121 | 122 | ## Fork this repository to get a check workflow 123 | 124 | Alternatively, you can also fork the 125 | [`r-hub/containers`](https://github.com/r-hub/containers) repository, 126 | which already has a workflow like this, and use that to check any package, 127 | with any container. Here is what you need to do: 128 | 129 | 1. Fork the [`r-hub/containers`](https://github.com/r-hub/containers) 130 | repository. 131 | 2. Enable the actions in the fork. Click on the green button that says 132 | "I understand my workflows, go ahead and enable them." in the "Actions" 133 | tab. 134 | 3. Select the "Check any R package at a URL" workflow on left, in the list 135 | of workflows. 136 | 4. Click on "Run workflow" on the right side. 137 | 5. Keep the branch unchanged, specify the package URL, select the 138 | container. 139 | 6. Click on "Run workflow". 140 | 141 | That's it. 142 | -------------------------------------------------------------------------------- /containers/mkl/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # MKL 7 | 8 | COPY oneAPI.repo /etc/yum.repos.d 9 | 10 | # Need intel-oneapi-runtime-libs for https://github.com/r-hub/rhub/issues/616 11 | RUN dnf install -y intel-oneapi-mkl-devel-2024.2 intel-oneapi-runtime-libs-2024.2.0 12 | 13 | # ------------------------------------------------------------------------------------ 14 | # Install pre-built R and requirements 15 | 16 | RUN dnf -y upgrade && \ 17 | dnf -y install dnf-plugins-core && \ 18 | dnf -y install curl && \ 19 | . /etc/os-release && \ 20 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-${ID}-${VERSION_ID}-devel-mkl-1-1.$(arch).rpm" && \ 21 | yum install -y R-*.rpm && \ 22 | rm R-*.rpm 23 | 24 | # Extra system packages that pak does not know about 25 | RUN dnf install -y gawk patch && \ 26 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 27 | 28 | # ------------------------------------------------------------------------------------ 29 | # Put R on PATH 30 | # AUto-install system requirements 31 | 32 | ENV PATH="/opt/R/devel-mkl/bin:${PATH}" 33 | ENV PKG_SYSREQS=true 34 | ENV R_PKG_SYSREQS2=true 35 | 36 | # ------------------------------------------------------------------------------------ 37 | # Set CRAN repo, no P3M for Fedora 38 | 39 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 40 | >> /opt/R/devel-mkl/lib/R/library/base/R/Rprofile 41 | 42 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 43 | . /etc/os-release; \ 44 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 45 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 46 | >> /opt/R/devel-mkl/lib/R/library/base/R/Rprofile; \ 47 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 48 | >> /opt/R/devel-mkl/lib/R/library/base/R/Rprofile; \ 49 | fi 50 | 51 | # ------------------------------------------------------------------------------------ 52 | # Install pak 53 | 54 | RUN /opt/R/devel-mkl/bin/R -q -e \ 55 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 56 | 57 | # ------------------------------------------------------------------------------------ 58 | # Locale 59 | 60 | RUN dnf install -y glibc-langpack-en 61 | 62 | ENV LC_ALL en_GB.UTF-8 63 | ENV LANG en_GB.UTF-8 64 | 65 | # ------------------------------------------------------------------------------------ 66 | # Use user's package library for the rest 67 | 68 | RUN /opt/R/devel-mkl/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 69 | 70 | # ------------------------------------------------------------------------------------ 71 | # Copy check script 72 | 73 | COPY r-check /usr/local/bin 74 | 75 | # ------------------------------------------------------------------------------------ 76 | # Useful system packages 77 | # openblas-threads is needed for binary packages linking to LAPACK, built on vanilla Fedora 78 | 79 | RUN dnf install -y pkg-config devscripts-checkbashisms qpdf git tidy procps openblas-threads && \ 80 | dnf clean all 81 | 82 | # ------------------------------------------------------------------------------------ 83 | # Copy MKL environment 84 | 85 | ENV SETVARS_ARGS --config=/opt/mklconfig.txt 86 | COPY mklconfig.txt /opt/mklconfig.txt 87 | 88 | # ------------------------------------------------------------------------------------ 89 | # Very minimal test 90 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 91 | 92 | # ------------------------------------------------------------------------------------ 93 | # Check config 94 | 95 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 96 | ENV _R_CHECK_BASHISMS_=false 97 | -------------------------------------------------------------------------------- /containers/valgrind/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | . /etc/os-release && \ 12 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-${ID}-${VERSION_ID}-devel-valgrind-1-1.$(arch).rpm" && \ 13 | yum install -y R-*.rpm && \ 14 | rm R-*.rpm 15 | 16 | # Extra system packages that pak does not know about 17 | RUN dnf install -y gawk patch && \ 18 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 19 | 20 | # ------------------------------------------------------------------------------------ 21 | # Put R on PATH 22 | # AUto-install system requirements 23 | 24 | ENV PATH="/opt/R/devel-valgrind/bin:${PATH}" 25 | ENV PKG_SYSREQS=true 26 | ENV R_PKG_SYSREQS2=true 27 | 28 | # ------------------------------------------------------------------------------------ 29 | # Set CRAN repo, no P3M for Fedora 30 | 31 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 32 | >> /opt/R/devel-valgrind/lib/R/library/base/R/Rprofile 33 | 34 | RUN if [ "`arch`" = "x86_64" ]; then \ 35 | echo "Setting up R-hub repo"; \ 36 | . /etc/os-release; \ 37 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 38 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 39 | >> /opt/R/devel-valgrind/lib/R/library/base/R/Rprofile; \ 40 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 41 | >> /opt/R/devel-valgrind/lib/R/library/base/R/Rprofile; \ 42 | fi 43 | 44 | # ------------------------------------------------------------------------------------ 45 | # Install pak 46 | 47 | RUN /opt/R/devel-valgrind/bin/R -q -e \ 48 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 49 | 50 | # ------------------------------------------------------------------------------------ 51 | # Locale 52 | 53 | RUN dnf install -y glibc-langpack-en 54 | 55 | ENV LC_ALL en_GB.UTF-8 56 | ENV LANG en_GB.UTF-8 57 | 58 | # ------------------------------------------------------------------------------------ 59 | # Use user's package library for the rest 60 | 61 | RUN /opt/R/devel-valgrind/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 62 | 63 | # ------------------------------------------------------------------------------------ 64 | # Copy check script 65 | 66 | COPY r-check /usr/local/bin 67 | 68 | # ------------------------------------------------------------------------------------ 69 | # Useful system packages 70 | 71 | RUN dnf -y install pkg-config devscripts-checkbashisms qpdf tidy valgrind git 72 | 73 | # ------------------------------------------------------------------------------------ 74 | # valgrind config 75 | 76 | COPY valgrind.supp . 77 | RUN cat valgrind.supp >> /usr/libexec/valgrind/default.supp && \ 78 | rm valgrind.supp 79 | ENV VALGRIND_OPTS="--track-origins=yes --leak-check=full" 80 | 81 | # ------------------------------------------------------------------------------------ 82 | # Very minimal test 83 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 84 | 85 | # ------------------------------------------------------------------------------------ 86 | # Check config 87 | 88 | ENV RJAVA_JVM_STACK_WORKAROUND 0 89 | ENV R_DONT_USE_TK true 90 | 91 | ENV OMP_THREAD_LIMIT=2 92 | ENV R_DATATABLE_NUM_THREADS=2 93 | 94 | # ------------------------------------------------------------------------------------ 95 | # Check config, only runtime checks 96 | 97 | ENV _R_CHECK_TESTS_NLINES_="0" 98 | ENV CHECK_ARGS="--use-valgrind --extra-arch --no-stop-on-test-error" 99 | -------------------------------------------------------------------------------- /containers/donttest/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | ENV R_HUB=true 4 | 5 | COPY rig.gpg /etc/apt/trusted.gpg.d/rig.gpg 6 | RUN echo "deb http://rig.r-pkg.org/deb rig main" > \ 7 | /etc/apt/sources.list.d/rig.list 8 | RUN export DEBIAN_FRONTEND=noninteractive && \ 9 | apt-get update -y && \ 10 | apt-get install -y r-rig && \ 11 | rig add devel --without-pak 12 | 13 | # System requirements that pak does not know about 14 | RUN export DEBIAN_FRONTEND=noninteractive && \ 15 | apt-get update -y && \ 16 | apt-get install -y patch && \ 17 | apt-get clean 18 | 19 | # ------------------------------------------------------------------------------------ 20 | # TinyTeX, only available for x86_64 21 | 22 | RUN export DEBIAN_FRONTEND=noninteractive && \ 23 | if [ "$(uname -m)" = "x86_64" ]; then \ 24 | apt-get update -y && \ 25 | apt-get install -y wget perl && \ 26 | apt-get clean && \ 27 | cd /root && \ 28 | wget -qO- "https://yihui.org/tinytex/install-bin-unix.sh" | sh -s - --admin --no-path && \ 29 | ~/.TinyTeX/bin/*/tlmgr update --self || true && \ 30 | ~/.TinyTeX/bin/*/tlmgr install makeindex; \ 31 | fi 32 | 33 | # we can't really query the arch here (FIXME!), but this should be ok 34 | ENV PATH="/root/.TinyTeX/bin/x86_64-linux:/root/.TinyTeX/bin/aarch64-linux:${PATH}" 35 | 36 | # ------------------------------------------------------------------------------------ 37 | # Set CRAN repo, use r-hub/repos 38 | 39 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 40 | >> /opt/R/devel/lib/R/library/base/R/Rprofile 41 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 42 | . /etc/os-release; \ 43 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 44 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 45 | >> /opt/R/devel/lib/R/library/base/R/Rprofile; \ 46 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 47 | >> /opt/R/devel/lib/R/library/base/R/Rprofile; \ 48 | fi 49 | 50 | # ------------------------------------------------------------------------------------ 51 | # Install pak into system library 52 | 53 | RUN /opt/R/devel/bin/R -q -e \ 54 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch), lib = .Library)' 55 | 56 | # ------------------------------------------------------------------------------------ 57 | # Locale 58 | 59 | RUN export DEBIAN_FRONTEND=noninteractive && \ 60 | apt-get update -y && \ 61 | apt-get install -y locales && \ 62 | apt-get clean && \ 63 | locale-gen en_US.UTF-8 en_US.UTF-8 && \ 64 | update-locale 65 | ENV LC_ALL en_US.UTF-8 66 | ENV LANG en_US.UTF-8 67 | 68 | # ------------------------------------------------------------------------------------ 69 | # Copy check script 70 | 71 | COPY r-check /usr/local/bin 72 | 73 | # ------------------------------------------------------------------------------------ 74 | # Useful system packages, some are needed for R CMD check 75 | 76 | RUN export DEBIAN_FRONTEND=noninteractive && \ 77 | apt-get update -y && \ 78 | apt-get install -y pkg-config perl tidy qpdf git curl && \ 79 | apt-get clean 80 | 81 | RUN curl -o /usr/local/bin/checkbashisms \ 82 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 83 | chmod +x /usr/local/bin/checkbashisms 84 | 85 | # ------------------------------------------------------------------------------------ 86 | # Check config 87 | 88 | ENV _R_CHECK_TESTS_NLINES_="0" 89 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 90 | 91 | ENV _R_CHECK_DONTTEST_EXAMPLES_=true 92 | ENV _R_CHECK_THINGS_IN_OTHER_DIRS_=true 93 | 94 | ENV _R_CHECK_THINGS_IN_OTHER_DIRS_EXCLUDE_=/opt/R/devel/lib/R/etc/exclude 95 | RUN curl -L https://raw.githubusercontent.com/r-devel/r-dev-web/345a85338c9ecb31c6ea6a25e688833e232185aa/CRAN/QA/BDR/blackswan/exclude \ 96 | -o /opt/R/devel/lib/R/etc/exclude 97 | 98 | # ------------------------------------------------------------------------------------ 99 | # Very minimal test 100 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 101 | -------------------------------------------------------------------------------- /containers/intel/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # onAPI, MKL 7 | 8 | COPY oneAPI.repo /etc/yum.repos.d 9 | 10 | # Need intel-oneapi-runtime-libs for https://github.com/r-hub/rhub/issues/616 11 | RUN dnf install -y \ 12 | intel-oneapi-mkl-devel-2024.2.0 \ 13 | intel-oneapi-compiler-dpcpp-cpp-2024.2.x86_64 \ 14 | intel-oneapi-compiler-fortran-2024.2.x86_64 \ 15 | intel-oneapi-runtime-libs-2024.2.0 \ 16 | intel-oneapi-mkl-devel-2024.2.0 && \ 17 | dnf clean all 18 | 19 | # ------------------------------------------------------------------------------------ 20 | # Install pre-built R and requirements 21 | 22 | RUN dnf -y upgrade && \ 23 | dnf -y install dnf-plugins-core && \ 24 | dnf -y install curl && \ 25 | . /etc/os-release && \ 26 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-${ID}-${VERSION_ID}-devel-intel-1-1.$(arch).rpm" && \ 27 | yum install -y R-*.rpm && \ 28 | rm R-*.rpm && \ 29 | dnf clean all 30 | 31 | # Extra system packages that pak does not know about 32 | RUN dnf install -y gawk patch && \ 33 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm && \ 34 | dnf clean all 35 | 36 | # This is needed, according tp https://www.stats.ox.ac.uk/pub/bdr/Intel/README.txt 37 | RUN echo 'ulimit -s 51200' > /etc/profile.d/ulimit.sh 38 | 39 | # ------------------------------------------------------------------------------------ 40 | # Put R on PATH 41 | # AUto-install system requirements 42 | 43 | ENV PATH="/opt/R/devel-intel/bin:${PATH}" 44 | ENV PKG_SYSREQS=true 45 | ENV R_PKG_SYSREQS2=true 46 | 47 | # ------------------------------------------------------------------------------------ 48 | # Set CRAN repo, no P3M for Fedora 49 | 50 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 51 | >> /opt/R/devel-intel/lib/R/library/base/R/Rprofile 52 | 53 | RUN if [ "$(uname -p)" = "x86_64" ] || [ "$(uname -m)" == "x86_64" ]; then \ 54 | . /etc/os-release; \ 55 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 56 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 57 | >> /opt/R/devel-intel/lib/R/library/base/R/Rprofile; \ 58 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 59 | >> /opt/R/devel-intel/lib/R/library/base/R/Rprofile; \ 60 | fi 61 | 62 | # ------------------------------------------------------------------------------------ 63 | # Install pak 64 | 65 | RUN /opt/R/devel-intel/bin/R -q -e \ 66 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 67 | 68 | # ------------------------------------------------------------------------------------ 69 | # Locale 70 | 71 | RUN dnf install -y glibc-langpack-en && \ 72 | dnf clean all 73 | 74 | ENV LC_ALL en_GB.UTF-8 75 | ENV LANG en_GB.UTF-8 76 | 77 | # ------------------------------------------------------------------------------------ 78 | # Use user's package library for the rest 79 | 80 | RUN /opt/R/devel-intel/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 81 | 82 | # ------------------------------------------------------------------------------------ 83 | # Copy check script 84 | 85 | COPY r-check /usr/local/bin 86 | 87 | # ------------------------------------------------------------------------------------ 88 | # Useful system packages 89 | # openblas-threads is needed for binary packages linking to LAPACK, built on vanilla Fedora 90 | 91 | RUN dnf install -y pkg-config devscripts-checkbashisms qpdf git tidy procps openblas-threads && \ 92 | dnf clean all 93 | 94 | # ------------------------------------------------------------------------------------ 95 | # Copy MKL environment 96 | 97 | ENV SETVARS_ARGS --config=/opt/mklconfig.txt 98 | COPY mklconfig.txt /opt/mklconfig.txt 99 | 100 | # ------------------------------------------------------------------------------------ 101 | # Very minimal test 102 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 103 | 104 | # ------------------------------------------------------------------------------------ 105 | # Check config 106 | 107 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 108 | ENV _R_CHECK_BASHISMS_=false 109 | -------------------------------------------------------------------------------- /website/internals.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: R-hub container internals 3 | --- 4 | 5 | # Goals 6 | 7 | * Have containers for all of the Linux checks at 8 | and at 9 | 10 | 11 | * Easily run the checks with open source tools 12 | - locally on your computer, 13 | - on GitHub Actions, and 14 | - on R-hub. 15 | 16 | # Components 17 | 18 | ## R builds 19 | 20 | We use R builds created by or 21 | by ourselves at (see the `builder` 22 | subdirectory). 23 | 24 | These builds are `.deb` or `.rpm` packages that each install into their 25 | own directory, so multiple builds can be installed on the same system. 26 | 27 | `rstudio/r-builds` builds their packages for `devel` and `next` R versions 28 | daily. `r-hub/containers` builds all packages daily currently, on GitHub 29 | Actions: 30 | 31 | 32 | Our packages are uploaded at . 33 | `rstudio/r-builds` uploads their R builds to S3, see the README of their 34 | repository. 35 | 36 | ## Containers 37 | 38 | The containers are built from `Dockerfile`s at 39 | , daily on GHA: 40 | . 41 | 42 | The containers are pushed to [Docker Hub](https://hub.docker.com/u/rhub) 43 | and also to the [GitHub container 44 | registry](https://github.com/orgs/r-hub/packages?repo_name=containers). 45 | 46 | ## `r-check` script 47 | 48 | This is currently very simple. For each `.tar.gz` file (`$pkg`) in the 49 | check directory (first argument, defaults to `/check`), it runs 50 | ``` 51 | cd `dirname $pkg` 52 | R -q -e "pak::pkg_install('deps::$pkg', dependencies = TRUE)" 53 | R CMD check $CHECK_ARGS $pkg 54 | ``` 55 | 56 | We will probably have a better check script in the future. We are not sure 57 | yet where that script will live, or whether it should be a general tool 58 | that helps you run `R CMD check`, or it should be part of another tool, 59 | e.g. . 60 | 61 | ## pak 62 | 63 | The `r-check` script uses [pak](https://github.com/r-lib/pak) to install 64 | dependent R packages and system requirements. Packages can use the 65 | custom `Remotes` field to install dependencies from GitHub, URLs, etc: 66 | https://pak.r-lib.org/reference/pak_package_sources.html 67 | 68 | ## System requirements 69 | 70 | We use and pak's built in 71 | system requirements support to install system requirements. 72 | 73 | Occasionally pak might miss system requirements, this is typically because 74 | * they are missing from database. Please consider opening an issue at 75 | about this; or 76 | * the package author did not specify it. Please open an issue in the [pak 77 | repository](https://github.com/r-lib/pak/issues), so we can work around 78 | this. 79 | 80 | In the future we will also provide containers (or tools to build them) 81 | that have all system requirements of all CRAN packages pre-installed. 82 | 83 | ## Website 84 | 85 | You might be reading it right now, it is at 86 | . 87 | 88 | It is built in Quarto, and updated daily from the `containers.yml` workflow, 89 | after the containers are built: 90 | . 91 | 92 | (The workflow has a manual trigger which also lets you update the website 93 | without building the containers or updating the manifest.) 94 | 95 | The website contains 96 | * documentation about using the containers, and 97 | * data about the containers. (For the last five builds of each container.) 98 | 99 | It also contains a 100 | [`manifest.json`](https://r-hub.github.io/containers/manifest.json) file 101 | with the same container data in a machine readable form. 102 | 103 | # Notes for individual containers 104 | 105 | ## `atlas` 106 | 107 | Corresponding issue: 108 | 109 | We had to use Fedora for this one, ATLAS on Ubuntu does not reproduce 110 | the CRAN issues. 111 | 112 | ## `clang-16` 113 | 114 | Corresponding issue: 115 | 116 | ## `gcc13` 117 | 118 | Corresponding issue: 119 | 120 | Using Fedora 38 was the easiest way to get a container with GCC 13.x. 121 | 122 | # Notes 123 | 124 | * The build system works on amd64 and arm64 architectures, but we are 125 | focusing on arm64 containers initially. 126 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | 3 | debian-unstable-devel: 4 | command: ./build.sh 5 | environment: 6 | - R_VERSION=devel 7 | - LOCAL_STORE=/tmp/output 8 | build: 9 | context: . 10 | dockerfile: builder/Dockerfile.debian-unstable-devel 11 | image: rhub/debian-unstable-devel:latest 12 | volumes: 13 | - ./integration/tmp:/tmp/output 14 | 15 | ubuntu-2204: 16 | command: ./build.sh 17 | environment: 18 | - R_VERSION=devel 19 | - LOCAL_STORE=/tmp/output 20 | build: 21 | context: . 22 | dockerfile: builder/Dockerfile.ubuntu-2204 23 | image: rhub/ubuntu-2204:latest 24 | volumes: 25 | - ./integration/tmp:/tmp/output 26 | 27 | ubuntu-2204-clang: 28 | command: ./build.sh 29 | environment: 30 | - R_VERSION=devel 31 | - R_TYPE=-clang 32 | - LOCAL_STORE=/tmp/output 33 | build: 34 | context: . 35 | dockerfile: builder/Dockerfile.ubuntu-2204-clang 36 | image: rhub/ubuntu-2204-clang:latest 37 | volumes: 38 | - ./integration/tmp:/tmp/output 39 | 40 | ubuntu-2204-rchk: 41 | command: ./build.sh 42 | environment: 43 | - R_VERSION=devel 44 | - R_TYPE=-rchk 45 | - LOCAL_STORE=/tmp/output 46 | # - R_TARBALL_URL=https://cran.microsoft.com/snapshot/2023-02-28/src/base-prerelease/R-devel_2023-02-27_r83911.tar.gz 47 | # - R_TARBALL_URL=https://cran.microsoft.com/snapshot/2023-03-01/src/base-prerelease/R-devel_2023-02-28_r83917.tar.gz 48 | # - R_TARBALL_URL=https://github.com/r-hub/containers/releases/download/latest/R-devel_2023-03-15_r83984-0.tar.gz 49 | build: 50 | context: . 51 | dockerfile: builder/Dockerfile.ubuntu-2204-rchk 52 | image: rhub/ubuntu-2204-rchk:latest 53 | volumes: 54 | - ./integration/tmp:/tmp/output 55 | 56 | ubuntu-2204-nold: 57 | command: ./build.sh 58 | environment: 59 | - R_VERSION=devel 60 | - R_TYPE=-nold 61 | - XCONFIGURE_OPTIONS=--disable-long-double 62 | - LOCAL_STORE=/tmp/output 63 | build: 64 | context: . 65 | dockerfile: builder/Dockerfile.ubuntu-2204-nold 66 | image: rhub/ubuntu-2204-nold:latest 67 | volumes: 68 | - ./integration/tmp:/tmp/output 69 | 70 | ubuntu-2204-asan: 71 | command: ./build.sh 72 | environment: 73 | - R_VERSION=devel 74 | - R_TYPE=-asan 75 | - LOCAL_STORE=/tmp/output 76 | build: 77 | context: . 78 | dockerfile: builder/Dockerfile.ubuntu-2204-asan 79 | image: rhub/ubuntu-2204-asan:latest 80 | volumes: 81 | - ./integration/tmp:/tmp/output 82 | 83 | fedora-gcc: 84 | command: ./build.sh 85 | environment: 86 | - R_VERSION=devel 87 | - R_TYPE=-gcc 88 | - LOCAL_STORE=/tmp/output 89 | build: 90 | context: . 91 | dockerfile: builder/Dockerfile.fedora-gcc 92 | image: rhub/fedora-gcc:latest 93 | volumes: 94 | - ./integration/tmp:/tmp/output 95 | 96 | fedora-gcc13: 97 | command: ./build.sh 98 | environment: 99 | - R_VERSION=devel 100 | - R_TYPE=-gcc13 101 | - LOCAL_STORE=/tmp/output 102 | build: 103 | context: . 104 | dockerfile: builder/Dockerfile.fedora-gcc13 105 | image: rhub/fedora-gcc13:latest 106 | volumes: 107 | - ./integration/tmp:/tmp/output 108 | 109 | fedora-gcc14: 110 | platform: linux/amd64 111 | command: ./build.sh 112 | environment: 113 | - R_VERSION=devel 114 | - R_TYPE=-gcc14 115 | - LOCAL_STORE=/tmp/output 116 | build: 117 | context: . 118 | dockerfile: builder/Dockerfile.fedora-gcc14 119 | image: rhub/fedora-gcc14:latest 120 | volumes: 121 | - ./integration/tmp:/tmp/output 122 | 123 | fedora-gcc15: 124 | platform: linux/amd64 125 | command: ./build.sh 126 | environment: 127 | - R_VERSION=devel 128 | - R_TYPE=-gcc15 129 | - LOCAL_STORE=/tmp/output 130 | build: 131 | context: . 132 | dockerfile: builder/Dockerfile.fedora-gcc15 133 | image: rhub/fedora-gcc14:latest 134 | volumes: 135 | - ./integration/tmp:/tmp/output 136 | 137 | fedora-mkl: 138 | platform: linux/amd64 139 | command: ./build.sh 140 | environment: 141 | - R_VERSION=devel 142 | - R_TYPE=-mkl 143 | - LOCAL_STORE=/tmp/output 144 | build: 145 | context: . 146 | dockerfile: builder/Dockerfile.fedora-mkl 147 | image: rhub/fedora-mkl:latest 148 | volumes: 149 | - ./integration/tmp:/tmp/output 150 | 151 | intel: 152 | platform: linux/amd64 153 | command: ./build.sh 154 | environment: 155 | - R_VERSION=devel 156 | - R_TYPE=-intel 157 | - LOCAL_STORE=/tmp/output 158 | build: 159 | context: . 160 | dockerfile: builder/Dockerfile.fedora-intel 161 | image: rhub/fedora-intel:latest 162 | volumes: 163 | - ./integration/tmp:/tmp/output 164 | 165 | valgrind: 166 | command: ./build.sh 167 | environment: 168 | - R_VERSION=devel 169 | - R_TYPE=-valgrind 170 | - LOCAL_STORE=/tmp/output 171 | build: 172 | context: . 173 | dockerfile: builder/Dockerfile.valgrind 174 | platforms: 175 | - linux/amd64 176 | image: rhub/valgrind:latest 177 | volumes: 178 | - ./integration/tmp:/tmp/output 179 | -------------------------------------------------------------------------------- /containers/gcc13/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-fedora-38-devel-gcc13-1-1.$(arch).rpm" && \ 12 | yum install -y R-*.rpm && \ 13 | rm R-*.rpm 14 | 15 | # Extra system packages that pak does not know about 16 | RUN dnf install -y gawk patch && \ 17 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 18 | 19 | # ------------------------------------------------------------------------------------ 20 | # Put R on PATH 21 | # AUto-install system requirements 22 | 23 | ENV PATH="/opt/R/devel-gcc13/bin:${PATH}" 24 | ENV PKG_SYSREQS=true 25 | ENV R_PKG_SYSREQS2=true 26 | 27 | # ------------------------------------------------------------------------------------ 28 | # Set CRAN repo, no P3M for Fedora 29 | 30 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 31 | >> /opt/R/devel-gcc13/lib/R/library/base/R/Rprofile 32 | 33 | RUN if [ "$(arch)" = "x86_64" ]; then \ 34 | . /etc/os-release; \ 35 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 36 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 37 | >> /opt/R/devel-gcc13/lib/R/library/base/R/Rprofile; \ 38 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 39 | >> /opt/R/devel-gcc13/lib/R/library/base/R/Rprofile; \ 40 | fi 41 | 42 | # ------------------------------------------------------------------------------------ 43 | # Install pak 44 | 45 | RUN /opt/R/devel-gcc13/bin/R -q -e \ 46 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 47 | 48 | # ------------------------------------------------------------------------------------ 49 | # Locale 50 | 51 | RUN dnf install -y glibc-langpack-en 52 | 53 | ENV LC_ALL en_GB.UTF-8 54 | ENV LANG en_GB.UTF-8 55 | 56 | # ------------------------------------------------------------------------------------ 57 | # Use user's package library for the rest 58 | 59 | RUN /opt/R/devel-gcc13/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 60 | 61 | # ------------------------------------------------------------------------------------ 62 | # Copy check script 63 | 64 | COPY r-check /usr/local/bin 65 | 66 | # ------------------------------------------------------------------------------------ 67 | # Useful system packages 68 | 69 | RUN dnf -y install pkg-config devscripts-checkbashisms qpdf git tidy 70 | 71 | # ------------------------------------------------------------------------------------ 72 | # CRAN's config from https://www.stats.ox.ac.uk/pub/bdr/gcc13/README.txt 73 | # 74 | # > Tests as for fedora-gcc but with GCC trunk aka pre-13.0.0 -- the 75 | # > logs record the snapshot used.. 76 | # > 77 | # > Further details as 78 | # > 79 | # > https://www.stats.ox.ac.uk/pub/bdr/Rconfig/r-devel-linux-x86_64-fedora-gcc 80 | 81 | ENV _R_CHECK_INSTALL_DEPENDS_ true 82 | ## the next is the default, but --as-cran has true 83 | ENV _R_CHECK_SUGGESTS_ONLY_ false 84 | ENV _R_CHECK_NO_RECOMMENDED_ true 85 | ENV _R_CHECK_DOC_SIZES2_ true 86 | ENV _R_CHECK_DEPRECATED_DEFUNCT_ true 87 | ENV _R_CHECK_SCREEN_DEVICE_ warn 88 | ENV _R_CHECK_REPLACING_IMPORTS_ true 89 | ENV _R_CHECK_TOPLEVEL_FILES_ true 90 | ENV _R_CHECK_DOT_FIRSTLIB_ true 91 | ENV _R_CHECK_RD_LINE_WIDTHS_ true 92 | ENV _R_CHECK_S3_METHODS_NOT_REGISTERED_ true 93 | ENV _R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_ true 94 | ENV _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_ TRUE 95 | ENV _R_CHECK_NATIVE_ROUTINE_REGISTRATION_ true 96 | ENV _R_CHECK_FF_CALLS_ registration 97 | ENV _R_CHECK_PRAGMAS_ true 98 | ENV _R_CHECK_COMPILATION_FLAGS_ true 99 | ENV _R_CHECK_R_DEPENDS_ true 100 | ENV _R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_ true 101 | ENV _R_CHECK_PKG_SIZES_ false 102 | ENV _R_CHECK_SHLIB_OPENMP_FLAGS_ true 103 | 104 | ENV _R_CHECK_LIMIT_CORES_ true 105 | ENV _R_CHECK_LENGTH_1_CONDITION_ package:_R_CHECK_PACKAGE_NAME_,verbose 106 | #ENV _R_CHECK_LENGTH_1_LOGIC2_="package:_R_CHECK_PACKAGE_NAME_,verbose" 107 | ENV _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_ true 108 | ENV _R_CHECK_COMPILATION_FLAGS_KNOWN_="-Wno-deprecated-declarations -Wno-ignored-attributes -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Werror=implicit-function-declaration" 109 | ENV _R_CHECK_AUTOCONF_ true 110 | ENV _R_CHECK_THINGS_IN_CHECK_DIR_ true 111 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_ true 112 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_EXCLUDE_="^ompi" 113 | ENV _R_CHECK_BASHISMS_ true 114 | ENV _R_CHECK_DEPENDS_ONLY_DATA_ true 115 | ENV _R_CHECK_MATRIX_DATA_ TRUE 116 | ENV _R_CHECK_RD_VALIDATE_RD2HTML_ true 117 | ENV _R_CHECK_RD_MATH_RENDERING_ true 118 | 119 | # ------------------------------------------------------------------------------------ 120 | # Check config, no need to check the PDF manual and vignettes here. 121 | # We also avoid that bashism checks, as it needs external tools. 122 | 123 | ENV _R_CHECK_TESTS_NLINES_="0" 124 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 125 | ENV _R_CHECK_BASHISMS_=false 126 | 127 | # Support R CMD INSTALL --use-LTO ., similarly to CRAN at https://www.stats.ox.ac.uk/pub/bdr/LTO/README.txt 128 | RUN echo -e '# Support --use-LTO\nLTO_OPT = -flto=10\nLTO_FC_OPT = -flto=10' >> /opt/R/devel-gcc13/lib/R/etc/Makeconf 129 | 130 | # ------------------------------------------------------------------------------------ 131 | # Very minimal test 132 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 133 | -------------------------------------------------------------------------------- /containers/atlas/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | . /etc/os-release && \ 12 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-${ID}-${VERSION_ID}-devel-gcc-1-1.$(arch).rpm" && \ 13 | yum install -y R-*.rpm && \ 14 | rm R-*.rpm 15 | 16 | # Extra system packages that pak does not know about 17 | RUN dnf install -y gawk patch && \ 18 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 19 | 20 | # ------------------------------------------------------------------------------------ 21 | # Put R on PATH 22 | # AUto-install system requirements 23 | 24 | ENV PATH="/opt/R/devel-gcc/bin:${PATH}" 25 | ENV PKG_SYSREQS=true 26 | ENV R_PKG_SYSREQS2=true 27 | 28 | # ------------------------------------------------------------------------------------ 29 | # Set CRAN repo, no P3M for Fedora 30 | 31 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 32 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile 33 | 34 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 35 | . /etc/os-release; \ 36 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 37 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 38 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile; \ 39 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 40 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile; \ 41 | fi 42 | 43 | # ------------------------------------------------------------------------------------ 44 | # Install pak 45 | 46 | RUN /opt/R/devel-gcc/bin/R -q -e \ 47 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 48 | 49 | # ------------------------------------------------------------------------------------ 50 | # Locale 51 | 52 | RUN dnf install -y glibc-langpack-en 53 | 54 | ENV LC_ALL en_GB.UTF-8 55 | ENV LANG en_GB.UTF-8 56 | 57 | # ------------------------------------------------------------------------------------ 58 | # Use user's package library for the rest 59 | 60 | RUN /opt/R/devel-gcc/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 61 | 62 | # ------------------------------------------------------------------------------------ 63 | # Copy check script 64 | 65 | COPY r-check /usr/local/bin 66 | 67 | # ------------------------------------------------------------------------------------ 68 | # Useful system packages 69 | 70 | RUN dnf install -y pkg-config devscripts-checkbashisms qpdf git tidy 71 | 72 | # ------------------------------------------------------------------------------------ 73 | # Check config 74 | 75 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 76 | ENV _R_CHECK_BASHISMS_=false 77 | 78 | # ------------------------------------------------------------------------------------ 79 | # ATLAS 80 | 81 | RUN dnf install -y atlas 82 | 83 | RUN blas=$(R -s -q -e 'cat(La_library())') && \ 84 | mv $blas $blas.bak && \ 85 | ln -s /usr/lib64/atlas/libsatlas.so.*.* $blas 86 | 87 | RUN R -q -e 'extSoftVersion()["BLAS"]' 88 | RUN R -q -e 'La_library()' 89 | 90 | # ------------------------------------------------------------------------------------ 91 | # Check config 92 | 93 | ENV _R_CHECK_INSTALL_DEPENDS_ true 94 | ## the next is the default, but --as-cran has true 95 | ENV _R_CHECK_SUGGESTS_ONLY_ false 96 | ENV _R_CHECK_NO_RECOMMENDED_ true 97 | ENV _R_CHECK_DOC_SIZES2_ true 98 | ENV _R_CHECK_DEPRECATED_DEFUNCT_ true 99 | ENV _R_CHECK_SCREEN_DEVICE_ warn 100 | ENV _R_CHECK_REPLACING_IMPORTS_ true 101 | ENV _R_CHECK_TOPLEVEL_FILES_ true 102 | ENV _R_CHECK_DOT_FIRSTLIB_ true 103 | ENV _R_CHECK_RD_LINE_WIDTHS_ true 104 | ENV _R_CHECK_S3_METHODS_NOT_REGISTERED_ true 105 | ENV _R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_ true 106 | ENV _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_ TRUE 107 | ENV _R_CHECK_NATIVE_ROUTINE_REGISTRATION_ true 108 | ENV _R_CHECK_FF_CALLS_ registration 109 | ENV _R_CHECK_PRAGMAS_ true 110 | ENV _R_CHECK_COMPILATION_FLAGS_ true 111 | ENV _R_CHECK_R_DEPENDS_ true 112 | ENV _R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_ true 113 | ENV _R_CHECK_PKG_SIZES_ false 114 | ENV _R_CHECK_SHLIB_OPENMP_FLAGS_ true 115 | ENV _R_CHECK_BROWSER_NONINTERACTIVE_ true 116 | 117 | ENV _R_CHECK_LIMIT_CORES_ true 118 | ENV _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_ true 119 | ENV _R_CHECK_COMPILATION_FLAGS_KNOWN_ "-Wno-deprecated-declarations -Wno-ignored-attributes -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Werror=implicit-function-declaration -Wstrict-prototypes" 120 | ENV _R_CHECK_AUTOCONF_ true 121 | ENV _R_CHECK_THINGS_IN_CHECK_DIR_ true 122 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_ true 123 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_EXCLUDE_ "^ompi" 124 | ENV _R_CHECK_BASHISMS_ true 125 | ENV _R_CHECK_DEPENDS_ONLY_DATA_ true 126 | ENV _R_CHECK_MATRIX_DATA_ TRUE 127 | ENV _R_CHECK_RD_VALIDATE_RD2HTML_ true 128 | ENV _R_CHECK_RD_MATH_RENDERING_ true 129 | ENV _R_DEPRECATED_IS_R_ error 130 | 131 | # ------------------------------------------------------------------------------------ 132 | # Check config, no need to check the PDF manual and vignettes here. 133 | # We also avoid that bashism checks, as it needs external tools. 134 | 135 | ENV _R_CHECK_TESTS_NLINES_="0" 136 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 137 | ENV _R_CHECK_BASHISMS_=false 138 | 139 | # ------------------------------------------------------------------------------------ 140 | # Very minimal test 141 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 142 | -------------------------------------------------------------------------------- /containers/gcc14/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:40 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-fedora-40-devel-gcc14-1-1.$(arch).rpm" && \ 12 | yum install -y R-*.rpm && \ 13 | rm R-*.rpm 14 | 15 | # Extra system packages that pak does not know about 16 | RUN dnf install -y flexiblas gawk patch && \ 17 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 18 | 19 | # ------------------------------------------------------------------------------------ 20 | # Put R on PATH 21 | # AUto-install system requirements 22 | 23 | ENV PATH="/opt/R/devel-gcc14/bin:${PATH}" 24 | ENV PKG_SYSREQS=true 25 | ENV R_PKG_SYSREQS2=true 26 | 27 | # ------------------------------------------------------------------------------------ 28 | # Set CRAN repo, no P3M for Fedora 29 | 30 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 31 | >> /opt/R/devel-gcc14/lib/R/library/base/R/Rprofile 32 | 33 | RUN if [ "$(arch)" = "x86_64" ]; then \ 34 | . /etc/os-release; \ 35 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 36 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 37 | >> /opt/R/devel-gcc14/lib/R/library/base/R/Rprofile; \ 38 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 39 | >> /opt/R/devel-gcc14/lib/R/library/base/R/Rprofile; \ 40 | fi 41 | 42 | # ------------------------------------------------------------------------------------ 43 | # Install pak 44 | 45 | RUN /opt/R/devel-gcc14/bin/R -q -e \ 46 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 47 | 48 | # ------------------------------------------------------------------------------------ 49 | # Locale 50 | 51 | RUN dnf install -y glibc-langpack-en 52 | 53 | ENV LC_ALL en_GB.UTF-8 54 | ENV LANG en_GB.UTF-8 55 | 56 | # ------------------------------------------------------------------------------------ 57 | # Use user's package library for the rest 58 | 59 | RUN /opt/R/devel-gcc14/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 60 | 61 | # ------------------------------------------------------------------------------------ 62 | # Copy check script 63 | 64 | COPY r-check /usr/local/bin 65 | 66 | # ------------------------------------------------------------------------------------ 67 | # Useful system packages 68 | 69 | RUN dnf -y install pkg-config devscripts-checkbashisms qpdf git tidy 70 | 71 | # ------------------------------------------------------------------------------------ 72 | # CRAN's config from https://www.stats.ox.ac.uk/pub/bdr/gcc14/README.txt 73 | # 74 | # > Installation checks with GCC 14.1, whose changelog is at 75 | # > https://gcc.gnu.org/gcc-14/changes.html, and other details at 76 | # > https://gcc.gnu.org/pipermail/gcc/2024-May/243921.html 77 | # 78 | # > Other details as https://www.stats.ox.ac.uk/pub/bdr/Rconfig/r-devel-linux-x86_64-fedora-gcc 79 | 80 | 81 | ENV _R_CHECK_INSTALL_DEPENDS_ true 82 | ## the next is the default, but --as-cran has true 83 | ENV _R_CHECK_SUGGESTS_ONLY_ false 84 | ENV _R_CHECK_NO_RECOMMENDED_ true 85 | ENV _R_CHECK_DOC_SIZES2_ true 86 | ENV _R_CHECK_DEPRECATED_DEFUNCT_ true 87 | ENV _R_CHECK_SCREEN_DEVICE_ warn 88 | ENV _R_CHECK_REPLACING_IMPORTS_ true 89 | ENV _R_CHECK_TOPLEVEL_FILES_ true 90 | ENV _R_CHECK_DOT_FIRSTLIB_ true 91 | ENV _R_CHECK_RD_LINE_WIDTHS_ true 92 | ENV _R_CHECK_S3_METHODS_NOT_REGISTERED_ true 93 | ENV _R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_ true 94 | ENV _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_ TRUE 95 | ENV _R_CHECK_NATIVE_ROUTINE_REGISTRATION_ true 96 | ENV _R_CHECK_FF_CALLS_ registration 97 | ENV _R_CHECK_PRAGMAS_ true 98 | ENV _R_CHECK_COMPILATION_FLAGS_ true 99 | ENV _R_CHECK_R_DEPENDS_ true 100 | ENV _R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_ true 101 | ENV _R_CHECK_PKG_SIZES_ false 102 | ENV _R_CHECK_SHLIB_OPENMP_FLAGS_ true 103 | 104 | ENV _R_CHECK_LIMIT_CORES_ true 105 | ENV _R_CHECK_LENGTH_1_CONDITION_ package:_R_CHECK_PACKAGE_NAME_,verbose 106 | #ENV _R_CHECK_LENGTH_1_LOGIC2_="package:_R_CHECK_PACKAGE_NAME_,verbose" 107 | ENV _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_ true 108 | ENV _R_CHECK_COMPILATION_FLAGS_KNOWN_="-Wno-deprecated-declarations -Wno-ignored-attributes -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Werror=implicit-function-declaration" 109 | ENV _R_CHECK_AUTOCONF_ true 110 | ENV _R_CHECK_THINGS_IN_CHECK_DIR_ true 111 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_ true 112 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_EXCLUDE_="^ompi" 113 | ENV _R_CHECK_BASHISMS_ true 114 | ENV _R_CHECK_DEPENDS_ONLY_DATA_ true 115 | ENV _R_CHECK_MATRIX_DATA_ TRUE 116 | ENV _R_CHECK_RD_VALIDATE_RD2HTML_ true 117 | ENV _R_CHECK_RD_MATH_RENDERING_ true 118 | 119 | # ------------------------------------------------------------------------------------ 120 | # Check config, no need to check the PDF manual and vignettes here. 121 | # We also avoid that bashism checks, as it needs external tools. 122 | 123 | ENV _R_CHECK_TESTS_NLINES_="0" 124 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 125 | ENV _R_CHECK_BASHISMS_=false 126 | 127 | # Support R CMD INSTALL --use-LTO ., similarly to CRAN at https://www.stats.ox.ac.uk/pub/bdr/LTO/README.txt 128 | RUN echo -e '# Support --use-LTO\nLTO_OPT = -flto=10\nLTO_FC_OPT = -flto=10' >> /opt/R/devel-gcc14/lib/R/etc/Makeconf 129 | 130 | # ------------------------------------------------------------------------------------ 131 | # Very minimal test 132 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 133 | -------------------------------------------------------------------------------- /containers/gcc15/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:42 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-fedora-42-devel-gcc15-1-1.$(arch).rpm" && \ 12 | yum install -y R-*.rpm && \ 13 | rm R-*.rpm 14 | 15 | # Extra system packages that pak does not know about 16 | RUN dnf install -y flexiblas gawk patch && \ 17 | dnf install -y https://rpms.r-pkg.org/fedora-42/jags-4.3.2-1.$(arch).rpm 18 | 19 | # ------------------------------------------------------------------------------------ 20 | # Put R on PATH 21 | # AUto-install system requirements 22 | 23 | ENV PATH="/opt/R/devel-gcc15/bin:${PATH}" 24 | ENV PKG_SYSREQS=true 25 | ENV R_PKG_SYSREQS2=true 26 | 27 | # ------------------------------------------------------------------------------------ 28 | # Set CRAN repo, no P3M for Fedora 29 | 30 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 31 | >> /opt/R/devel-gcc15/lib/R/library/base/R/Rprofile 32 | 33 | RUN if [ "$(arch)" = "x86_64" ]; then \ 34 | . /etc/os-release; \ 35 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 36 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 37 | >> /opt/R/devel-gcc15/lib/R/library/base/R/Rprofile; \ 38 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 39 | >> /opt/R/devel-gcc15/lib/R/library/base/R/Rprofile; \ 40 | fi 41 | 42 | # ------------------------------------------------------------------------------------ 43 | # Install pak 44 | 45 | RUN /opt/R/devel-gcc15/bin/R -q -e \ 46 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 47 | 48 | # ------------------------------------------------------------------------------------ 49 | # Locale 50 | 51 | RUN dnf install -y glibc-langpack-en 52 | 53 | ENV LC_ALL en_GB.UTF-8 54 | ENV LANG en_GB.UTF-8 55 | 56 | # ------------------------------------------------------------------------------------ 57 | # Use user's package library for the rest 58 | 59 | RUN /opt/R/devel-gcc15/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 60 | 61 | # ------------------------------------------------------------------------------------ 62 | # Copy check script 63 | 64 | COPY r-check /usr/local/bin 65 | 66 | # ------------------------------------------------------------------------------------ 67 | # Useful system packages 68 | 69 | RUN dnf -y install pkg-config devscripts-checkbashisms qpdf git tidy 70 | 71 | # ------------------------------------------------------------------------------------ 72 | # CRAN's config from https://www.stats.ox.ac.uk/pub/bdr/gcc14/README.txt 73 | # 74 | # > Installation checks with GCC 14.1, whose changelog is at 75 | # > https://gcc.gnu.org/gcc-14/changes.html, and other details at 76 | # > https://gcc.gnu.org/pipermail/gcc/2024-May/243921.html 77 | # 78 | # > Other details as https://www.stats.ox.ac.uk/pub/bdr/Rconfig/r-devel-linux-x86_64-fedora-gcc 79 | 80 | 81 | ENV _R_CHECK_INSTALL_DEPENDS_ true 82 | ## the next is the default, but --as-cran has true 83 | ENV _R_CHECK_SUGGESTS_ONLY_ false 84 | ENV _R_CHECK_NO_RECOMMENDED_ true 85 | ENV _R_CHECK_DOC_SIZES2_ true 86 | ENV _R_CHECK_DEPRECATED_DEFUNCT_ true 87 | ENV _R_CHECK_SCREEN_DEVICE_ warn 88 | ENV _R_CHECK_REPLACING_IMPORTS_ true 89 | ENV _R_CHECK_TOPLEVEL_FILES_ true 90 | ENV _R_CHECK_DOT_FIRSTLIB_ true 91 | ENV _R_CHECK_RD_LINE_WIDTHS_ true 92 | ENV _R_CHECK_S3_METHODS_NOT_REGISTERED_ true 93 | ENV _R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_ true 94 | ENV _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_ TRUE 95 | ENV _R_CHECK_NATIVE_ROUTINE_REGISTRATION_ true 96 | ENV _R_CHECK_FF_CALLS_ registration 97 | ENV _R_CHECK_PRAGMAS_ true 98 | ENV _R_CHECK_COMPILATION_FLAGS_ true 99 | ENV _R_CHECK_R_DEPENDS_ true 100 | ENV _R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_ true 101 | ENV _R_CHECK_PKG_SIZES_ false 102 | ENV _R_CHECK_SHLIB_OPENMP_FLAGS_ true 103 | 104 | ENV _R_CHECK_LIMIT_CORES_ true 105 | ENV _R_CHECK_LENGTH_1_CONDITION_ package:_R_CHECK_PACKAGE_NAME_,verbose 106 | #ENV _R_CHECK_LENGTH_1_LOGIC2_="package:_R_CHECK_PACKAGE_NAME_,verbose" 107 | ENV _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_ true 108 | ENV _R_CHECK_COMPILATION_FLAGS_KNOWN_="-Wno-deprecated-declarations -Wno-ignored-attributes -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -Werror=implicit-function-declaration" 109 | ENV _R_CHECK_AUTOCONF_ true 110 | ENV _R_CHECK_THINGS_IN_CHECK_DIR_ true 111 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_ true 112 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_EXCLUDE_="^ompi" 113 | ENV _R_CHECK_BASHISMS_ true 114 | ENV _R_CHECK_DEPENDS_ONLY_DATA_ true 115 | ENV _R_CHECK_MATRIX_DATA_ TRUE 116 | ENV _R_CHECK_RD_VALIDATE_RD2HTML_ true 117 | ENV _R_CHECK_RD_MATH_RENDERING_ true 118 | 119 | # ------------------------------------------------------------------------------------ 120 | # Check config, no need to check the PDF manual and vignettes here. 121 | # We also avoid that bashism checks, as it needs external tools. 122 | 123 | ENV _R_CHECK_TESTS_NLINES_="0" 124 | ENV CHECK_ARGS="--no-manual --no-build-vignettes" 125 | ENV _R_CHECK_BASHISMS_=false 126 | 127 | # Support R CMD INSTALL --use-LTO ., similarly to CRAN at https://www.stats.ox.ac.uk/pub/bdr/LTO/README.txt 128 | RUN echo -e '# Support --use-LTO\nLTO_OPT = -flto=10\nLTO_FC_OPT = -flto=10' >> /opt/R/devel-gcc15/lib/R/etc/Makeconf 129 | 130 | # ------------------------------------------------------------------------------------ 131 | # Very minimal test 132 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 133 | -------------------------------------------------------------------------------- /website/R/docker.R: -------------------------------------------------------------------------------- 1 | 2 | load_old_manifest <- function() { 3 | path <- "_site/manifest.json" 4 | if (file.exists(path)) { 5 | # if input exists, we copy it to output, in case there is nothing to do 6 | file.copy(path, "manifest.json") 7 | } else { 8 | # otherwise we download it, and copy it to output 9 | cli::cli_alert_warning("Old manifest file does not exist, downloading it.") 10 | url <- "https://r-hub.github.io/containers/manifest.json" 11 | download.file(url, "manifest.json") 12 | path <- "manifest.json" 13 | } 14 | jsonlite::fromJSON(path, simplifyVector = FALSE) 15 | } 16 | 17 | load_new_manifest <- function() { 18 | if (!file.exists("manifest.json")) { 19 | stop("New manifest file does not exist!") 20 | } 21 | jsonlite::fromJSON("manifest.json", simplifyVector = FALSE) 22 | } 23 | 24 | list_containers <- function() { 25 | dir("../containers") 26 | } 27 | 28 | docker_pull <- function(name) { 29 | cli::cli_alert_info("Pulling container {name}") 30 | processx::run( 31 | echo = TRUE, 32 | "docker", 33 | c("pull", name) 34 | ) 35 | } 36 | 37 | update_manifest <- function() { 38 | # load known containers 39 | old <- load_old_manifest() 40 | old <- unlist(purrr::map(old$containers, "builds"), recursive = FALSE) 41 | oldids <- purrr::map_chr(old, "id") 42 | oldids <- sub("^ghcr.io/r-hub/containers/[-.a-zA-Z0-9]+@", "", oldids) 43 | 44 | # get data from latest container versions 45 | if (! tolower(Sys.getenv("UPDATE_MANIFEST", "yes")) %in% 46 | c("no", "false", "off", "0")) { 47 | allconts <- current_containers() 48 | new <- list() 49 | for (cont in names(allconts)) { 50 | shas <- setdiff(purrr::map_chr(allconts[[cont]], "name"), oldids) 51 | new <- c(new, purrr::map(shas, get_container_data, cont = cont)) 52 | } 53 | } else { 54 | new <- list() 55 | } 56 | 57 | # if nothing new, quit here 58 | if (length(new) == 0) { 59 | cli::cli_alert_success("No new containers to add to manifest.") 60 | return(invisible()) 61 | } 62 | 63 | tags <- unique(c( 64 | purrr::map_chr(old, "tag"), 65 | purrr::map_chr(new, "tag") 66 | )) 67 | 68 | last_containers_for_tag <- function(tag) { 69 | sels <- c( 70 | purrr::keep(old, function(x) x$tag == tag), 71 | purrr::keep(new, function(x) x$tag == tag) 72 | ) 73 | sels <- sels[order(purrr::map_chr(sels, "created"), decreasing = TRUE)] 74 | utils::head(sels, 5) 75 | } 76 | 77 | conts <- map( 78 | tags, 79 | function(tag) list(tag = tag, builds = last_containers_for_tag(tag)) 80 | ) 81 | obj <- list( 82 | updated = format(Sys.time()), 83 | containers = conts 84 | ) 85 | 86 | json <- jsonlite::toJSON(obj, pretty = TRUE, auto_unbox = TRUE) 87 | writeLines(json, "manifest.json") 88 | cli::cli_alert_success("Container manifest updated.") 89 | } 90 | 91 | docker_inspect <- function(name, property) { 92 | ans <- trimws(processx::run( 93 | "docker", 94 | c("inspect", "-f", paste0("{{.", property, "}}"), name) 95 | )$stdout) 96 | 97 | # remove [ and ] for array values, should be an array of one element 98 | if (first_char(ans) == "[" && last_char(ans) == "]") { 99 | ans <- trimws(substr(ans, 2, nchar(ans) - 1)) 100 | } 101 | 102 | ans 103 | } 104 | 105 | docker_run <- function(name, cmd) { 106 | processx::run( 107 | echo_cmd = TRUE, 108 | "docker", 109 | c("run", "--rm", name, cmd) 110 | )$stdout 111 | } 112 | 113 | get_container_data <- function(cont, sha) { 114 | cache <- getOption(sha, NULL) 115 | if (!is.null(cache)) return(cache) 116 | tag <- sprintf("ghcr.io/r-hub/containers/%s:latest", cont) 117 | name <- sprintf("ghcr.io/r-hub/containers/%s@%s", cont, sha) 118 | docker_pull(name) 119 | 120 | id <- docker_inspect(name, "RepoDigests") 121 | created <- docker_inspect(name, "Created") 122 | size <- as.numeric(docker_inspect(name, "Size")) 123 | 124 | os_release <- docker_run(name, c("cat", "/etc/os-release")) 125 | uname <- trimws(docker_run(name, c("uname", "-a"))) 126 | ospkgs <- docker_run(name, c("bash", "-c", "dpkg -l || rpm -qa")) 127 | 128 | cc <- docker_run(name, c("bash", "-c", "$(R CMD config CC) --version")) 129 | cxx <- docker_run(name, c("bash", "-c", "$(R CMD config CXX) --version")) 130 | fc <- docker_run(name, c("bash", "-c", "$(R CMD config FC) --version")) 131 | 132 | si <- docker_run(name, c("R", "-q", "--slave", "-e", "utils::sessionInfo()")) 133 | extsv <- docker_run(name, c("R", "-q", "--slave", "-e", "extSoftVersion()")) 134 | caps <- docker_run(name, c("R", "-q", "--slave", "-e", "capabilities()")) 135 | rconfig <- docker_run(name, c("R", "CMD", "config", "--all")) 136 | curl <- docker_run(name, c("R", "-q", "--slave", "-e", "libcurlVersion()")) 137 | lav <- docker_run(name, c("R", "-q", "--slave", "-e", "La_version()")) 138 | lal <- docker_run(name, c("R", "-q", "--slave", "-e", "La_library()")) 139 | grs <- docker_run(name, c("R", "-q", "--slave", "-e", "grSoftVersion()")) 140 | pcre <- docker_run(name, c("R", "-q", "--slave", "-e", "pcre_config()")) 141 | l10n <- docker_run(name, c("R", "-q", "--slave", "-e", "l10n_info()")) 142 | 143 | result <- list( 144 | tag = tag, 145 | id = id, 146 | size = size, 147 | created = created, 148 | 149 | "/etc/os-release" = os_release, 150 | "uname -a" = uname, 151 | "OS packages" = ospkgs, 152 | 153 | "$(CC) --version" = cc, 154 | "$(CXX) --version" = cxx, 155 | "$(FC) --version" = fc, 156 | 157 | "sessionInfo()" = si, 158 | "extSoftVersion()" = extsv, 159 | "libcurlVersion()" = curl, 160 | "capabilities()" = caps, 161 | "R CMD config --all" = rconfig, 162 | "La_version()" = lav, 163 | "La_library()" = lal, 164 | "grSoftVersion()" = grs, 165 | "pcre_config()" = pcre, 166 | "l10n_info()" = l10n 167 | ) 168 | 169 | try(processx::run( 170 | echo = TRUE, 171 | "docker", 172 | c("rmi", name) 173 | )) 174 | 175 | options(structure(list(result), names = sha)) 176 | result 177 | } 178 | 179 | current_containers <- function() { 180 | cached <- getOption("rhub::container-cache", NULL) 181 | if (!is.null(cached)) return(cached) 182 | conts <- list_containers() 183 | result <- structure(vector("list", length(conts)), names = conts) 184 | for (cont in conts) { 185 | result[[cont]] <- gh::gh( 186 | "/orgs/r-hub/packages/container/containers%2f{container}/versions", 187 | container = cont, 188 | per_page = 5 189 | ) 190 | } 191 | options("rhub::container-cache" = result) 192 | result 193 | } 194 | -------------------------------------------------------------------------------- /containers/clang-asan/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN export DEBIAN_FRONTEND=noninteractive && \ 9 | apt-get update -y && \ 10 | apt-get install -y curl && \ 11 | cd /tmp && \ 12 | . /etc/os-release && \ 13 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/r-rstudio-${ID}-$(echo $VERSION_ID | tr -d .)-devel-asan_1_$(dpkg --print-architecture).deb" && \ 14 | apt install -y ./r-*.deb && \ 15 | rm r-*.deb && \ 16 | apt-get clean 17 | 18 | # System requirements that pak does not know about 19 | RUN export DEBIAN_FRONTEND=noninteractive && \ 20 | apt-get update -y && \ 21 | apt-get install -y patch && \ 22 | apt-get clean 23 | 24 | # ------------------------------------------------------------------------------------ 25 | # clang 19 26 | 27 | RUN export DEBIAN_FRONTEND=noninteractive && \ 28 | apt-get update -y && \ 29 | apt-get install -y gnupg && \ 30 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main" \ 31 | > /etc/apt/sources.list.d/llvm.list && \ 32 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main" \ 33 | >> /etc/apt/sources.list.d/llvm.list && \ 34 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 35 | apt-get update -y && \ 36 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev flang-19 && \ 37 | apt-get clean 38 | 39 | # ------------------------------------------------------------------------------------ 40 | # system dependencies 41 | 42 | RUN export DEBIAN_FRONTEND=noninteractive && \ 43 | echo "deb https://repos-ppa.r-pkg.org jammy main" \ 44 | > /etc/apt/sources.list.d/rhub.list && \ 45 | curl -L https://raw.githubusercontent.com/r-hub/repos-ppa/main/rhub.gpg.key | apt-key add - && \ 46 | apt-get update -y && \ 47 | apt-get install protobuf-clang19 jags-clang19 imagemagick-clang19 poppler-clang19 48 | 49 | # ------------------------------------------------------------------------------------ 50 | # Useful system packages, some are needed for R CMD check 51 | 52 | RUN export DEBIAN_FRONTEND=noninteractive && \ 53 | apt-get update -y && \ 54 | apt-get install -y pkg-config perl qpdf git tidy && \ 55 | apt-get clean 56 | 57 | RUN curl -o /usr/local/bin/checkbashisms \ 58 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 59 | chmod +x /usr/local/bin/checkbashisms 60 | 61 | # ------------------------------------------------------------------------------------ 62 | # Update the system config, because the user Makevars is ignored 63 | # for some packages 64 | RUN app="-fsanitize=address,undefined -fno-sanitize=float-divide-by-zero -fno-sanitize=alignment -fno-omit-frame-pointer -fsanitize=pointer-overflow -fsanitize=signed-integer-overflow"; \ 65 | appxx="$app -frtti"; \ 66 | makeconf="/opt/R/devel-asan/lib/R/etc/Makeconf"; \ 67 | sed -i -E '/^CC ?=/ s/$/ '"$app"/ "${makeconf}" && \ 68 | sed -i -E '/^CC[0-9][0-9] ?=/ s/$/ '"$app"/ "${makeconf}" && \ 69 | sed -i -E '/^CXX ?=/ s/$/ '"$appxx"/ "${makeconf}" && \ 70 | sed -i -E '/^CXX[0-9][0-9] ?=/ s/$/ '"$appxx"/ "${makeconf}" 71 | 72 | 73 | # ------------------------------------------------------------------------------------ 74 | # Put R on PATH 75 | # AUto-install system requirements 76 | 77 | ENV PATH="/opt/R/devel-asan/bin:${PATH}" 78 | ENV PKG_SYSREQS=true 79 | ENV R_PKG_SYSREQS2=true 80 | 81 | # ------------------------------------------------------------------------------------ 82 | # Set CRAN repo, we don't use P3M, because of the gcc <-> clang ABI 83 | # differences. :( 84 | 85 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 86 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile 87 | 88 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 89 | . /etc/os-release; \ 90 | echo "options(pkg.current_platform = 'x86_64-pc-linux-gnu-${ID}-${VERSION_ID}-libc++')" \ 91 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 92 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 93 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}/libc++', getOption('repos')))" \ 94 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 95 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 96 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 97 | fi 98 | 99 | # ------------------------------------------------------------------------------------ 100 | # Install pak 101 | 102 | RUN /opt/R/devel-asan/bin/R -q -e \ 103 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 104 | 105 | # ------------------------------------------------------------------------------------ 106 | # Locale 107 | 108 | RUN export DEBIAN_FRONTEND=noninteractive && \ 109 | apt-get update -y && \ 110 | apt-get install -y locales && \ 111 | apt-get clean && \ 112 | locale-gen en_GB.UTF-8 en_US.UTF-8 && \ 113 | update-locale 114 | ENV LC_COLLATE C 115 | ENV LANG en_GB.UTF-8 116 | 117 | # ------------------------------------------------------------------------------------ 118 | # Use user's package library for the rest 119 | 120 | RUN /opt/R/devel-asan/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 121 | 122 | # ------------------------------------------------------------------------------------ 123 | # Copy check script 124 | 125 | COPY r-check /usr/local/bin 126 | 127 | # ------------------------------------------------------------------------------------ 128 | # Check config 129 | 130 | ENV ASAN_OPTIONS="detect_leaks=0:alloc_dealloc_mismatch=0" 131 | ENV UBSAN_OPTIONS="print_stacktrace=1" 132 | ENV RJAVA_JVM_STACK_WORKAROUND 0 133 | ENV RGL_USE_NULL true 134 | ENV R_DONT_USE_TK true 135 | 136 | ENV OMP_THREAD_LIMIT=2 137 | ENV R_DATATABLE_NUM_THREADS=2 138 | 139 | # ------------------------------------------------------------------------------------ 140 | # Check config, only runtime checks 141 | 142 | ENV _R_CHECK_TESTS_NLINES_="0" 143 | ENV CHECK_ARGS="--extra-arch --no-stop-on-test-error" 144 | 145 | # ------------------------------------------------------------------------------------ 146 | # Very minimal test 147 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 148 | -------------------------------------------------------------------------------- /containers/clang-ubsan/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM ubuntu:22.04 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN export DEBIAN_FRONTEND=noninteractive && \ 9 | apt-get update -y && \ 10 | apt-get install -y curl && \ 11 | cd /tmp && \ 12 | . /etc/os-release && \ 13 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/r-rstudio-${ID}-$(echo $VERSION_ID | tr -d .)-devel-asan_1_$(dpkg --print-architecture).deb" && \ 14 | apt install -y ./r-*.deb && \ 15 | rm r-*.deb && \ 16 | apt-get clean 17 | 18 | # System requirements that pak does not know about 19 | RUN export DEBIAN_FRONTEND=noninteractive && \ 20 | apt-get update -y && \ 21 | apt-get install -y patch && \ 22 | apt-get clean 23 | 24 | # ------------------------------------------------------------------------------------ 25 | # clang 19 26 | 27 | RUN export DEBIAN_FRONTEND=noninteractive && \ 28 | apt-get update -y && \ 29 | apt-get install -y gnupg && \ 30 | echo "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main" \ 31 | > /etc/apt/sources.list.d/llvm.list && \ 32 | echo "deb-src http://apt.llvm.org/jammy/ llvm-toolchain-jammy-19 main" \ 33 | >> /etc/apt/sources.list.d/llvm.list && \ 34 | curl -L https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - && \ 35 | apt-get update -y && \ 36 | apt-get install -y clang-19 libc++abi-19-dev libc++-19-dev libomp-19-dev flang-19 && \ 37 | apt-get clean 38 | 39 | # ------------------------------------------------------------------------------------ 40 | # system dependencies 41 | 42 | RUN export DEBIAN_FRONTEND=noninteractive && \ 43 | echo "deb https://repos-ppa.r-pkg.org jammy main" \ 44 | > /etc/apt/sources.list.d/rhub.list && \ 45 | curl -L https://raw.githubusercontent.com/r-hub/repos-ppa/main/rhub.gpg.key | apt-key add - && \ 46 | apt-get update -y && \ 47 | apt-get install protobuf-clang19 jags-clang19 imagemagick-clang19 poppler-clang19 48 | 49 | # ------------------------------------------------------------------------------------ 50 | # Useful system packages, some are needed for R CMD check 51 | 52 | RUN export DEBIAN_FRONTEND=noninteractive && \ 53 | apt-get update -y && \ 54 | apt-get install -y pkg-config perl qpdf git tidy && \ 55 | apt-get clean 56 | 57 | RUN curl -o /usr/local/bin/checkbashisms \ 58 | https://raw.githubusercontent.com/r-hub/containers/main/dependencies/checkbashisms/checkbashisms && \ 59 | chmod +x /usr/local/bin/checkbashisms 60 | 61 | # ------------------------------------------------------------------------------------ 62 | # Update the system config, because the user Makevars is ignored 63 | # for some packages 64 | RUN app="-fsanitize=undefined -fno-sanitize=function -fno-omit-frame-pointer" \ 65 | appxx="$app -frtti"; \ 66 | makeconf="/opt/R/devel-asan/lib/R/etc/Makeconf"; \ 67 | sed -i -E '/^CC ?=/ s/$/ '"$app"/ "${makeconf}" && \ 68 | sed -i -E '/^CC[0-9][0-9] ?=/ s/$/ '"$app"/ "${makeconf}" && \ 69 | sed -i -E '/^CXX ?=/ s/$/ '"$appxx"/ "${makeconf}" && \ 70 | sed -i -E '/^CXX[0-9][0-9] ?=/ s/$/ '"$appxx"/ "${makeconf}" && \ 71 | sed -i '/^SAN_LIBS[ ]*=/i UBSAN_DIR = /usr/lib/llvm-19/lib/clang/19/lib/linux' "${makeconf}" && \ 72 | sed -i 's|^SAN_LIBS[ ]*=.*$|SAN_LIBS = -L$(UBSAN_DIR) -Wl,-rpath,$(UBSAN_DIR) -lclang_rt.ubsan_standalone-x86_64|' "${makeconf}" 73 | 74 | # ------------------------------------------------------------------------------------ 75 | # Put R on PATH 76 | # AUto-install system requirements 77 | 78 | ENV PATH="/opt/R/devel-asan/bin:${PATH}" 79 | ENV PKG_SYSREQS=true 80 | ENV R_PKG_SYSREQS2=true 81 | 82 | # ------------------------------------------------------------------------------------ 83 | # Set CRAN repo, we don't use P3M, because of the gcc <-> clang ABI 84 | # differences. :( 85 | 86 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 87 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile 88 | 89 | RUN if [ "$(uname -p)" = "x86_64" ]; then \ 90 | . /etc/os-release; \ 91 | echo "options(pkg.current_platform = 'x86_64-pc-linux-gnu-${ID}-${VERSION_ID}-libc++')" \ 92 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 93 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 94 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}/libc++', getOption('repos')))" \ 95 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 96 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 97 | >> /opt/R/devel-asan/lib/R/library/base/R/Rprofile; \ 98 | fi 99 | 100 | # ------------------------------------------------------------------------------------ 101 | # Install pak 102 | 103 | RUN /opt/R/devel-asan/bin/R -q -e \ 104 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 105 | 106 | # ------------------------------------------------------------------------------------ 107 | # Locale 108 | 109 | RUN export DEBIAN_FRONTEND=noninteractive && \ 110 | apt-get update -y && \ 111 | apt-get install -y locales && \ 112 | apt-get clean && \ 113 | locale-gen en_GB.UTF-8 en_US.UTF-8 && \ 114 | update-locale 115 | ENV LC_COLLATE C 116 | ENV LANG en_GB.UTF-8 117 | 118 | # ------------------------------------------------------------------------------------ 119 | # Use user's package library for the rest 120 | 121 | RUN /opt/R/devel-asan/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 122 | 123 | # ------------------------------------------------------------------------------------ 124 | # Copy check script 125 | 126 | COPY r-check /usr/local/bin 127 | 128 | # ------------------------------------------------------------------------------------ 129 | # Check config 130 | 131 | ENV ASAN_OPTIONS="detect_leaks=0:alloc_dealloc_mismatch=0" 132 | ENV UBSAN_OPTIONS="print_stacktrace=1" 133 | ENV RJAVA_JVM_STACK_WORKAROUND 0 134 | ENV RGL_USE_NULL true 135 | ENV R_DONT_USE_TK true 136 | 137 | ENV OMP_THREAD_LIMIT=2 138 | ENV R_DATATABLE_NUM_THREADS=2 139 | 140 | # ------------------------------------------------------------------------------------ 141 | # Check config, only runtime checks 142 | 143 | ENV _R_CHECK_TESTS_NLINES_="0" 144 | ENV CHECK_ARGS="--extra-arch --no-stop-on-test-error" 145 | 146 | # ------------------------------------------------------------------------------------ 147 | # Very minimal test 148 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 149 | -------------------------------------------------------------------------------- /containers/nosuggests/Dockerfile: -------------------------------------------------------------------------------- 1 | 2 | FROM fedora:38 3 | ENV R_HUB=true 4 | 5 | # ------------------------------------------------------------------------------------ 6 | # Install pre-built R and requirements 7 | 8 | RUN dnf -y upgrade && \ 9 | dnf -y install dnf-plugins-core && \ 10 | dnf -y install curl && \ 11 | . /etc/os-release && \ 12 | curl -LO "https://github.com/r-hub/containers/releases/download/latest/R-rstudio-${ID}-${VERSION_ID}-devel-gcc-1-1.$(arch).rpm" && \ 13 | yum install -y R-*.rpm && \ 14 | rm R-*.rpm 15 | 16 | # Extra system packages that pak does not know about 17 | RUN dnf install -y gawk patch && \ 18 | dnf install -y https://rpms.r-pkg.org/fedora-38/jags-4.3.2-1.$(arch).rpm 19 | 20 | # ------------------------------------------------------------------------------------ 21 | # Put R on PATH 22 | # AUto-install system requirements 23 | 24 | ENV PATH="/opt/R/devel-gcc/bin:${PATH}" 25 | ENV PKG_SYSREQS=true 26 | ENV R_PKG_SYSREQS2=true 27 | 28 | # ------------------------------------------------------------------------------------ 29 | # Set CRAN repo, no P3M for Fedora 30 | 31 | RUN echo 'options(repos =c(CRAN = "https://cran.rstudio.com"))' \ 32 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile 33 | 34 | RUN if [ "$(uname -m)" = "x86_64" ]; then \ 35 | . /etc/os-release; \ 36 | RVER=$(R -s -e 'cat(paste(getRversion()[,1:2]))'); \ 37 | echo "options(repos = c(RHUB = 'https://raw.githubusercontent.com/r-hub/repos/main/${ID}-${VERSION_ID}/${RVER}', getOption('repos')))" \ 38 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile; \ 39 | echo 'options(HTTPUserAgent = sprintf("R/%s R (%s)", getRversion(), paste(getRversion(), R.version["platform"], R.version["arch"], R.version["os"])))' \ 40 | >> /opt/R/devel-gcc/lib/R/library/base/R/Rprofile; \ 41 | fi 42 | 43 | # ------------------------------------------------------------------------------------ 44 | # Install pak 45 | 46 | RUN /opt/R/devel-gcc/bin/R -q -e \ 47 | 'install.packages("pak", repos = sprintf("https://r-lib.github.io/p/pak/%s/%s/%s/%s", "devel", .Platform$pkgType, R.Version()$os, R.Version()$arch))' 48 | 49 | # ------------------------------------------------------------------------------------ 50 | # Locale 51 | 52 | RUN dnf install -y glibc-langpack-en 53 | 54 | ENV LC_ALL en_GB.UTF-8 55 | ENV LANG en_GB.UTF-8 56 | 57 | # ------------------------------------------------------------------------------------ 58 | # Use user's package library for the rest 59 | 60 | RUN /opt/R/devel-gcc/bin/R -q -e 'dir.create(Sys.getenv("R_LIBS_USER"), showWarnings = FALSE, recursive = TRUE)' 61 | 62 | # ------------------------------------------------------------------------------------ 63 | # Useful system packages 64 | 65 | RUN dnf install -y pkg-config devscripts-checkbashisms qpdf git tidy 66 | 67 | # ------------------------------------------------------------------------------------ 68 | # TinyTeX, only available for x86_64 69 | 70 | RUN export DEBIAN_FRONTEND=noninteractive && \ 71 | if [ "$(uname -m)" = "x86_64" ]; then \ 72 | dnf install -y wget perl && \ 73 | cd /root && \ 74 | wget -qO- "https://yihui.org/tinytex/install-bin-unix.sh" | sh -s - --admin --no-path && \ 75 | ~/.TinyTeX/bin/*/tlmgr update --self || true && \ 76 | ~/.TinyTeX/bin/*/tlmgr install makeindex; \ 77 | fi 78 | 79 | # we can't really query the arch here (FIXME!), but this should be ok 80 | ENV PATH="/root/.TinyTeX/bin/x86_64-linux:/root/.TinyTeX/bin/aarch64-linux:${PATH}" 81 | 82 | # ------------------------------------------------------------------------------------ 83 | # Copy check script 84 | 85 | COPY r-check /usr/local/bin 86 | 87 | # ------------------------------------------------------------------------------------ 88 | # Very minimal test 89 | RUN R -e 'for (p in getOption("defaultPackages")) { library(p, character.only=TRUE) }' 90 | 91 | # ------------------------------------------------------------------------------------ 92 | # Check config 93 | # https://github.com/r-devel/r-dev-web/blob/master/CRAN/QA/BDR/gannet/packages/incoming/check-noSuggests 94 | 95 | # ----------------------------------------------------- 96 | 97 | ENV OMP_THREAD_LIMIT=2 98 | 99 | ENV _R_CHECK_FORCE_SUGGESTS_=false 100 | ENV LC_CTYPE=en_GB.utf8 101 | ## ENV MYSQL_USER ripley 102 | ## ENV POSTGRES_USER ripley 103 | ## ENV POSTGRES_DATABASE ripley 104 | ## ENV RMPI_INCLUDE /usr/include/openmpi-x86_64 105 | ## ENV RMPI_LIB_PATH /usr/lib64/openmpi/lib 106 | ## ENV RMPI_TYPE OPENMPI 107 | ENV R_BROWSER=false 108 | ENV R_PDFVIEWER=false 109 | ENV _R_CHECK_INSTALL_DEPENDS_=true 110 | #ENV _R_CHECK_SUGGESTS_ONLY_=true 111 | ENV _R_CHECK_NO_RECOMMENDED_=true 112 | ENV _R_CHECK_DOC_SIZES2_=true 113 | #ENV R_C_BOUNDS_CHECK yes 114 | ENV _R_CHECK_DEPRECATED_DEFUNCT_=true 115 | ENV _R_CHECK_SCREEN_DEVICE_=warn 116 | ENV _R_CHECK_REPLACING_IMPORTS_=true 117 | ENV _R_CHECK_TOPLEVEL_FILES_=true 118 | ENV _R_CHECK_DOT_FIRSTLIB_=true 119 | ENV _R_CHECK_RD_LINE_WIDTHS_=true 120 | ENV _R_CHECK_S3_METHODS_NOT_REGISTERED_=true 121 | ENV _R_CHECK_OVERWRITE_REGISTERED_S3_METHODS_=true 122 | ENV _R_CHECK_CODE_USAGE_WITH_ONLY_BASE_ATTACHED_=TRUE 123 | ENV _R_CHECK_NATIVE_ROUTINE_REGISTRATION_=true 124 | ENV _R_CHECK_FF_CALLS_=registration 125 | ENV _R_CHECK_PRAGMAS_=true 126 | ENV _R_CHECK_COMPILATION_FLAGS_=true 127 | ENV _R_CHECK_R_DEPENDS_=true 128 | ENV _R_CHECK_PACKAGES_USED_IN_TESTS_USE_SUBDIRS_=true 129 | #ENV _R_CHECK_PKG_SIZES_=false 130 | ENV _R_CHECK_SHLIB_OPENMP_FLAGS_=true 131 | ENV _R_CHECK_BROWSER_NONINTERACTIVE_=true 132 | 133 | #ENV _R_CHECK_CODE_ATTACH_=true 134 | #ENV _R_CHECK_CODE_ASSIGN_TO_GLOBALENV_=true 135 | #ENV _R_CHECK_CODE_DATA_INTO_GLOBALENV_=true 136 | 137 | ENV _R_CHECK_VIGNETTES_SKIP_RUN_MAYBE_=true 138 | ENV _R_CHECK_VIGNETTES_NLINES_=0 139 | ENV _R_CHECK_TESTS_NLINES_=0 140 | 141 | ENV _R_CHECK_LIMIT_CORES_=true 142 | 143 | ENV _R_S3_METHOD_LOOKUP_BASEENV_AFTER_GLOBALENV_=true 144 | ENV _R_CHECK_COMPILATION_FLAGS_KNOWN_="-Wno-deprecated-declarations -Wno-ignored-attributes -Wno-parentheses -Werror=format-security -Wp,-D_FORTIFY_SOURCE=3 -fanalyzer -Werror=implicit-function-declaration -Wstrict-prototypes" 145 | ENV _R_CHECK_AUTOCONF_=true 146 | ENV _R_CHECK_THINGS_IN_CHECK_DIR_=true 147 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_=true 148 | ENV _R_CHECK_THINGS_IN_TEMP_DIR_EXCLUDE_="^ompi.gannet" 149 | ENV _R_CHECK_BASHISMS_=true 150 | ENV _R_CHECK_DEPENDS_ONLY_DATA_=true 151 | ENV _R_CHECK_BOGUS_RETURN_=true 152 | ENV _R_CHECK_MATRIX_DATA_=TRUE 153 | 154 | ## no timeouts please 155 | ## ENV _R_CHECK_ELAPSED_TIMEOUT_=30m 156 | ## ENV _R_CHECK_INSTALL_ELAPSED_TIMEOUT_=180m 157 | ## ENV _R_CHECK_TESTS_ELAPSED_TIMEOUT_=90m 158 | ## ENV _R_CHECK_BUILD_VIGNETTES_ELAPSED_TIMEOUT_=90m 159 | ## ENV _R_CHECK_ONE_VIGNETTE_ELAPSED_TIMEOUT_=60m 160 | 161 | ENV _R_CHECK_XREFS_USE_ALIASES_FROM_CRAN_=TRUE 162 | 163 | ENV _R_CHECK_RD_VALIDATE_RD2HTML_=true 164 | ENV _R_CHECK_RD_MATH_RENDERING_=true 165 | 166 | ## ENV WNHOME /usr/share/wordnet-3.0 167 | 168 | ## ENV R_CRAN_WEB file:///data/gannet/ripley/R 169 | #ENV R_CRAN_WEB https://cran.r-project.org 170 | 171 | # ----------------------------------------------------- 172 | 173 | ENV _R_CHECK_DEPENDS_ONLY_=true 174 | 175 | ENV CHECK_ARGS="--extra-arch" 176 | -------------------------------------------------------------------------------- /website/local.qmd: -------------------------------------------------------------------------------- 1 | --- 2 | title: Run on your machine 3 | --- 4 | 5 | # Prerequisites 6 | 7 | To run these containers on your machine you need: 8 | 9 | * Docker. 10 | - On Linux Docker is probably part of your distribution. Install the 11 | `docker.io` package on Debian and Ubuntu. 12 | See [the Docker docs](https://docs.docker.com/engine/install/) for 13 | other distributions. 14 | - On macOS, you can use 15 | [Docker Desktop](https://docs.docker.com/get-docker/) (free for 16 | non-commercial use), or install docker from 17 | [Homebrew](https://brew.sh/). 18 | - On Windows, you can use 19 | [Docker Desktop](https://docs.docker.com/get-docker/) (free for 20 | non-commercial use). It is possible to use Docker without Docker 21 | Desktop as well, but harder to set up. 22 | * A couple of gigabytes of disk space, depending on how many and which 23 | containers you run at the same time. 24 | 25 | 26 | # Run `R CMD check` on a tarball 27 | 28 | 1. Create a directory, e.g. `check`. E.g. on Unix: 29 | ```sh 30 | mkdir check 31 | ``` 32 | 2. Put the source R package into this directory, e.g. 33 | ```sh 34 | R -q -e "download.packages('cli', 'check')" 35 | ``` 36 | 3. Start the container with the `check` directory mounted at `/check` and 37 | run the `r-check` command. E.g. for the `gcc13` image you would run: 38 | ```sh 39 | docker run -v `pwd`/check:/check ghcr.io/r-hub/containers/gcc13:latest r-check 40 | ``` 41 | If you are running this on a non-Intel machine (eg. an M1 mac), pass 42 | `--platform=linux/amd64` to `docker run`. Note that this will make 43 | Docker emulate an `x86_64` processor, which is usually 5-10 times 44 | slower than native execution. 45 | 4. The result of the check will be in the `check` directory, in the usual 46 | `.Rcheck` directory. 47 | 48 | Here is the complete output from a check of a very simple package, that 49 | has no dependencies, only some system dependencies: 50 | 51 | ```sh 52 | mkdir check 53 | R -q -e "download.packages('tiff', 'check')" 54 | ``` 55 | 56 | ``` 57 | > download.packages('tiff', 'check') 58 | trying URL 'https://cloud.r-project.org/src/contrib/tiff_0.1-11.tar.gz' 59 | Content type 'application/x-gzip' length 68157 bytes (66 KB) 60 | ================================================== 61 | downloaded 66 KB 62 | 63 | [,1] [,2] 64 | [1,] "tiff" "check/tiff_0.1-11.tar.gz" 65 | ``` 66 | 67 | ```sh 68 | docker run --platform=linux/amd64 -v `pwd`/check:/check \ 69 | ghcr.io/r-hub/containers/gcc13:latest r-check 70 | ``` 71 | 72 | ``` 73 | Checking /check/tiff_0.1-11.tar.gz 74 | > pak::pkg_install('deps::/check/tiff_0.1-11.tar.gz', dependencies = TRUE) 75 | 76 | → Will download 1 package with unknown size. 77 | ℹ No downloads are needed 78 | ℹ Installing system requirements 79 | ℹ Executing `sh -c dnf install -y libjpeg-turbo-devel libtiff-devel` 80 | ✔ : [21.4s] 81 | 82 | * using log directory ‘/check/tiff.Rcheck’ 83 | * using R Under development (unstable) (2023-01-23 r83671) 84 | * using platform: x86_64-pc-linux-gnu (64-bit) 85 | * R was compiled by 86 | gcc (GCC) 13.0.1 20230117 (Red Hat 13.0.1-0) 87 | GNU Fortran (GCC) 13.0.1 20230117 (Red Hat 13.0.1-0) 88 | * running under: Fedora Linux 38 (Container Image Prerelease) 89 | * using session charset: UTF-8 90 | * using options ‘--no-manual --no-build-vignettes’ 91 | * checking for file ‘tiff/DESCRIPTION’ ... OK 92 | * this is package ‘tiff’ version ‘0.1-11’ 93 | * checking package namespace information ... OK 94 | * checking package dependencies ... OK 95 | * checking if this is a source package ... OK 96 | * checking if there is a namespace ... OK 97 | * checking for .dll and .exe files ... OK 98 | * checking for hidden files and directories ... OK 99 | * checking for portable file names ... OK 100 | * checking for sufficient/correct file permissions ... OK 101 | * checking whether package ‘tiff’ can be installed ... WARNING 102 | Found the following significant warnings: 103 | common.c:36:13: warning: function declaration isn’t a prototype [-Wstrict-prototypes] 104 | See ‘/check/tiff.Rcheck/00install.out’ for details. 105 | * used C compiler: ‘gcc (GCC) 13.0.1 20230117 (Red Hat 13.0.1-0)’ 106 | * checking package directory ... OK 107 | * checking DESCRIPTION meta-information ... OK 108 | * checking top-level files ... OK 109 | * checking for left-over files ... OK 110 | * checking index information ... OK 111 | * checking package subdirectories ... OK 112 | * checking R files for non-ASCII characters ... OK 113 | * checking R files for syntax errors ... OK 114 | * checking whether the package can be loaded ... OK 115 | * checking whether the package can be loaded with stated dependencies ... OK 116 | * checking whether the package can be unloaded cleanly ... OK 117 | * checking whether the namespace can be loaded with stated dependencies ... OK 118 | * checking whether the namespace can be unloaded cleanly ... OK 119 | * checking loading without being on the library search path ... OK 120 | * checking use of S3 registration ... OK 121 | * checking dependencies in R code ... OK 122 | * checking S3 generic/method consistency ... OK 123 | * checking replacement functions ... OK 124 | * checking foreign function calls ... OK 125 | * checking R code for possible problems ... OK 126 | * checking Rd files ... OK 127 | * checking Rd metadata ... OK 128 | * checking Rd line widths ... OK 129 | * checking Rd cross-references ... OK 130 | * checking for missing documentation entries ... OK 131 | * checking for code/documentation mismatches ... OK 132 | * checking Rd \usage sections ... OK 133 | * checking Rd contents ... OK 134 | * checking for unstated dependencies in examples ... OK 135 | * checking line endings in shell scripts ... OK 136 | * checking line endings in C/C++/Fortran sources/headers ... OK 137 | * checking line endings in Makefiles ... OK 138 | * checking compilation flags in Makevars ... OK 139 | * checking for GNU extensions in Makefiles ... OK 140 | * checking for portable use of $(BLAS_LIBS) and $(LAPACK_LIBS) ... OK 141 | * checking use of PKG_*FLAGS in Makefiles ... OK 142 | * checking use of SHLIB_OPENMP_*FLAGS in Makefiles ... OK 143 | * checking pragmas in C/C++ headers and code ... OK 144 | * checking compilation flags used ... NOTE 145 | Compilation used the following non-portable flag(s): 146 | ‘-Werror=format-security’ ‘-Wp,-D_FORTIFY_SOURCE=2’ 147 | * checking compiled code ... OK 148 | * checking examples ... OK 149 | * checking for non-standard things in the check directory ... OK 150 | * checking for detritus in the temp directory ... OK 151 | * DONE 152 | 153 | Status: 1 WARNING, 1 NOTE 154 | See 155 | ‘/check/tiff.Rcheck/00check.log’ 156 | for details. 157 | ``` 158 | 159 | ```sh 160 | ls check/tiff.Rcheck/ 161 | ``` 162 | 163 | ``` 164 | 00_pkg_src/ 00install.out tiff-Ex.R tiff-Ex.pdf 165 | 00check.log tiff/ tiff-Ex.Rout 166 | ``` 167 | 168 | 169 | # Interactive debugging 170 | 171 | This is similar to running `R CMD check`, but start `bash` instead of 172 | `r-check`, and use `-ti` to create an interactive session: 173 | ```sh 174 | docker run -v `pwd`/check:/check ghcr.io/r-hub/containers/gcc13:latest bash 175 | ``` 176 | 177 | You'll need to install the dependencies of the package. The easiest is to 178 | use pak, which is preinstalled in all containers. From the root directory 179 | of the extracted package call: 180 | ```sh 181 | R -q -e "pak::pkg_install('deps::.', dependencies = TRUE)" 182 | ``` 183 | This installs all dependencies and system requirements of the package. 184 | 185 | 186 | # Multiple R versions 187 | 188 | Some container images (e.g. centos7) have multiple versions of R installed. 189 | You can use `rig ls` to list all versions, and `rig default ` to 190 | set the default one. 191 | To run `r-check` with a certain R version, set the `R_VERSION` environment 192 | variable for the container. E.g. 193 | 194 | ```sh 195 | docker run -ti --rm --platform=linux/amd64 -v `pwd`/check:/check \ 196 | -e "R_VERSION=3.6.3" ghcr.io/r-hub/containers/centos7:latest r-check 197 | ``` 198 | --------------------------------------------------------------------------------