From 2bd13e016cfdb164e5675fad4a7e44871d57894f Mon Sep 17 00:00:00 2001 From: pat-s Date: Sat, 6 Dec 2025 12:14:32 +0100 Subject: [PATCH] refactor: awscli -> s5cmd, add alpine 323 --- Justfile | 5 +++ builder/Dockerfile.alpine-320 | 8 ++-- builder/Dockerfile.alpine-321 | 8 ++-- builder/Dockerfile.alpine-322 | 8 ++-- builder/Dockerfile.alpine-323 | 26 ++++++++++++ builder/Dockerfile.centos-7 | 6 +-- builder/Dockerfile.centos-8 | 6 +-- builder/Dockerfile.debian-10 | 4 +- builder/Dockerfile.debian-11 | 4 +- builder/Dockerfile.debian-12 | 8 ++-- builder/Dockerfile.fedora-38 | 8 ++-- builder/Dockerfile.fedora-39 | 8 ++-- builder/Dockerfile.fedora-40 | 8 ++-- builder/Dockerfile.opensuse-155 | 8 ++-- builder/Dockerfile.rhel-10 | 8 ++-- builder/Dockerfile.rhel-9 | 8 ++-- builder/Dockerfile.ubuntu-2004 | 4 +- builder/Dockerfile.ubuntu-2204 | 4 +- builder/Dockerfile.ubuntu-2404 | 8 ++-- builder/build.sh | 4 +- builder/docker-compose.yml | 12 ++++++ builder/package.alpine-323 | 74 +++++++++++++++++++++++++++++++++ jenkins/Dockerfile | 7 +++- 23 files changed, 175 insertions(+), 69 deletions(-) create mode 100644 builder/Dockerfile.alpine-323 create mode 100644 builder/package.alpine-323 diff --git a/Justfile b/Justfile index 51636df..6d15aad 100644 --- a/Justfile +++ b/Justfile @@ -37,3 +37,8 @@ build-r-alpine-322 R_VERSION: export PLATFORM=alpine-322; \ export R_VERSION={{R_VERSION}}; \ make build-r-$PLATFORM + +build-r-alpine-323 R_VERSION: + export PLATFORM=alpine-323; \ + export R_VERSION={{R_VERSION}}; \ + make build-r-$PLATFORM diff --git a/builder/Dockerfile.alpine-320 b/builder/Dockerfile.alpine-320 index 71684c8..22673a6 100644 --- a/builder/Dockerfile.alpine-320 +++ b/builder/Dockerfile.alpine-320 @@ -5,11 +5,9 @@ ENV OS_IDENTIFIER alpine-320 RUN set -x \ && apk add -q R-dev curl ca-certificates bash g++ tzdata openjdk17 texmf-dist texlive-full tar sed patch tcl tk tk-dev xvfb libdeflate libdeflate-dev -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.39.0/nfpm_2.39.0_$(arch).apk" && \ apk add --allow-untrusted "./nfpm_2.39.0_$(arch).apk" && \ diff --git a/builder/Dockerfile.alpine-321 b/builder/Dockerfile.alpine-321 index d51b87a..a47e9a7 100644 --- a/builder/Dockerfile.alpine-321 +++ b/builder/Dockerfile.alpine-321 @@ -5,11 +5,9 @@ ENV OS_IDENTIFIER alpine-321 RUN set -x \ && apk add -q R-dev curl ca-certificates bash g++ tzdata openjdk17 texmf-dist texlive-full tar sed patch tcl tk tk-dev xvfb libdeflate libdeflate-dev -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.39.0/nfpm_2.39.0_$(arch).apk" && \ apk add --allow-untrusted "./nfpm_2.39.0_$(arch).apk" && \ diff --git a/builder/Dockerfile.alpine-322 b/builder/Dockerfile.alpine-322 index 2f89019..7681ac9 100644 --- a/builder/Dockerfile.alpine-322 +++ b/builder/Dockerfile.alpine-322 @@ -5,11 +5,9 @@ ENV OS_IDENTIFIER alpine-322 RUN set -x \ && apk add -q R-dev curl ca-certificates bash g++ tzdata openjdk17 texmf-dist texlive-full tar sed patch tcl tk tk-dev xvfb libdeflate libdeflate-dev -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.39.0/nfpm_2.39.0_$(arch).apk" && \ apk add --allow-untrusted "./nfpm_2.39.0_$(arch).apk" && \ diff --git a/builder/Dockerfile.alpine-323 b/builder/Dockerfile.alpine-323 new file mode 100644 index 0000000..1c49855 --- /dev/null +++ b/builder/Dockerfile.alpine-323 @@ -0,0 +1,26 @@ +FROM alpine:3.23 + +ENV OS_IDENTIFIER alpine-323 + +RUN set -x \ + && apk add -q R-dev curl ca-certificates bash g++ tzdata openjdk17 texmf-dist texlive-full tar sed patch tcl tk tk-dev xvfb libdeflate libdeflate-dev + +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd + +RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.39.0/nfpm_2.39.0_$(arch).apk" && \ + apk add --allow-untrusted "./nfpm_2.39.0_$(arch).apk" && \ + rm "nfpm_2.39.0_$(arch).apk" + +RUN chmod 0777 /opt + +# Override the default pager used by R +ENV PAGER /usr/bin/pager + +ENV CONFIGURE_OPTIONS "--enable-R-shlib --with-tcltk --enable-memory-profiling --with-x=no --with-blas --with-lapack" + +COPY package.alpine-322 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/Dockerfile.centos-7 b/builder/Dockerfile.centos-7 index a038cad..4a9f022 100644 --- a/builder/Dockerfile.centos-7 +++ b/builder/Dockerfile.centos-7 @@ -45,9 +45,9 @@ RUN yum -y update \ zlib-devel \ && yum clean all -# Install AWS CLI. -RUN pip3 install awscli --upgrade --user && \ - ln -s /root/.local/bin/aws /usr/bin/aws +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.centos-8 b/builder/Dockerfile.centos-8 index fa8d8f6..25e6e40 100644 --- a/builder/Dockerfile.centos-8 +++ b/builder/Dockerfile.centos-8 @@ -46,9 +46,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI. -RUN pip3 install awscli --upgrade --user \ - && ln -s /root/.local/bin/aws /usr/bin/aws +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.debian-10 b/builder/Dockerfile.debian-10 index 1afcac5..a13b58d 100644 --- a/builder/Dockerfile.debian-10 +++ b/builder/Dockerfile.debian-10 @@ -10,7 +10,9 @@ RUN set -x \ libopenblas-base libpcre2-dev make python3-pip wget \ && apt-get build-dep -y r-base -RUN pip3 install awscli +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN chmod 0777 /opt diff --git a/builder/Dockerfile.debian-11 b/builder/Dockerfile.debian-11 index b8328af..cf184ce 100644 --- a/builder/Dockerfile.debian-11 +++ b/builder/Dockerfile.debian-11 @@ -10,7 +10,9 @@ RUN set -x \ libopenblas-base libpcre2-dev make python3-pip wget \ && apt-get build-dep -y r-base -RUN pip3 install awscli +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN chmod 0777 /opt diff --git a/builder/Dockerfile.debian-12 b/builder/Dockerfile.debian-12 index f5f4d2b..fd56cd6 100644 --- a/builder/Dockerfile.debian-12 +++ b/builder/Dockerfile.debian-12 @@ -10,11 +10,9 @@ RUN set -x \ libopenblas0 libpcre2-dev make unzip wget \ && apt-get build-dep -y r-base -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN chmod 0777 /opt diff --git a/builder/Dockerfile.fedora-38 b/builder/Dockerfile.fedora-38 index a5540dc..c4a0907 100644 --- a/builder/Dockerfile.fedora-38 +++ b/builder/Dockerfile.fedora-38 @@ -44,11 +44,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.fedora-39 b/builder/Dockerfile.fedora-39 index 7f6306d..adec533 100644 --- a/builder/Dockerfile.fedora-39 +++ b/builder/Dockerfile.fedora-39 @@ -44,11 +44,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.fedora-40 b/builder/Dockerfile.fedora-40 index 5a8a18c..3b2ad4f 100644 --- a/builder/Dockerfile.fedora-40 +++ b/builder/Dockerfile.fedora-40 @@ -44,11 +44,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.opensuse-155 b/builder/Dockerfile.opensuse-155 index 34c55f1..10d47a2 100644 --- a/builder/Dockerfile.opensuse-155 +++ b/builder/Dockerfile.opensuse-155 @@ -66,11 +66,9 @@ RUN zypper --non-interactive --gpg-auto-import-keys -n install \ zlib-devel \ && zypper clean -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.rhel-10 b/builder/Dockerfile.rhel-10 index a44bf56..71db328 100644 --- a/builder/Dockerfile.rhel-10 +++ b/builder/Dockerfile.rhel-10 @@ -45,11 +45,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.rhel-9 b/builder/Dockerfile.rhel-9 index c30f876..990d419 100644 --- a/builder/Dockerfile.rhel-9 +++ b/builder/Dockerfile.rhel-9 @@ -46,11 +46,9 @@ RUN dnf -y upgrade \ zlib-devel \ && dnf clean all -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN if [ "$(arch)" == "aarch64" ]; then echo arm64; else echo amd64; fi > /tmp/arch diff --git a/builder/Dockerfile.ubuntu-2004 b/builder/Dockerfile.ubuntu-2004 index bbade7a..b861c9d 100644 --- a/builder/Dockerfile.ubuntu-2004 +++ b/builder/Dockerfile.ubuntu-2004 @@ -9,7 +9,9 @@ RUN set -x \ && apt-get install -y curl libopenblas-dev libcurl4-openssl-dev libicu-dev liblapack-dev libpcre2-dev wget python3-pip \ && apt-get build-dep -y r-base -RUN pip3 install awscli +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ diff --git a/builder/Dockerfile.ubuntu-2204 b/builder/Dockerfile.ubuntu-2204 index 4a7bb38..9f95dc6 100644 --- a/builder/Dockerfile.ubuntu-2204 +++ b/builder/Dockerfile.ubuntu-2204 @@ -9,7 +9,9 @@ RUN set -x \ && apt-get install -y curl libcurl4-openssl-dev libicu-dev libopenblas-base libpcre2-dev wget python3-pip \ && apt-get build-dep -y r-base -RUN pip3 install awscli +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ diff --git a/builder/Dockerfile.ubuntu-2404 b/builder/Dockerfile.ubuntu-2404 index d5bbdf8..8b59983 100644 --- a/builder/Dockerfile.ubuntu-2404 +++ b/builder/Dockerfile.ubuntu-2404 @@ -9,11 +9,9 @@ RUN set -x \ && apt install -y curl libcurl4-openssl-dev libicu-dev libopenblas0-pthread libpcre2-dev libpcre3-dev unzip wget \ && apt build-dep -y r-base -# Install AWS CLI -RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-$(uname -m).zip" -o "awscliv2.zip" && \ - unzip awscliv2.zip && \ - ./aws/install && \ - rm -rf aws awscliv2.zip +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd RUN curl -LO "https://github.com/goreleaser/nfpm/releases/download/v2.18.1/nfpm_$(dpkg --print-architecture).deb" && \ apt install -y "./nfpm_$(dpkg --print-architecture).deb" && \ diff --git a/builder/build.sh b/builder/build.sh index 48b4129..549e461 100755 --- a/builder/build.sh +++ b/builder/build.sh @@ -19,11 +19,11 @@ upload_r() { baseName="r/${OS_IDENTIFIER}" if [ -n "$S3_BUCKET" ] && [ "$S3_BUCKET" != "" ]; then echo "Storing artifact on s3: ${S3_BUCKET}, tarball: ${TARBALL_NAME}" - aws s3 cp /tmp/${TARBALL_NAME} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/${TARBALL_NAME} + s5cmd cp /tmp/${TARBALL_NAME} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/${TARBALL_NAME} # check if PKG_FILE has been set by a packager script and act accordingly if [ -n "$PKG_FILE" ] && [ "$PKG_FILE" != "" ]; then if [ -f "$PKG_FILE" ]; then - aws s3 cp ${PKG_FILE} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/pkgs/$(basename ${PKG_FILE}) + s5cmd cp ${PKG_FILE} s3://${S3_BUCKET}/${S3_BUCKET_PREFIX}${baseName}/pkgs/$(basename ${PKG_FILE}) fi fi fi diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index 5e29a71..8e06b87 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -71,6 +71,18 @@ services: image: r-builds:alpine-322 volumes: - /tmp/alpine-322:/tmp/output/alpine-322 + alpine-323: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.alpine-323 + image: r-builds:alpine-323 + volumes: + - /tmp/alpine-323:/tmp/output/alpine-323 debian-10: command: ./build.sh environment: diff --git a/builder/package.alpine-323 b/builder/package.alpine-323 new file mode 100644 index 0000000..2e0b28e --- /dev/null +++ b/builder/package.alpine-323 @@ -0,0 +1,74 @@ +#!/bin/bash + +if [[ ! -d /tmp/output/${OS_IDENTIFIER} ]]; then + mkdir -p "/tmp/output/${OS_IDENTIFIER}" +fi + +# R 3.x requires PCRE1. On Ubuntu 24, R 3.x also requires PCRE2 for Pango support. +pcre_libs='- pcre2-dev' +if [[ "${R_VERSION}" =~ ^3 ]]; then + pcre_libs='- pcre2-dev +- libpcre3-dev' +fi + +deflate_libs='# - libdeflate-dev' +if grep -q '^LIBS *=.*[-]ldeflate' ${R_INSTALL_PATH}/lib/R/etc/Makeconf; then + deflate_libs='- libdeflate-dev' +fi + +cat < /tmp/nfpm.yml +name: r-${R_VERSION} +version: 1 +version_schema: none +section: universe/math +priority: optional +arch: $(arch) +maintainer: Posit Software, PBC +description: | + GNU R statistical computation and graphics system +vendor: Posit Software, PBC +homepage: https://www.r-project.org +license: GPL-2 +depends: +- g++ +- gcc +- gfortran +- libbz2 +# - libc6 +- cairo +- libcurl +${deflate_libs} +# - libglib2.0-0t64 +# - libgomp1 +- icu-dev +- jpeg-dev +# - liblzma-dev +- openblas-dev +- pango +# - libpangocairo-1.0-0 +- libpaper +${pcre_libs} +- libpng-dev +- readline-dev +- tcl +- tiff-dev +- libtirpc-dev +- tk +# - libx11-6 +# - libxt6t64 +- make +# - ucf +- unzip +- zip +- zlib-ng-dev +contents: +- src: ${R_INSTALL_PATH} + dst: ${R_INSTALL_PATH} +EOF + +nfpm package \ + -f /tmp/nfpm.yml \ + -p apk \ + -t "/tmp/output/${OS_IDENTIFIER}" + +export PKG_FILE=$(ls /tmp/output/${OS_IDENTIFIER}/r-${R_VERSION}*.apk | head -1) diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile index fafa24e..8588589 100644 --- a/jenkins/Dockerfile +++ b/jenkins/Dockerfile @@ -4,8 +4,11 @@ ARG JENKINS_UID=386 ARG JENKINS_GID=386 ARG DOCKER_GID=999 -RUN apt-get update -qq && apt-get install -y python-pip -RUN pip install awscli +RUN apt-get update -qq && apt-get install -y curl + +# Install s5cmd for S3 uploads (much faster than AWS CLI) +RUN ARCH=$(uname -m); if [ "$ARCH" = "x86_64" ]; then S5CMD_ARCH="64bit"; else S5CMD_ARCH="arm64"; fi && \ + curl -sL "https://github.com/peak/s5cmd/releases/download/v2.3.0/s5cmd_2.3.0_Linux-${S5CMD_ARCH}.tar.gz" | tar xz -C /usr/local/bin s5cmd # install docker cli RUN wget -q -O /tmp/docker-cli.deb https://download.docker.com/linux/debian/dists/stretch/pool/stable/$(dpkg --print-architecture)/docker-ce-cli_18.09.2~3-0~debian-stretch_$(dpkg --print-architecture).deb \