Skip to content

Commit

Permalink
ci: add Gentoo
Browse files Browse the repository at this point in the history
We may want to consider our own binpkg cache for future to speed things up,
in addition to the ones provided by Gentoo's own binhost.

Signed-off-by: Sam James <sam@gentoo.org>
  • Loading branch information
thesamesam committed Feb 8, 2024
1 parent de01c8a commit 35bc44d
Show file tree
Hide file tree
Showing 7 changed files with 167 additions and 2 deletions.
1 change: 1 addition & 0 deletions .github/workflows/images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
- { name: Arch Linux, id: arch }
- { name: CUDA (on Arch), id: cuda }
- { name: Fedora, id: fedora }
- { name: Gentoo, id: gentoo }
- { name: OpenSUSE, id: opensuse }
- { name: Ubuntu Bionic, id: bionic }
- { name: Ubuntu Rolling, id: ubuntu-rolling }
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/os_comp.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ jobs:
- { name: Arch Linux, id: arch }
- { name: CUDA (on Arch), id: cuda }
- { name: Fedora, id: fedora }
- { name: Gentoo, id: gentoo }
- { name: OpenSUSE, id: opensuse }
- { name: Ubuntu Bionic, id: bionic }
container: mesonbuild/${{ matrix.cfg.id }}:latest
Expand Down
4 changes: 4 additions & 0 deletions ci/ciimage/build.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ def gen_bashrc(self) -> None:
if [ -f "$HOME/.cargo/env" ]; then
source "$HOME/.cargo/env"
fi
if [ -f /etc/profile ]; then
source /etc/profile
fi
'''

out_file.write_text(out_data, encoding='utf-8')
Expand Down
8 changes: 8 additions & 0 deletions ci/ciimage/gentoo/image.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"base_image": "gentoo/stage3:desktop",
"env": {
"CI": "1",
"MESON_CI_JOBNAME": "linux-gentoo-gcc",
"SKIP_STATIC_BOOST": "1"
}
}
151 changes: 151 additions & 0 deletions ci/ciimage/gentoo/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
#!/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-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"
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[@]}"
2 changes: 1 addition & 1 deletion test cases/frameworks/15 llvm/test.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
{ "val": "combination", "skip_on_jobname": ["msys2"] }
],
"link-static": [
{ "val": true, "skip_on_jobname": ["opensuse"] },
{ "val": true, "skip_on_jobname": ["opensuse", "linux-gentoo-gcc"] },
{ "val": false }
]
}
Expand Down
2 changes: 1 addition & 1 deletion test cases/frameworks/25 hdf5/test.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"matrix": {
"options": {
"method": [
{ "val": "pkg-config" },
{ "val": "pkg-config", "skip_on_jobname": ["linux-gentoo-gcc"] },
{ "val": "config-tool", "skip_on_jobname": ["macos"] }
]
}
Expand Down

0 comments on commit 35bc44d

Please sign in to comment.