Merge topic 'ci-fedora41-dnf-cache'

f398a517be ci: Update to rebuilt Fedora base images
e9fb64f3b7 Source: Drop incorrect class documentation that had typos
2844296c7b FindMPI: Fix typo in comment
72cce810ce ci(fedora41-hip): update the image in sync w/ `fedora41`
fa08bd803d ci(fedora41): refactor tests removal from Python packages
0e5159656a ci(fedora41): split install prerequisites and build for Rust packages
88c5cf809a ci(fedora41): split install prerequisites and build RBEnv into separate phases
86e96322eb ci(fedora41): tune RVM build to speedup and minimize the final image
...

Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !10283
This commit is contained in:
Brad King 2025-02-04 14:00:42 +00:00 committed by Kitware Robot
commit 568a9795a6
20 changed files with 323 additions and 176 deletions

View File

@ -3,25 +3,10 @@
ARG BASE_IMAGE=fedora:41
FROM ${BASE_IMAGE} AS dnf-cache
# Populate DNF cache w/ the fresh metadata and prefetch packages.
RUN --mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \
--mount=type=tmpfs,target=/var/log \
--mount=type=tmpfs,target=/tmp \
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
--downloadonly \
-y \
$(grep -h '^[^#]\+$' /root/*.lst)
FROM ${BASE_IMAGE}
LABEL maintainer="Brad King <brad.king@kitware.com>"
RUN --mount=type=bind,source=install_deps.sh,target=/root/install_deps.sh \
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=cache,from=dnf-cache,source=/var/lib/dnf,target=/var/lib/dnf,sharing=private \
--mount=type=cache,target=/var/cache/pip \
--mount=type=cache,target=/var/lib/dnf \
--mount=type=tmpfs,target=/var/log \
--mount=type=tmpfs,target=/tmp \
sh /root/install_deps.sh
dnf install -y $(grep -h '^[^#]\+$' /root/*.lst)

View File

@ -0,0 +1,32 @@
[main]
autocheck_running_kernel=0
debuglevel=2
diskspacecheck=0
fastestmirror=1
gpgcheck=1
installonly_limit=5
install_weak_deps=0
keepcache=1
log_rotate=0
max_parallel_downloads=10
metadata_expire=90m
multilib_policy=best
plugins=1
tsflags=nodocs
# Enable color for all output
color=always
# Default color options according to yum.conf(5)
color_list_installed_older=bold,black
color_list_installed_newer=bold,yellow
color_list_installed_reinstall=normal
color_list_installed_extra=bold,red
color_list_available_upgrade=bold,blue
color_list_available_downgrade=dim,yellow
color_list_available_install=normal
color_list_available_reinstall =bold,underline,green
color_search_match=bold,magenta
color_update_installed=green
color_update_local=cyan
color_update_remote=yellow

View File

@ -1,10 +0,0 @@
#!/bin/sh
set -e
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
-y \
$(grep '^[^#]\+$' /root/deps_packages.lst)

View File

@ -4,51 +4,107 @@ ARG BASE_IMAGE=fedora:41
FROM ${BASE_IMAGE} AS dnf-cache
# Populate DNF cache w/ the fresh metadata and prefetch packages.
RUN --mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \
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 \
--mount=type=tmpfs,target=/tmp \
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
--downloadonly \
-y \
$(grep -h '^[^#]\+$' /root/*.lst)
dnf install --downloadonly -y $(grep -h '^[^#]\+$' /root/*.lst)
FROM ${BASE_IMAGE} AS rust-build
FROM ${BASE_IMAGE} AS rust-build-env
LABEL maintainer="Ben Boeckel <ben.boeckel@kitware.com>"
RUN --mount=type=bind,source=install_rust.sh,target=/root/install_rust.sh \
# Pre-install prerequisites to build Rust projects.
RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \
--mount=type=bind,source=rust_packages.lst,target=/root/rust_packages.lst \
--mount=type=cache,from=dnf-cache,source=/var/lib/dnf,target=/var/lib/dnf,sharing=private \
--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 \
sh /root/install_rust.sh
dnf install -y $(grep '^[^#]\+$' /root/rust_packages.lst)
FROM ${BASE_IMAGE} AS rvm-build
FROM rust-build-env AS rust-build
LABEL maintainer="Ben Boeckel <ben.boeckel@kitware.com>"
# Build the needed Rust packages.
# https://doc.rust-lang.org/cargo/guide/cargo-home.html?highlight=.cargo#caching-the-cargo-home-in-ci
RUN --mount=type=bind,source=build_rust.sh,target=/root/build_rust.sh \
--mount=type=cache,target=/root/.cargo/registry/index \
--mount=type=cache,target=/root/.cargo/registry/cache \
--mount=type=tmpfs,target=/tmp \
sh /root/build_rust.sh
RUN --mount=type=bind,source=install_rvm.sh,target=/root/install_rvm.sh \
FROM ${BASE_IMAGE} AS rvm-build-env
LABEL maintainer="Ben Boeckel <ben.boeckel@kitware.com>"
# Pre-install prerequisites for RVM.
RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \
--mount=type=bind,source=rvm_packages.lst,target=/root/rvm_packages.lst \
--mount=type=cache,from=dnf-cache,source=/var/lib/dnf,target=/var/lib/dnf,sharing=private \
--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 \
sh /root/install_rvm.sh
dnf install -y $(grep '^[^#]\+$' /root/rvm_packages.lst)
FROM ${BASE_IMAGE} AS iwyu-build
FROM rvm-build-env AS rvm-build
LABEL maintainer="Ben Boeckel <ben.boeckel@kitware.com>"
# Build Ruby with RVM.
RUN --mount=type=bind,source=build_rvm.sh,target=/root/build_rvm.sh \
--mount=type=cache,target=/usr/local/rvm/archives \
--mount=type=cache,target=/usr/local/rvm/gem-cache \
--mount=type=cache,target=/usr/local/rvm/src \
--mount=type=tmpfs,target=/tmp \
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 <kyle.edwards@kitware.com>"
RUN --mount=type=bind,source=install_iwyu.sh,target=/root/install_iwyu.sh \
# Pre-install prerequisites to build IWYU.
RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \
--mount=type=bind,source=iwyu_packages.lst,target=/root/iwyu_packages.lst \
--mount=type=cache,from=dnf-cache,source=/var/lib/dnf,target=/var/lib/dnf,sharing=private \
--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 \
sh /root/install_iwyu.sh
dnf install -y $(grep '^[^#]\+$' /root/iwyu_packages.lst)
FROM iwyu-build-env AS iwyu-build
LABEL maintainer="Kyle Edwards <kyle.edwards@kitware.com>"
# Build IWYU.
RUN --mount=type=bind,source=build_iwyu.sh,target=/root/build_iwyu.sh \
--mount=type=cache,target=/root/include-what-you-use \
--mount=type=tmpfs,target=/tmp \
sh /root/build_iwyu.sh
FROM ${BASE_IMAGE} AS p4-dl
# Download Perforce.
# NOTE `curl` is pre-installed in the base image.
RUN curl -C- -L https://www.perforce.com/downloads/perforce/r21.2/bin.linux26x86_64/helix-core-server.tgz \
| tar -C /usr/local/bin -xvzf - -- p4 p4d
FROM ${BASE_IMAGE}
@ -56,19 +112,24 @@ LABEL maintainer="Ben Boeckel <ben.boeckel@kitware.com>"
ENV RBENV_ROOT=/opt/rbenv
RUN --mount=type=bind,source=install_deps.sh,target=/root/install_deps.sh \
COPY --from=p4-dl --chown=root:root /usr/local/bin/p4 /usr/local/bin/p4d /usr/local/bin
RUN --mount=type=bind,source=dnf.conf,target=/etc/dnf/dnf.conf \
--mount=type=bind,source=install_deps.sh,target=/root/install_deps.sh \
--mount=type=bind,source=deps_packages.lst,target=/root/deps_packages.lst \
--mount=type=cache,from=dnf-cache,source=/var/lib/dnf,target=/var/lib/dnf,sharing=private \
--mount=type=cache,target=/var/cache/pip \
--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 \
sh /root/install_deps.sh
RUN --mount=type=bind,from=iwyu-build,source=/root,target=/root \
tar -C / -xf /root/iwyu.tar
RUN --mount=type=bind,from=rust-build,source=/root,target=/root \
tar -C /usr/local -xf /root/rust.tar
RUN --mount=type=bind,from=rvm-build,source=/root,target=/root \
tar -C /usr/local -xf /root/rvm.tar
RUN --mount=type=bind,from=iwyu-build,source=/root,target=/root \
tar -C / -xf /root/iwyu.tar
RUN --mount=type=bind,from=rbenv-build,source=/root,target=/root \
tar -C / -xf /root/rbenv.tar && rbenv global 3.1.2

View File

@ -0,0 +1,33 @@
#!/bin/sh
set -e
cd
if [ -d include-what-you-use/.git ]; then
cd include-what-you-use
git pull
else
git clone https://github.com/include-what-you-use/include-what-you-use.git
cd include-what-you-use
fi
readonly llvm_full_version="$( clang --version | head -n1 | cut -d' ' -f3 )"
readonly llvm_version="$( echo "$llvm_full_version" | cut -d. -f-1 )"
git checkout "clang_$llvm_version"
mkdir -p build
cd build
cmake -GNinja \
--fresh \
-DCMAKE_BUILD_TYPE=Release \
-DIWYU_RESOURCE_RELATIVE_TO=clang \
-DIWYU_RESOURCE_DIR=../lib/clang/"$llvm_version" \
-DCMAKE_INSTALL_PREFIX=/usr/local/lib/llvm-"$llvm_version" \
..
cmake --build . --parallel
DESTDIR=~/iwyu-destdir cmake --install .
tar -C ~/iwyu-destdir -cf ~/iwyu.tar .

View File

@ -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 <<EOF >/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}

View File

@ -0,0 +1,10 @@
#!/bin/sh
set -e
typos_version=1.29.4
cargo install --root /usr/local --version "$typos_version" typos-cli
strip /usr/local/bin/typos
tar -C /usr/local -cf /root/rust.tar bin/typos

View File

@ -0,0 +1,41 @@
#!/bin/sh
set -e
echo "gem: --no-document" > ~/.gemrc
gpg2 --keyserver hkps://keyserver.ubuntu.com \
--recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable --ignore-dotfiles
export rvm_silence_banner=1
# keep version in sync with `env_fedora*_makefiles.cmake`
/usr/local/rvm/bin/rvm install ruby-3.0.4 --no-docs --disable-binary
for p in archives docs examples gem-cache log src; do
touch /usr/local/rvm/${p}/.tar_exclude
done
cat <<EOF >/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 -C /usr/local \
--exclude-tag-under=.tar_exclude \
--exclude-from=/tmp/exclude.lst \
-cf /root/rvm.tar rvm

View File

@ -24,7 +24,6 @@ jsoncpp-devel
libarchive-devel
libcurl-devel
libuv-devel
libuv-devel
libzstd-devel
rhash-devel
xz-devel
@ -33,17 +32,17 @@ zlib-devel
# Install documentation tools.
python3-sphinx
python3-sphinxcontrib-qthelp
texinfo
qt5-qttools-devel
qt6-qttools-devel
texinfo
# Install lint tools.
clang-analyzer
codespell
# Tools needed for the test suite.
findutils
file
findutils
jq
which
@ -52,8 +51,8 @@ nasm
# Packages needed to test CTest.
breezy
subversion
mercurial
subversion
# Packages needed to test CPack.
rpm-build
@ -61,7 +60,8 @@ rpm-build
# Packages needed to test find modules.
alsa-lib-devel
blas-devel
boost-devel boost-python3-devel
boost-devel
boost-python3-devel
bzip2-devel
cups-devel
DevIL-devel
@ -76,7 +76,8 @@ giflib-devel
glew-devel
gmock
gnutls-devel
grpc-devel grpc-plugins
grpc-devel
grpc-plugins
gsl-devel
gtest-devel
gtk2-devel
@ -91,12 +92,10 @@ lapack-devel
libarchive-devel
libcurl-devel
libicu-devel
libinput-devel systemd-devel
libinput-devel
libjpeg-turbo-devel
libomp-devel
libpng-devel
opensp-devel
postgresql-server-devel
libtiff-devel
libuv-devel
libxml2-devel
@ -104,18 +103,31 @@ libxslt-devel
mpich-devel
openal-soft-devel
openmpi-devel
opensp-devel
patch
perl
protobuf-devel protobuf-c-devel protobuf-lite-devel
pypy2 pypy2-devel
pypy3 pypy3-devel
python3 python3-devel python3-numpy
python3-jsmin python3-jsonschema
rbenv ruby-build-rbenv
ruby rubygems ruby-devel
postgresql-server-devel
protobuf-c-devel
protobuf-devel
protobuf-lite-devel
pypy2
pypy2-devel
pypy3
pypy3-devel
python3
python3-devel
python3-jsmin
python3-jsonschema
python3-numpy
rbenv
ruby
ruby-build-rbenv
ruby-devel
rubygems
SDL-devel
sqlite-devel
swig
systemd-devel
unixODBC-devel
wxGTK-devel
xalan-c-devel

View File

@ -0,0 +1,32 @@
[main]
autocheck_running_kernel=0
debuglevel=2
diskspacecheck=0
fastestmirror=1
gpgcheck=1
installonly_limit=5
install_weak_deps=0
keepcache=1
log_rotate=0
max_parallel_downloads=10
metadata_expire=90m
multilib_policy=best
plugins=1
tsflags=nodocs
# Enable color for all output
color=always
# Default color options according to yum.conf(5)
color_list_installed_older=bold,black
color_list_installed_newer=bold,yellow
color_list_installed_reinstall=normal
color_list_installed_extra=bold,red
color_list_available_upgrade=bold,blue
color_list_available_downgrade=dim,yellow
color_list_available_install=normal
color_list_available_reinstall =bold,underline,green
color_search_match=bold,magenta
color_update_installed=green
color_update_local=cyan
color_update_remote=yellow

View File

@ -2,25 +2,9 @@
set -e
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
-y \
$(grep '^[^#]\+$' /root/deps_packages.lst)
dnf install -y $(grep '^[^#]\+$' /root/deps_packages.lst)
# Remove tests for numpy
# Remove tests for Python packages
for v in 3.13; do
find /usr/lib64/python${v}/site-packages/numpy -type d -a -name tests -exec rm -rf {} +
find /usr/lib64/python${v}/site-packages -type d -a -name tests -exec rm -rf {} +
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
# Perforce
curl -L https://www.perforce.com/downloads/perforce/r21.2/bin.linux26x86_64/helix-core-server.tgz -o - \
| tar -C /usr/local/bin -xvzf - -- p4 p4d

View File

@ -1,30 +0,0 @@
#!/bin/sh
set -e
# Install development tools.
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
-y \
$(grep '^[^#]\+$' /root/iwyu_packages.lst)
cd /root
git clone "https://github.com/include-what-you-use/include-what-you-use.git"
cd include-what-you-use
readonly llvm_full_version="$( clang --version | head -n1 | cut -d' ' -f3 )"
readonly llvm_version="$( echo "$llvm_full_version" | cut -d. -f-1 )"
git checkout "clang_$llvm_version"
mkdir build
cd build
cmake -GNinja \
-DCMAKE_BUILD_TYPE=Release \
"-DIWYU_RESOURCE_RELATIVE_TO=clang" \
"-DIWYU_RESOURCE_DIR=../lib/clang/$llvm_version" \
"-DCMAKE_INSTALL_PREFIX=/usr/local/lib/llvm-$llvm_version" \
..
ninja
DESTDIR=/root/iwyu-destdir ninja install
tar -C /root/iwyu-destdir -cf /root/iwyu.tar .

View File

@ -1,15 +0,0 @@
#!/bin/sh
set -e
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
-y \
$(grep '^[^#]\+$' /root/rust_packages.lst)
typos_version=1.29.4
cargo install --root /usr/local --version "$typos_version" typos-cli
tar -C /usr/local -cf /root/rust.tar bin/typos

View File

@ -1,25 +0,0 @@
#!/bin/sh
set -e
dnf install \
--setopt=install_weak_deps=False \
--setopt=fastestmirror=True \
--setopt=max_parallel_downloads=10 \
-y \
$(grep '^[^#]\+$' /root/rvm_packages.lst)
gpg2 --keyserver hkps://keyserver.ubuntu.com \
--recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 \
7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
# keep version in sync with `env_fedora*_makefiles.cmake`
/usr/local/rvm/bin/rvm install ruby-3.0.4
for p in archives examples gem-cache log src; do
touch /usr/local/rvm/${p}/.tar_exclude
done
tar -C /usr/local --exclude-tag-under=.tar_exclude -cf /root/rvm.tar rvm

View File

@ -1,7 +1,7 @@
clang-devel
llvm-devel
zlib-devel
g++
cmake
ninja-build
gcc-c++
git
llvm-devel
ninja-build
zlib-devel

View File

@ -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

View File

@ -65,14 +65,14 @@
### Fedora
.fedora41:
image: "kitware/cmake:ci-fedora41-x86_64-2025-01-23"
image: "kitware/cmake:ci-fedora41-x86_64-2025-02-03"
variables:
GIT_CLONE_PATH: "$CI_BUILDS_DIR/cmake ci/long file name for testing purposes"
CMAKE_ARCH: x86_64
.fedora41_hip:
image: "kitware/cmake:ci-fedora41-hip-x86_64-2024-12-02"
image: "kitware/cmake:ci-fedora41-hip-x86_64-2025-02-03"
variables:
# FIXME(rocclr): device modules fail loading from binaries in paths with spaces

View File

@ -688,7 +688,7 @@ function (_MPI_interrogate_compiler LANG)
MPI_ALL_INCLUDE_PATHS "${MPI_COMPILE_CMDLINE}")
# If extracting failed to work, we'll try using -showme:incdirs.
# Unlike before, we do this without the environment variables set up, but since only MPICH derivates are affected by any of them, and
# Unlike before, we do this without the environment variables set up, but since only MPICH derivatives are affected by any of them, and
# -showme:... is only supported by Open MPI and LAM/MPI, this isn't a concern.
if (NOT MPI_ALL_INCLUDE_PATHS)
_MPI_check_compiler(${LANG} "-showme:incdirs" MPI_INCDIRS_CMDLINE MPI_INCDIRS_COMPILER_RETURN)

View File

@ -11,12 +11,6 @@
class cmExecutionStatus;
/** \class cmCTestReadCustomFiles
* \brief Run a ctest script
*
* cmLibrarysCommand defines a list of executable (i.e., test)
* programs to create.
*/
class cmCTestReadCustomFilesCommand : public cmCTestCommand
{
public:

View File

@ -13,9 +13,6 @@ class cmExecutionStatus;
/** \class cmCTestRunScript
* \brief Run a ctest script
*
* cmLibrarysCommand defines a list of executable (i.e., test)
* programs to create.
*/
class cmCTestRunScriptCommand : public cmCTestCommand
{