diff options
author | Eric Engestrom <eric.engestrom@intel.com> | 2019-09-25 22:54:59 +0100 |
---|---|---|
committer | Eric Engestrom <eric.engestrom@intel.com> | 2019-10-20 20:08:57 +0100 |
commit | c69c9c4f4eaaea302e41e3ffd5f7b6d4bcc6a37a (patch) | |
tree | 7a4f6ebc78fa4239e60f25357c1591697aafc4e7 /.gitlab-ci.yml | |
parent | fc933651b13e2f0d9d4e2083206c3faadc11c50a (diff) | |
download | libdrm-c69c9c4f4eaaea302e41e3ffd5f7b6d4bcc6a37a.tar.gz libdrm-c69c9c4f4eaaea302e41e3ffd5f7b6d4bcc6a37a.tar.bz2 libdrm-c69c9c4f4eaaea302e41e3ffd5f7b6d4bcc6a37a.zip |
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>
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 178 |
1 files changed, 105 insertions, 73 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 47fe3cd2..05aa7438 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,77 +1,109 @@ -.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 - - 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: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c + file: '/templates/debian.yml' + - project: 'wayland/ci-templates' + ref: 1f7f57c64ff4ebbf7292e3b7a13600518b8cb24c + file: '/templates/arch.yml' -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 +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' -oldest-meson: +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 - 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 + extends: .ci-run-policy + 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=true + -D vc4=true + -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/* + +meson-debian: + extends: .meson-build + image: $DEBIAN_IMAGE + needs: + - debian + +meson-arch: + extends: .meson-build + image: $ARCH_IMAGE + needs: + - arch |