aboutsummaryrefslogtreecommitdiff
path: root/ci
diff options
context:
space:
mode:
authorSam James <sam@gentoo.org>2023-10-03 04:53:09 +0100
committerEli Schwartz <eschwartz93@gmail.com>2024-02-09 13:54:01 -0500
commitfe8123b48413459c361c30bb36a87dbf66636011 (patch)
tree4a3c8a05c4a7b1bf090b40d825b50fd50a7c75e1 /ci
parent87ba2484042597940ddf85d9f4819bf120ac90e6 (diff)
downloadmeson-fe8123b48413459c361c30bb36a87dbf66636011.zip
meson-fe8123b48413459c361c30bb36a87dbf66636011.tar.gz
meson-fe8123b48413459c361c30bb36a87dbf66636011.tar.bz2
ci: add Gentoo
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> Signed-off-by: Eli Schwartz <eschwartz93@gmail.com>
Diffstat (limited to 'ci')
-rwxr-xr-xci/ciimage/build.py4
-rw-r--r--ci/ciimage/gentoo/image.json8
-rwxr-xr-xci/ciimage/gentoo/install.sh151
3 files changed, 163 insertions, 0 deletions
diff --git a/ci/ciimage/build.py b/ci/ciimage/build.py
index b9d3181..10fd099 100755
--- a/ci/ciimage/build.py
+++ b/ci/ciimage/build.py
@@ -78,6 +78,10 @@ class Builder(BuilderBase):
if [ -f "$HOME/.cargo/env" ]; then
source "$HOME/.cargo/env"
fi
+
+ if [ -f /etc/profile.env ]; then
+ source /etc/profile.env
+ fi
'''
out_file.write_text(out_data, encoding='utf-8')
diff --git a/ci/ciimage/gentoo/image.json b/ci/ciimage/gentoo/image.json
new file mode 100644
index 0000000..e59eee5
--- /dev/null
+++ b/ci/ciimage/gentoo/image.json
@@ -0,0 +1,8 @@
+{
+ "base_image": "gentoo/stage3:desktop",
+ "env": {
+ "CI": "1",
+ "MESON_CI_JOBNAME": "linux-gentoo-gcc",
+ "SKIP_STATIC_BOOST": "1"
+ }
+}
diff --git a/ci/ciimage/gentoo/install.sh b/ci/ciimage/gentoo/install.sh
new file mode 100755
index 0000000..dc6383c
--- /dev/null
+++ b/ci/ciimage/gentoo/install.sh
@@ -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[@]}"