ci: Use ci-templates to create the container image

This puts the project more in line with other projects at
freedesktop.org, and most importantly improves the caching of container
images.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
macos/master
Tomeu Vizoso 5 years ago
parent c4bcda61d7
commit 8446009e7c
  1. 73
      ci/.gitlab-ci.yml
  2. 133
      ci/build-container.sh
  3. 6
      ci/run_ci_locally.sh
  4. 2
      ci/run_test_suite.sh
  5. 52
      ci/run_tests.sh

@ -1,25 +1,12 @@
image: docker:latest
cache:
paths:
- ccache
variables:
DOCKER_DRIVER: overlay
# When running CI jobs, don't allow
# HW backed renderes, due to the
# variability it introduces.
# RENDER_DEVICE: /dev/dri/renderD128
FDO_DISTRIBUTION_TAG: "2020-03-30"
FDO_DISTRIBUTION_VERSION: buster
TEST_IMAGE: "$CI_REGISTRY_IMAGE/debian/$FDO_DISTRIBUTION_VERSION:$FDO_DISTRIBUTION_TAG"
.docker-setup: &docker-setup
- mkdir -p ccache
- mkdir -p results
- export DOCKER_IMAGE_DIGEST=$(cat results/docker_image_digest.txt)
- echo $DOCKER_IMAGE_DIGEST
- echo core > /proc/sys/kernel/core_pattern || true
- echo 0 > /proc/sys/kernel/core_uses_pid || true
- if [[ -n "$RENDER_DEVICE" ]]; then RD_CONFIG="--device=$RENDER_DEVICE -e RENDER_DEVICE=$RENDER_DEVICE"; fi
- echo RD_CONFIG=$RD_CONFIG
include:
- project: 'freedesktop/ci-templates'
ref: 4a73f030d0602042cfa44ed94dc5e744b52f57aa
file: '/templates/debian.yml'
stages:
- build
@ -28,51 +15,23 @@ stages:
build docker image:
stage: build
services:
- docker:dind
before_script:
- mkdir -p results
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- time docker pull $CI_REGISTRY_IMAGE:latest || true
- docker build
--build-arg KNOWN_GOOD_MESA=$MESA_COMMIT
--build-arg MESA_REPO=$MESA_REPO
-t $CI_REGISTRY_IMAGE
--cache-from $CI_REGISTRY_IMAGE:latest ci
- docker history $CI_REGISTRY_IMAGE:latest
- time docker push $CI_REGISTRY_IMAGE:latest 2>&1 | tee results/docker_push_log.txt
- "grep -o 'digest: sha256:[0-9a-f]\\+' results/docker_push_log.txt |
cut -f 2 -d ' ' |
tee results/docker_image_digest.txt"
extends: .fdo.container-ifnot-exists@debian
stage: build
variables:
GIT_STRATEGY: none # no need to pull the whole tree for rebuilding the image
FDO_DISTRIBUTION_EXEC: 'bash ci/build-container.sh'
only:
- branches
- tags
- merge_requests
- schedules
artifacts:
when: always
paths:
- results/
.tests_base:
services:
- docker:dind
before_script:
*docker-setup
image: $TEST_IMAGE
variables:
NUM_THREADS: 4
script:
- docker run
--ulimit core=99999999999:99999999999
$RD_CONFIG
-v $PWD:/virglrenderer
$CI_REGISTRY_IMAGE@$DOCKER_IMAGE_DIGEST
bash -c "/virglrenderer/ci/run_tests.sh $TEST_SUITE"
- ci/run_tests.sh $TEST_SUITE
- echo -e "\nThat's all folks\n"
only:
- branches

@ -1,29 +1,31 @@
FROM debian:buster-slim
#!/bin/bash
ENV DEBIAN_FRONTEND=noninteractive
ENV GOPATH=/usr/local/go
ENV PATH=$PATH:/usr/local/go/bin
ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/local/lib/x86_64-linux-gnu
ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig
ENV LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib/ -L/usr/local/lib/x86_64-linux-gnu"
ENV CC="gcc-8"
ENV CXX="g++-8"
ENV CFLAGS="-g3"
ENV CXXFLAGS="-g3"
ENV GIT_DATE="`date +%Y-%m-%d -d \"15 months ago\"`"
ENV MESA_DEBUG=1
set -e
set -o xtrace
export DEBIAN_FRONTEND=noninteractive
export GOPATH=/usr/local/go
export PATH=$PATH:/usr/local/go/bin
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/local/lib/x86_64-linux-gnu
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/local/lib64/pkgconfig:/usr/local/share/pkgconfig:/usr/local/lib/x86_64-linux-gnu/pkgconfig
export LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib/ -L/usr/local/lib/x86_64-linux-gnu"
export CC="gcc-8"
export CXX="g++-8"
export CFLAGS="-g3"
export CXXFLAGS="-g3"
export GIT_DATE="`date +%Y-%m-%d -d \"15 months ago\"`"
export MESA_DEBUG=1
RUN echo 'path-exclude=/usr/share/doc/*' > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft
RUN echo 'path-exclude=/usr/share/man/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft
RUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d
RUN echo 'exit 101' >> /usr/sbin/policy-rc.d
RUN chmod +x /usr/sbin/policy-rc.d
echo 'path-exclude=/usr/share/doc/*' > /etc/dpkg/dpkg.cfg.d/99-exclude-cruft
echo 'path-exclude=/usr/share/man/*' >> /etc/dpkg/dpkg.cfg.d/99-exclude-cruft
echo '#!/bin/sh' > /usr/sbin/policy-rc.d
echo 'exit 101' >> /usr/sbin/policy-rc.d
chmod +x /usr/sbin/policy-rc.d
RUN echo deb-src http://deb.debian.org/debian buster main >> /etc/apt/sources.list
RUN echo deb http://deb.debian.org/debian buster-backports main >> /etc/apt/sources.list
RUN apt-get update && \
apt-get -y install ca-certificates && \
echo deb-src http://deb.debian.org/debian buster main >> /etc/apt/sources.list
echo deb http://deb.debian.org/debian buster-backports main >> /etc/apt/sources.list
apt-get update
apt-get -y install ca-certificates
apt-get -y install --no-install-recommends \
autoconf \
busybox \
@ -52,6 +54,7 @@ RUN apt-get update && \
lld-8 \
llvm-8-dev \
mesa-utils \
meson \
nasm \
ninja-build \
procps \
@ -75,32 +78,28 @@ RUN apt-get update && \
xserver-xorg-core \
xterm \
xvfb \
zlib1g-dev && \
zlib1g-dev
apt-get -y build-dep --no-install-recommends \
libepoxy-dev \
libdrm \
mesa \
piglit \
virglrenderer && \
apt-get -y remove valgrind && \
virglrenderer
apt-get -y remove valgrind
rm -rf /var/lib/apt/lists/*
RUN pip3 install meson
ARG KNOWN_GOOD_FAKEMACHINE=c4752ddf3343
RUN go get -v github.com/tomeuv/fakemachine/cmd/fakemachine
RUN go install -x github.com/tomeuv/fakemachine/cmd/fakemachine
ENV BATTERY_VERSION=0.1.23
WORKDIR /battery
RUN wget "https://github.com/VoltLang/Battery/releases/download/v${BATTERY_VERSION}/battery-${BATTERY_VERSION}-x86_64-linux.tar.gz" && \
export BATTERY_VERSION=0.1.23
mkdir /battery
pushd /battery
wget "https://github.com/VoltLang/Battery/releases/download/v${BATTERY_VERSION}/battery-${BATTERY_VERSION}-x86_64-linux.tar.gz" && \
tar xzvf battery-${BATTERY_VERSION}-x86_64-linux.tar.gz && \
rm battery-${BATTERY_VERSION}-x86_64-linux.tar.gz && \
mv battery /usr/local/bin
WORKDIR /
popd
WORKDIR /volt
RUN git clone --depth=1 https://github.com/VoltLang/Watt.git && \
mkdir /volt
pushd /volt
git clone --depth=1 https://github.com/VoltLang/Watt.git && \
git clone --depth=1 https://github.com/VoltLang/Volta.git && \
git clone --depth=1 https://github.com/Wallbraker/dEQP.git && \
battery config --release --lto Volta Watt && \
@ -109,16 +108,16 @@ RUN git clone --depth=1 https://github.com/VoltLang/Watt.git && \
battery build && \
cp dEQP/deqp /usr/local/bin && \
rm -rf /volt
WORKDIR /
popd
# To avoid this error:
# error: RPC failed; curl 56 GnuTLS recv error (-54): Error in the pull function.
RUN git config --global http.postBuffer 1048576000
git config --global http.postBuffer 1048576000
ARG KNOWN_GOOD_CTS
ENV KNOWN_GOOD_CTS ${KNOWN_GOOD_CTS:-6c709dc9a99b70572aceb0f7698ab044383ff948}
WORKDIR /VK-GL-CTS
RUN git clone --shallow-since="$GIT_DATE" https://github.com/KhronosGroup/VK-GL-CTS.git . && \
export KNOWN_GOOD_CTS=${KNOWN_GOOD_CTS:-6c709dc9a99b70572aceb0f7698ab044383ff948}
mkdir /VK-GL-CTS
pushd /VK-GL-CTS
git clone --shallow-since="$GIT_DATE" https://github.com/KhronosGroup/VK-GL-CTS.git . && \
git checkout ${KNOWN_GOOD_CTS} && \
git log --oneline -n 1 && \
python3 external/fetch_sources.py && \
@ -128,12 +127,12 @@ RUN git clone --shallow-since="$GIT_DATE" https://github.com/KhronosGroup/VK-GL-
make -j$(nproc) && \
find . -name CMakeFiles | xargs rm -rf && \
find . -name lib\*.a | xargs rm -rf
WORKDIR /
popd
ARG KNOWN_GOOD_PIGLIT
ENV KNOWN_GOOD_PIGLIT ${KNOWN_GOOD_PIGLIT:-645e15dc84fb48c1f270e322af61d7c716f1c45c}
WORKDIR /piglit
RUN git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/piglit.git . && \
export KNOWN_GOOD_PIGLIT=${KNOWN_GOOD_PIGLIT:-645e15dc84fb48c1f270e322af61d7c716f1c45c}
mkdir /piglit
pushd /piglit
git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/piglit.git . && \
git checkout ${KNOWN_GOOD_PIGLIT} && \
git log --oneline -n 1 && \
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_BUILD_TYPE=Release . && \
@ -141,12 +140,12 @@ RUN git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/pi
rm -rf /usr/local/lib/piglit/generated_tests/spec/arb_vertex_attrib_64bit && \
rm -rf /usr/local/lib/piglit/generated_tests/spec/glsl-4.20 && \
rm -rf /piglit
WORKDIR /
popd
ARG KNOWN_GOOD_EPOXY
ENV KNOWN_GOOD_EPOXY ${KNOWN_GOOD_EPOXY:-5d818164dd2ab87b0054641f1446bc552a602320}
WORKDIR /epoxy
RUN git clone --shallow-since="$GIT_DATE" https://github.com/anholt/libepoxy.git . && \
export KNOWN_GOOD_EPOXY=${KNOWN_GOOD_EPOXY:-5d818164dd2ab87b0054641f1446bc552a602320}
mkdir /epoxy
pushd /epoxy
git clone --shallow-since="$GIT_DATE" https://github.com/anholt/libepoxy.git . && \
git checkout ${KNOWN_GOOD_EPOXY} && \
git log --oneline -n 1 && \
mkdir -p build && \
@ -154,11 +153,12 @@ RUN git clone --shallow-since="$GIT_DATE" https://github.com/anholt/libepoxy.git
meson configure build/ -Dprefix=/usr/local -Dlibdir=lib && \
ninja -C build/ install >/dev/null && \
rm -rf /epoxy
WORKDIR /
popd
ARG KNOWN_GOOD_DRM=libdrm-2.4.100
WORKDIR /drm
RUN git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/drm.git . && \
export KNOWN_GOOD_DRM=libdrm-2.4.100
mkdir /drm
pushd /drm
git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/drm.git . && \
git checkout ${KNOWN_GOOD_DRM} && \
git log --oneline -n 1 && \
mkdir -p build && \
@ -166,16 +166,15 @@ RUN git clone --shallow-since="$GIT_DATE" https://gitlab.freedesktop.org/mesa/dr
meson configure build/ -Dprefix=/usr/local -Dlibdir=lib && \
ninja -C build/ install >/dev/null && \
rm -rf /drm
WORKDIR /
popd
ARG KNOWN_GOOD_MESA
ENV KNOWN_GOOD_MESA ${KNOWN_GOOD_MESA:-e924181ea89e5e261f8aa24564c32ed22941e752}
RUN echo $KNOWN_GOOD_MESA
ARG MESA_REPO
ENV MESA_REPO ${MESA_REPO:-https://gitlab.freedesktop.org/mesa/mesa.git}
RUN echo $MESA_REPO
WORKDIR /mesa
RUN git clone --shallow-since="$GIT_DATE" ${MESA_REPO} . && \
export KNOWN_GOOD_MESA=${KNOWN_GOOD_MESA:-e924181ea89e5e261f8aa24564c32ed22941e752}
echo $KNOWN_GOOD_MESA
export MESA_REPO=https://gitlab.freedesktop.org/mesa/mesa.git
echo $MESA_REPO
mkdir /mesa
pushd /mesa
git clone --shallow-since="$GIT_DATE" ${MESA_REPO} . && \
git checkout ${KNOWN_GOOD_MESA} && \
git log --oneline -n 1 && \
mkdir -p build && \
@ -183,5 +182,5 @@ RUN git clone --shallow-since="$GIT_DATE" ${MESA_REPO} . && \
meson configure build/ -Dprefix=/usr/local -Dplatforms=drm,x11,wayland,surfaceless -Ddri-drivers=i965 -Dgallium-drivers=swrast,virgl,radeonsi -Dbuildtype=debugoptimized -Dllvm=true -Dglx=dri -Dgallium-vdpau=false -Dgallium-va=false -Dvulkan-drivers=[] -Dlibdir=lib && \
ninja -C build/ install >/dev/null && \
rm -rf /mesa
WORKDIR /
popd

@ -6,7 +6,7 @@
cd ${VIRGL_PATH}
DOCKER_DRIVER=overlay2
DOCKER_IMAGE=virglrenderer/ci
DOCKER_IMAGE=${DOCKER_IMAGE:-registry.freedesktop.org/virgl/virglrenderer/debian/buster:latest}
if [[ -z $NUM_THREADS ]] ; then
# If not forced use slightly less than half of available threads
@ -31,8 +31,6 @@ echo LOCAL_VIRGL=$LOCAL_VIRGL
rm -rf $VIRGL_PATH/results
mkdir -p $VIRGL_PATH/results
time docker build -t $DOCKER_IMAGE -f ci/Dockerfile --cache-from $DOCKER_IMAGE:latest ci
time docker run \
-it \
--ulimit core=99999999999:99999999999 \
@ -40,5 +38,5 @@ time docker run \
$RD_CONFIG \
$LOCAL_MESA \
$LOCAL_VIRGL \
$DOCKER_IMAGE:latest \
$DOCKER_IMAGE \
bash -c "/virglrenderer/ci/run_tests.sh --make-check --deqp-gl-gl-tests --deqp-gl-gles-tests --deqp-gles-gl-tests --deqp-gles-gles-tests --piglit-gl --piglit-gles" 2>&1 | tee results/log.txt

@ -1,5 +1,7 @@
#!/bin/bash
set -x
# Setup paths and import util functions
. $(dirname $(readlink -f "$0"))/util.sh

@ -16,8 +16,10 @@ run_setup()
export NUM_THREADS
echo "Using $NUM_THREADS threads"
export CCACHE_BASEDIR=/virglrenderer
export CCACHE_DIR=/virglrenderer/ccache
export LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib:/usr/local/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export CCACHE_BASEDIR="$(pwd)"
export CCACHE_DIR="$(pwd)/ccache"
export PATH="/usr/lib/ccache:$PATH"
mkdir -p $CCACHE_DIR
ccache -s
@ -32,10 +34,8 @@ run_setup()
export SOFTWARE_ONLY=1
fi
set +x
if [[ $LOCAL_MESA ]]; then
cd $LOCAL_MESA && \
pushd $LOCAL_MESA
mkdir -p build && \
meson build/ && \
meson configure build/ -Dprefix=/usr/local -Dplatforms=drm,x11,wayland,surfaceless -Ddri-drivers=i965 -Dgallium-drivers=swrast,virgl,radeonsi,r600 -Dbuildtype=debugoptimized -Dllvm=true -Dglx=dri -Dgallium-vdpau=false -Dgallium-va=false -Dvulkan-drivers=[] -Dlibdir=lib && \
@ -44,45 +44,35 @@ run_setup()
meson setup --wipe build/
ninja -C build/ install -j $NUM_THREADS || exit 1
fi
popd
fi
VIRGL_PATH="/virglrenderer"
rm -rf $VIRGL_PATH/results/
mkdir -p $VIRGL_PATH/results/
rm -rf ./results/
mkdir -p ./results/
if [ "x$use_meson" = "x" ]; then
if [ -d "$VIRGL_PATH" ]; then
cd $VIRGL_PATH
./autogen.sh --prefix=/usr/local --enable-debug --enable-tests --enable-autotools
make -j$NUM_THREADS install
fi
else
if [ -d "$VIRGL_PATH" ]; then
cd $VIRGL_PATH
mkdir build
if [ "x$use_clang_fuzzer" = "x1" ]; then
CC=clang-8
FUZZER=-Dfuzzer=true
export CC=clang-8
export FUZZER=-Dfuzzer=true
fi
meson build/ -Dprefix=/usr/local -Ddebug=true -Dtests=true --fatal-meson-warnings $FUZZER
ninja -C build -j$NUM_THREADS install
fi
fi
CI_DIR=$(dirname $(readlink -f "$0"))
cd $CI_DIR
}
run_make_check()
{
run_setup
(
cd /virglrenderer
mkdir -p /virglrenderer/results/make_check
mkdir -p ./results/make_check
VRENDTEST_USE_EGL_SURFACELESS=1 make -j$NUM_THREADS check --no-print-directory
RET=$?
cp tests/test*.log /virglrenderer/results/make_check/
cp tests/test*.log ./results/make_check/
return $RET
)
}
@ -91,11 +81,10 @@ run_make_check_meson()
{
run_setup meson
(
cd /virglrenderer/build
mkdir -p /virglrenderer/results/make_check_meson
VRENDTEST_USE_EGL_SURFACELESS=1 ninja -j$NUM_THREADS test
mkdir -p ./results/make_check_meson
VRENDTEST_USE_EGL_SURFACELESS=1 ninja -Cbuild -j$NUM_THREADS test
RET=$?
cp /virglrenderer/build/meson-logs/testlog.txt /virglrenderer/results/make_check_meson/
cp ./build/meson-logs/testlog.txt ./results/make_check_meson/
return $RET
)
}
@ -104,11 +93,12 @@ run_make_check_clang_fuzzer()
{
run_setup meson fuzzer
(
cd /virglrenderer/build
mkdir -p /virglrenderer/results/make_check_clang_fuzzer
mkdir -p ./results/make_check_clang_fuzzer
pushd ./build
VRENDTEST_USE_EGL_SURFACELESS=1 ninja -j$NUM_THREADS test
RET=$?
cp /virglrenderer/build/meson-logs/testlog.txt /virglrenderer/results/make_check_clang_fuzzer/
cp ./meson-logs/testlog.txt ../results/make_check_clang_fuzzer/
popd
return $RET
)
}
@ -148,9 +138,11 @@ run_deqp()
BACKENDS="${BACKENDS} --backend vtest-gpu"
fi
pushd ci
./run_test_suite.sh --deqp ${TEST_SUITE} \
--host-${OGL_BACKEND} \
${BACKENDS}
popd
return $?
}
@ -170,9 +162,11 @@ run_piglit()
BACKENDS="${BACKENDS} --backend vtest-gpu"
fi
pushd ci
./run_test_suite.sh --piglit --gles2 --gles3 \
--host-${OGL_BACKEND} \
${BACKENDS}
popd
return $?
}

Loading…
Cancel
Save