#!/bin/bash set -e source /ci/common.sh # We divide the package list into 'pkgs_stable' and 'pkgs_latest'. The trade-off # is that latest stuff may not have a binpkg available, but of course we get # better test coverage with the bleeding edge then. pkgs_stable=( app-portage/portage-utils dev-build/cmake dev-vcs/git # language support dev-python/cython dev-python/lxml dev-python/pip virtual/fortran dev-lang/nasm dev-lang/vala dev-lang/python:2.7 dev-java/openjdk-bin # requires rustfmt, bin rebuild (TODO: file bug) #dev-util/bindgen dev-libs/elfutils dev-util/gdbus-codegen dev-libs/gobject-introspection dev-util/itstool dev-libs/protobuf # custom deps net-libs/libpcap dev-util/gtk-doc media-libs/libwmf sys-cluster/openmpi sci-libs/netcdf media-libs/libsdl2 dev-cpp/gtest sci-libs/hdf5 dev-qt/linguist-tools sys-devel/llvm # qt6 unstable #dev-qt/qttools # misc app-admin/sudo app-text/doxygen sys-apps/fakeroot sys-devel/bison sys-devel/gettext # TODO: vulkan-validation-layers # TODO: cuda #dev-cpp/gtkmm:3.0 #dev-java/openjdk-bin:8 #dev-lang/go #dev-lang/mono #dev-lang/python #dev-lang/rust-bin #dev-libs/wayland #dev-libs/wayland-protocols #dev-python/pypy3 #dev-qt/qtbase:6 #dev-qt/qtcore:5 #dev-qt/qttools:6 #dev-vcs/mercurial #gnustep-base/gnustep-base #media-gfx/graphviz #sci-libs/netcdf-fortran #sys-devel/clang #x11-libs/gtk+:3 ) pkgs_latest=( # ~arch boost needed for py3.12 for now (needs 1.84) dev-build/b2 dev-libs/boost dev-build/autoconf dev-build/automake # ~arch only sci-libs/scalapack ) pkgs=( "${pkgs_stable[@]}" "${pkgs_latest[@]}" ) emerge-webrsync --quiet # This means we can't really take advantage of the binhost but a lot of the # advantages of using Gentoo in CI come from the bleeding edge side. # With full ~arch, we don't get binpkgs for much at all. Instead, let's just # do ~arch for the test deps we have. #echo 'ACCEPT_KEYWORDS="~amd64"' >> /etc/portage/make.conf printf "%s\n" ${pkgs[@]} >> /var/lib/portage/world printf "%s\n" ${pkgs_latest[@]} >> /etc/portage/package.accept_keywords/meson cat /etc/portage/package.accept_keywords/meson cat <<-EOF > /etc/portage/package.accept_keywords/misc dev-lang/python-exec dev-lang/python EOF mkdir /etc/portage/binrepos.conf || true mkdir /etc/portage/profile || true cat <<-EOF > /etc/portage/package.use/ci dev-cpp/gtkmm X dev-libs/boost python sys-libs/zlib static-libs EOF cat <<-EOF >> /etc/portage/make.conf EMERGE_DEFAULT_OPTS="--complete-graph --quiet=y --quiet-build=y --jobs=$(nproc) --load-average=$(nproc)" EMERGE_DEFAULT_OPTS="\${EMERGE_DEFAULT_OPTS} --autounmask-write --autounmask-continue --autounmask-keep-keywords=y --autounmask-use=y" EMERGE_DEFAULT_OPTS="\${EMERGE_DEFAULT_OPTS} --binpkg-respect-use=y" # prevent painfully verbose Github Actions logs. FETCHCOMMAND='wget --no-show-progress -t 3 -T 60 --passive-ftp -O "\\\${DISTDIR}/\\\${FILE}" "\\\${URI}"' # Fortran is no longer enabled by default in 23.0, but we do need and use it. USE="\${USE} fortran" FEATURES="\${FEATURES} parallel-fetch parallel-install -merge-sync" FEATURES="\${FEATURES} getbinpkg binpkg-request-signature" # These don't work in Docker, so reduce noise in logs FEATURES="\${FEATURES} -ipc-sandbox -network-sandbox -pid-sandbox" EOF # TODO: Enable all Pythons / add multiple jobs with diff. Python impls? #echo '*/* PYTHON_TARGETS: python3_10 python3_11 python3_12' >> /etc/portage/package.use/python echo '*/* PYTHON_TARGETS: python3_12' >> /etc/portage/package.use/python cat <<-EOF >> /etc/portage/profile/use.mask -python_targets_python3_12 -python_single_target_python3_12 EOF cat <<-EOF >> /etc/portage/profile/use.stable.mask -python_targets_python3_12 -python_single_target_python3_12 EOF echo 'dev-lang/python ensurepip' >> /etc/portage/package.use/python # Silly mono circular dep #USE=minimal emerge --oneshot dev-lang/mono # If we don't want to do this, we could use the 'portage' container instead # so the stage3/repo match. emerge --update --deep --changed-use @world qlop -d 'yesterday' env-update && . /etc/profile rm /usr/lib/python/EXTERNALLY-MANAGED python3 -m ensurepip install_python_packages python3 -m pip install "${base_python_pkgs[@]}" echo "source /etc/profile" >> /ci/env_vars.sh