diff --git a/.woodpecker/build.yaml b/.woodpecker/build.yaml index 8932a97..9d53c97 100644 --- a/.woodpecker/build.yaml +++ b/.woodpecker/build.yaml @@ -13,6 +13,8 @@ matrix: PLATFORM_ID: 2404 - PLATFORM: opensuse-155 PLATFORM_ID: suse155 + - PLATFORM: alpine-320 + PLATFORM_ID: alpine320 steps: # Ensures that we're always using the latest available upstream build chain @@ -33,7 +35,7 @@ steps: commands: - apk add -q --no-cache curl - curl -s https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/r/r.rb | grep -o 'R-[0-9]*\.[0-9]*\.[0-9]*' | tr -d 'R-' | tr -d '"' > r-release-version.txt - # - echo "3.6.3" > r-release-version.txt + # - echo "4.3.3" > r-release-version.txt - cat r-release-version.txt backend_options: kubernetes: @@ -50,14 +52,14 @@ steps: - name: Check if files for R version already exist in s3 environment: AWS_ACCESS_KEY_ID: - from_secret: b2_application_key_id + from_secret: aws_access_key_id AWS_SECRET_ACCESS_KEY: - from_secret: b2_application_key - AWS_ENDPOINT_URL: https://s3.eu-central-003.backblazeb2.com + from_secret: aws_secret_access_key + AWS_REGION: eu-central-2 image: alpine:3.20 commands: - apk add -q --no-cache aws-cli - - aws s3 ls s3://devxy-r-builds/${PLATFORM_ID}/ | tail -1 | awk '{print $NF}' | cut -c 3-7 > r_build_latest.txt + - aws s3 ls s3://devxy-rbuilds/${PLATFORM_ID}/ | tail -1 | awk '{print $NF}' | cut -c 3-7 > r_build_latest.txt - cat r_build_latest.txt backend_options: kubernetes: @@ -100,23 +102,23 @@ steps: # - /tmp:/tmp # agent on VM - name: Upload - image: pats22/s3-plugin:latest + image: woodpeckerci/plugin-s3:1.3.0 pull: true settings: - bucket: devxy-r-builds + bucket: devxy-rbuilds strip_prefix: /tmp/${PLATFORM}/ source: /tmp/${PLATFORM}/* target: ${PLATFORM_ID}/ - region: eu-central-003 - acl: public-read + region: eu-central-2 + # acl: public-read access_key: - from_secret: b2_application_key_id + from_secret: aws_access_key_id secret_key: - from_secret: b2_application_key - endpoint: s3.eu-central-003.backblazeb2.com + from_secret: aws_secret_access_key + # endpoint: s3.eu-central-003.backblazeb2.com overwrite: false volumes: - - ci-tmp-fsn1:/tmp # agent on k8s + - ci-tmp-rwx:/tmp # agent on k8s # - /tmp:/tmp # agent on VM backend_options: kubernetes: @@ -140,8 +142,9 @@ services: ports: - 2375 volumes: - - ci-tmp-fsn1:/tmp # agent on k8s + - ci-tmp-rwx:/tmp # agent on k8s backend_options: kubernetes: nodeSelector: + kubernetes.io/arch: "arm64" topology.kubernetes.io/region: fsn1 diff --git a/Justfile b/Justfile index 8d0a79f..f0872a2 100644 --- a/Justfile +++ b/Justfile @@ -22,3 +22,8 @@ build-r-opensuse-155 R_VERSION: export PLATFORM=opensuse-155; \ export R_VERSION={{R_VERSION}}; \ make build-r-$PLATFORM + +build-r-alpine-320 R_VERSION: + export PLATFORM=alpine-320; \ + export R_VERSION={{R_VERSION}}; \ + make build-r-$PLATFORM diff --git a/Makefile b/Makefile index c20463e..d73308d 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-155 fedora-38 fedora-39 fedora-40 +PLATFORMS := ubuntu-2004 ubuntu-2204 ubuntu-2404 debian-10 debian-11 debian-12 centos-7 centos-8 rhel-9 opensuse-155 fedora-38 fedora-39 fedora-40 alpine-320 SLS_BINARY ?= ./node_modules/serverless/bin/serverless.js deps: diff --git a/build.sh b/build.sh index a8afa8a..17c8552 100644 --- a/build.sh +++ b/build.sh @@ -20,3 +20,10 @@ export PLATFORM=rhel-9 export R_VERSION=4.3.3 make build-r-$PLATFORM + + + +export PLATFORM=alpine +export R_VERSION=4.3.3 + +make build-r-$PLATFORM diff --git a/builder/Dockerfile.alpine-320 b/builder/Dockerfile.alpine-320 new file mode 100644 index 0000000..0b8d28a --- /dev/null +++ b/builder/Dockerfile.alpine-320 @@ -0,0 +1,28 @@ +FROM alpine:3.20 + +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 + +# 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 + +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-320 /package.sh +COPY build.sh . +COPY patches /patches +ENTRYPOINT ./build.sh diff --git a/builder/docker-compose.yml b/builder/docker-compose.yml index e221aa8..dfeab28 100644 --- a/builder/docker-compose.yml +++ b/builder/docker-compose.yml @@ -35,6 +35,18 @@ services: image: r-builds:ubuntu-2404 volumes: - /tmp/ubuntu-2404:/tmp/output/ubuntu-2404 + alpine-320: + command: ./build.sh + environment: + - R_VERSION=${R_VERSION} + - R_INSTALL_PATH=${R_INSTALL_PATH} + - LOCAL_STORE=/tmp/output + build: + context: . + dockerfile: Dockerfile.alpine-320 + image: r-builds:alpine-320 + volumes: + - /tmp/alpine-320:/tmp/output/alpine-320 debian-10: command: ./build.sh environment: diff --git a/builder/package.alpine-320 b/builder/package.alpine-320 new file mode 100644 index 0000000..2e0b28e --- /dev/null +++ b/builder/package.alpine-320 @@ -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)