From 88c5cf809a599372fe1cbe0e14ad09cd51b69c98 Mon Sep 17 00:00:00 2001 From: Alex Turbov Date: Wed, 29 Jan 2025 19:11:11 +0400 Subject: ci(fedora41): split install prerequisites and build RBEnv into separate phases It improves parallelization and speeds up the build by reusing cached layers. --- .gitlab/ci/docker/fedora41/Dockerfile | 25 ++++++++++++++++++++++++ .gitlab/ci/docker/fedora41/build_rbenv.sh | 28 +++++++++++++++++++++++++++ .gitlab/ci/docker/fedora41/install_deps.sh | 4 ---- .gitlab/ci/docker/fedora41/rbenv_packages.lst | 18 +++++++++++++++++ 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100755 .gitlab/ci/docker/fedora41/build_rbenv.sh create mode 100644 .gitlab/ci/docker/fedora41/rbenv_packages.lst diff --git a/.gitlab/ci/docker/fedora41/Dockerfile b/.gitlab/ci/docker/fedora41/Dockerfile index 872fa4a..25d8e03 100644 --- a/.gitlab/ci/docker/fedora41/Dockerfile +++ b/.gitlab/ci/docker/fedora41/Dockerfile @@ -7,6 +7,7 @@ FROM ${BASE_IMAGE} AS dnf-cache RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \ --mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \ --mount=type=bind,source=iwyu_packages.lst,target=/root/iwyu_packages.lst \ + --mount=type=bind,source=rbenv_packages.lst,target=/root/rbenv_packages.lst \ --mount=type=bind,source=rust_packages.lst,target=/root/rust_packages.lst \ --mount=type=bind,source=rvm_packages.lst,target=/root/rvm_packages.lst \ --mount=type=tmpfs,target=/var/log \ @@ -48,6 +49,27 @@ RUN --mount=type=bind,source=build_rvm.sh,target=/root/build_rvm.sh \ sh /root/build_rvm.sh +FROM ${BASE_IMAGE} AS rbenv +# Pre-install prerequisites for `rbenv`. +RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \ + --mount=type=bind,source=rbenv_packages.lst,target=/root/rbenv_packages.lst \ + --mount=type=cache,from=dnf-cache,source=/var/cache/libdnf5,target=/var/cache/libdnf5,sharing=private \ + --mount=type=tmpfs,target=/var/log \ + --mount=type=tmpfs,target=/tmp \ + dnf install -y $(grep '^[^#]\+$' /root/rbenv_packages.lst) + + +FROM rbenv AS rbenv-build +ENV RBENV_ROOT=/opt/rbenv +ENV RBENV_BUILD_ROOT=/root/.cache/rbenv-build +ENV RUBY_BUILD_CACHE_PATH=/root/.cache/rbenv +# Build Ruby with `rbenv`. +RUN --mount=type=cache,target=/root/.cache \ + --mount=type=bind,source=build_rbenv.sh,target=/root/build_rbenv.sh \ + --mount=type=tmpfs,target=/tmp \ + sh /root/build_rbenv.sh + + FROM ${BASE_IMAGE} AS iwyu-build-env LABEL maintainer="Kyle Edwards " # Pre-install prerequisites to build IWYU. @@ -98,3 +120,6 @@ RUN --mount=type=bind,from=rust-build,source=/root,target=/root \ RUN --mount=type=bind,from=rvm-build,source=/root,target=/root \ tar -C /usr/local -xf /root/rvm.tar + +RUN --mount=type=bind,from=rbenv-build,source=/root,target=/root \ + tar -C / -xf /root/rbenv.tar && rbenv global 3.1.2 diff --git a/.gitlab/ci/docker/fedora41/build_rbenv.sh b/.gitlab/ci/docker/fedora41/build_rbenv.sh new file mode 100755 index 0000000..3ed0033 --- /dev/null +++ b/.gitlab/ci/docker/fedora41/build_rbenv.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +set -e + +echo "gem: --no-document" > ~/.gemrc + +# Ruby rbenv +export RUBY_CONFIGURE_OPTS=--disable-install-doc +export RUBY_BUILD_CURL_OPTS=-C- +rbenv install 3.1.2 -k -s -v + +cat </tmp/exclude.lst +*LICENSE* +*/doc/* +*/man/* +*.md +BSDL +CONTRIBUTING.* +COPYING +LEGAL +PSFL +README.rdoc +History.rdoc +gem_make.out +test-unit-*/test +rss-*/test +EOF +tar -cf /root/rbenv.tar --exclude-from=/tmp/exclude.lst ${RBENV_ROOT} diff --git a/.gitlab/ci/docker/fedora41/install_deps.sh b/.gitlab/ci/docker/fedora41/install_deps.sh index e0aec8a..4a3c797 100755 --- a/.gitlab/ci/docker/fedora41/install_deps.sh +++ b/.gitlab/ci/docker/fedora41/install_deps.sh @@ -11,7 +11,3 @@ done # Remove some other packages tests find /usr/lib64/python3.13/site-packages/breezy -type d -a -name tests -exec rm -rf {} + - -# Ruby rbenv -rbenv install 3.1.2 -rbenv global 3.1.2 diff --git a/.gitlab/ci/docker/fedora41/rbenv_packages.lst b/.gitlab/ci/docker/fedora41/rbenv_packages.lst new file mode 100644 index 0000000..d16afff --- /dev/null +++ b/.gitlab/ci/docker/fedora41/rbenv_packages.lst @@ -0,0 +1,18 @@ +rbenv +ruby-build-rbenv + +# Packages needed for `rbenv` +# https://github.com/rbenv/ruby-build/wiki#fedora +autoconf +bzip2 +gcc +gdbm-devel +libffi-devel +libyaml-devel +make +ncurses-devel +openssl-devel +patch +readline-devel +rust +zlib-devel -- cgit v0.12