gitlab-ci: pre-build containers to improve CI run time and reliability

Shaves about 50% off the build time on both debian and arch builds.
(yeah, I know, it's very small anyway compared to mesa, but we might
 want to add more things in the future)

This also makes the build no longer dependent on external websites:
once the image is build, only fdo-internal services are used.

Signed-off-by: Eric Engestrom <eric.engestrom@intel.com>
Reviewed-by: Michel Dänzer <mdaenzer@redhat.com>
main
Eric Engestrom 2019-09-25 22:54:59 +01:00
parent fc933651b1
commit c69c9c4f4e
3 changed files with 162 additions and 73 deletions

View File

@ -1,9 +1,75 @@
.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-10-20"
DEBIAN_VERSION: buster-slim
DEBIAN_IMAGE: "$CI_REGISTRY_IMAGE/debian/$DEBIAN_VERSION:$DEBIAN_TAG"
ARCH_TAG: "2019-10-20"
ARCH_VERSION: rolling
ARCH_IMAGE: "$CI_REGISTRY_IMAGE/archlinux/$ARCH_VERSION:$ARCH_TAG"
.meson-build: &meson-build
include:
- project: 'wayland/ci-templates'
ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c
file: '/templates/debian.yml'
- project: 'wayland/ci-templates'
ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c
file: '/templates/arch.yml'
stages:
- containers
- build
# When & how to run the CI
.ci-run-policy:
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'
arch:
stage: containers
extends:
- .ci-run-policy
- .arch@container-ifnot-exists
variables:
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
ARCH_EXEC: 'bash .gitlab-ci/arch-install.sh'
# BUILD
.meson-build:
stage: build
extends: .ci-run-policy
variables:
GIT_DEPTH: 10
script:
- meson _build
-D amdgpu=true
-D cairo-tests=true
@ -24,54 +90,20 @@
-D vmwgfx=true
- ninja -C _build
- ninja -C _build test
- DESTDIR=$PWD/install ninja -C _build install
artifacts:
when: on_failure
paths:
- _build/meson-logs/*
latest-meson:
stage: build
image: archlinux/base:latest
before_script:
- pacman -Syu --noconfirm --needed
base-devel
meson
libpciaccess
libxslt docbook-xsl
valgrind
libatomic_ops
cairo cunit
script: *meson-build
meson-debian:
extends: .meson-build
image: $DEBIAN_IMAGE
needs:
- debian
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
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
meson-arch:
extends: .meson-build
image: $ARCH_IMAGE
needs:
- arch

View File

@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -o errexit
set -o xtrace
pacman -Syu --noconfirm --needed \
base-devel \
cairo \
cunit \
docbook-xsl \
libatomic_ops \
libpciaccess \
libxslt \
meson \
valgrind

View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
set -o errexit
set -o xtrace
export DEBIAN_FRONTEND=noninteractive
apt-get install -y \
ca-certificates
sed -i -e 's/http:\/\/deb/https:\/\/deb/g' /etc/apt/sources.list
echo 'deb https://deb.debian.org/debian buster-backports main' >/etc/apt/sources.list.d/backports.list
apt-get update
# Use newer packages from backports by default
cat >/etc/apt/preferences <<EOF
Package: *
Pin: release a=buster-backports
Pin-Priority: 500
EOF
apt-get dist-upgrade -y
apt-get install -y --no-remove \
build-essential \
docbook-xsl \
libatomic-ops-dev \
libcairo2-dev \
libcunit1-dev \
libpciaccess-dev \
libxslt1-dev \
ninja-build \
pkg-config \
python3 \
python3-pip \
python3-wheel \
python3-setuptools \
valgrind \
xsltproc
# Test that the oldest Meson version we claim to support is still supported
pip3 install meson==0.43