-.artifacts-meson: &artifacts-meson
- when: always
- paths:
- - _build/meson-logs
+# This is the tag of the docker image used for the build jobs. If the
+# image doesn't exist yet, the containers stage generates it.
+#
+# In order to generate a new image, one should generally change the tag.
+# While removing the image from the registry would also work, that's not
+# recommended except for ephemeral images during development: Replacing
+# an image after a significant amount of time might pull in newer
+# versions of gcc/clang or other packages, which might break the build
+# with older commits using the same tag.
+#
+# After merging a change resulting in generating a new image to the
+# main repository, it's recommended to remove the image from the source
+# repository's container registry, so that the image from the main
+# repository's registry will be used there as well.
+variables:
+ UPSTREAM_REPO: mesa/drm
+ DEBIAN_TAG: "2019-11-16"
+ DEBIAN_VERSION: buster-slim
+ DEBIAN_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG"
-.meson-build: &meson-build
- - meson _build
- -D amdgpu=true
- -D cairo-tests=true
- -D etnaviv=true
- -D exynos=true
- -D freedreno=true
- -D freedreno-kgsl=true
- -D intel=true
- -D libkms=true
- -D man-pages=true
- -D nouveau=true
- -D omap=true
- -D radeon=true
- -D tegra=true
- -D udev=true
- -D valgrind=true
- -D vc4=true
- -D vmwgfx=true
- - ninja -C _build
- - ninja -C _build test
+include:
+ - project: 'wayland/ci-templates'
+ ref: 0a9bdd33a98f05af6761ab118b5074952242aab0
+ file: '/templates/debian.yml'
-latest-meson:
+stages:
+ - containers
+ - build
+
+
+# When & how to run the CI
+.ci-run-policy:
+ except:
+ - schedules
+ retry:
+ max: 2
+ when:
+ - runner_system_failure
+
+# CONTAINERS
+
+debian:
+ stage: containers
+ extends:
+ - .ci-run-policy
+ - .debian@container-ifnot-exists
+ variables:
+ GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
+ DEBIAN_EXEC: 'bash .gitlab-ci/debian-install.sh'
+
+
+# BUILD
+
+.meson-build:
stage: build
- image: archlinux/base:latest
+ variables:
+ GIT_DEPTH: 10
+ script:
+ - meson _build
+ -D amdgpu=true
+ -D cairo-tests=true
+ -D etnaviv=true
+ -D exynos=true
+ -D freedreno=true
+ -D freedreno-kgsl=true
+ -D intel=true
+ -D libkms=true
+ -D man-pages=true
+ -D nouveau=true
+ -D omap=true
+ -D radeon=true
+ -D tegra=true
+ -D udev=true
+ -D valgrind=auto
+ -D vc4=true
+ -D vmwgfx=true
+ ${CROSS+--cross /cross_file-$CROSS.txt}
+ - ninja -C _build
+ - ninja -C _build test
+ - DESTDIR=$PWD/install ninja -C _build install
+ artifacts:
+ when: on_failure
+ paths:
+ - _build/meson-logs/*
+
+meson-x86_64:
+ extends:
+ - .ci-run-policy
+ - .meson-build
+ image: $DEBIAN_IMAGE
+ needs:
+ - debian
+
+meson-i386:
+ extends: meson-x86_64
+ variables:
+ CROSS: i386
+
+meson-aarch64:
+ extends: meson-x86_64
+ variables:
+ CROSS: arm64
+
+meson-armhf:
+ extends: meson-x86_64
+ variables:
+ CROSS: armhf
+
+meson-ppc64el:
+ extends: meson-x86_64
+ variables:
+ CROSS: ppc64el
+
+meson-arch-daily:
+ rules:
+ - if: '$SCHEDULE == "arch-daily"'
+ when: on_success
+ - when: never
+ image: archlinux/base
before_script:
- pacman -Syu --noconfirm --needed
base-devel
- meson
- libpciaccess
- libxslt docbook-xsl
- valgrind
+ cairo
+ cunit
+ docbook-xsl
libatomic_ops
- cairo cunit
- script: *meson-build
-
-oldest-meson:
- stage: build
- image: debian:stable
- artifacts: *artifacts-meson
- before_script:
- - printf > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft "%s\n"
- 'path-exclude=/usr/share/doc/*'
- 'path-exclude=/usr/share/man/*'
- - printf > /usr/sbin/policy-rc.d "%s\n"
- '#!/bin/sh'
- 'exit 101'
- - chmod +x /usr/sbin/policy-rc.d
- - apt-get update
- - apt-get -y --no-install-recommends install
- build-essential
- pkg-config
- xsltproc
- libxslt1-dev docbook-xsl
+ libpciaccess
+ libxslt
+ meson
valgrind
- libatomic-ops-dev
- libcairo2-dev libcunit1-dev
- ninja-build
- python3 python3-pip
- wget
- # We need `--no-check-certificate` here because Debian's CA list is
- # too old to know about LetsEncrypt's CA, so it refuses to connect
- # to FreeDesktop.org
- - LIBPCIACCESS_VERSION=libpciaccess-0.10 &&
- wget --no-check-certificate https://xorg.freedesktop.org/releases/individual/lib/$LIBPCIACCESS_VERSION.tar.bz2 &&
- tar -jxvf $LIBPCIACCESS_VERSION.tar.bz2 &&
- (cd $LIBPCIACCESS_VERSION && ./configure --prefix=$HOME/prefix && make install)
- - pip3 install wheel setuptools
- - pip3 install meson==0.43
- - export PKG_CONFIG_PATH=$HOME/prefix/lib/pkgconfig:$HOME/prefix/share/pkgconfig
- - export LD_LIBRARY_PATH="$HOME/prefix/lib:$LD_LIBRARY_PATH"
- script: *meson-build
+ extends: .meson-build