├── .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 |
--------------------------------------------------------------------------------