[Piglit] [PATCH v3] travis: add docker based cmake build job

Andres Gomez agomez at igalia.com
Mon Jan 29 02:11:17 UTC 2018


Until now we were only running the python unit tests.

It seems desirable to also check that the CMake based build compiles
successfully. We do that now using docker.

The docker build can be tweaked with some environment variables and,
also, be stored in the docker hub if desired. Check the changes for
extra details regarding these variables.

v2: Removed other build possibilities other than just from inside
    Travis-CI, as suggested by Juan.
v3: Replaced the "RELEASE" parameter to create the docker image with
    "PARENT" and removed some unneeded documentation after v2, as
    suggested by Juan.

Cc: Dylan Baker <dylan at pnwbakers.com>
Cc: Juan A. Suarez <jasuarez at igalia.com>
Signed-off-by: Andres Gomez <agomez at igalia.com>
Reviewed-by: Juan A. Suarez <jasuarez at igalia.com>
---
 .travis.yml              | 47 ++++++++++++++++++++++++++++--
 docker/Rockerfile.piglit | 74 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 118 insertions(+), 3 deletions(-)
 create mode 100644 docker/Rockerfile.piglit

diff --git a/.travis.yml b/.travis.yml
index b47829ff9..32a6b53e5 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,5 +1,16 @@
+sudo: false
+os: linux
 language: python
-cache: pip
+cache:
+  - ccache
+  - pip
+services:
+  - docker
+
+env:
+  global:
+    - BUILD=pytest
+
 matrix:
   include:
     - python: 2.7
@@ -12,7 +23,37 @@ matrix:
       env: TOX_ENV="py35-{generator,noaccel,accel-nix,streams}"
     - python: 3.6
       env: TOX_ENV="py36-{generator,noaccel,accel-nix,streams}"
+    - env: BUILD=cmake
+
 install:
-    pip install tox
+  - |
+    if [[ $BUILD == pytest ]]; then
+      pip install tox
+    else
+      wget https://github.com/grammarly/rocker/releases/download/1.3.1/rocker-1.3.1-linux_amd64.tar.gz
+      tar xvf rocker-1.3.1-linux_amd64.tar.gz
+      rm rocker-1.3.1-linux_amd64.tar.gz
+    fi
+
+before_script:
+  - |
+    if [[ $BUILD != pytest ]]; then
+      mkdir -p -m777 ~/.ccache
+    fi
+
 script:
-    - tox -e $TOX_ENV
+  - |
+    if [[ $BUILD == pytest ]]; then
+      tox -e $TOX_ENV
+    else
+      ./rocker build -f docker/Rockerfile.piglit .
+    fi
+
+after_success:
+  - |
+    if [[ $BUILD != pytest ]]; then
+      if [[ -n $DOCKER_USERNAME && $TRAVIS_BRANCH == master ]]; then
+        docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"
+        docker push ${DOCKER_IMAGE:-freedesktop/mesa}:piglit
+      fi
+    fi
diff --git a/docker/Rockerfile.piglit b/docker/Rockerfile.piglit
new file mode 100644
index 000000000..d325205b0
--- /dev/null
+++ b/docker/Rockerfile.piglit
@@ -0,0 +1,74 @@
+#
+# This builds Piglit.
+#
+# ~~~
+#  rocker build -f Rockerfile.piglit [--attach]                 \
+#    [--var TAG=piglit]           # piglit-17.0, piglit-13.0, ... \
+#    [--var PARENT=ubuntu:xenial] # ubuntu:xenial, freedesktop/mesa:17.3, ...
+# ~~~
+#
+# Environment variables that are used in the build:
+#  - DOCKER_IMAGE: name of the final image to be tagged (default: freedesktop/mesa)
+#  - MAKEFLAGS: flags to pass to make (e.g., "-j8")
+#  - CCACHE_DIR: ccache directory (default: ~/.ccache)
+#
+# To run
+#
+# ~~~
+#   mkdir -p -m777 ~/my_results_dir
+#   docker run --privileged --rm -t -v ~/my_results_dir:/results:Z  \
+#              -v /tmp/.X11-unix:/tmp/.X11-unix freedesktop/mesa:piglit
+# ~~~
+#
+
+{{ $image := (or .Env.DOCKER_IMAGE "freedesktop/mesa") }}
+{{ $parent_image := (or .PARENT "ubuntu:xenial") }}
+{{ $ccachedir := (or .Env.CCACHE_DIR "~/.ccache") }}
+
+FROM {{ $parent_image }}
+
+LABEL maintainer "Andres Gomez <agomez at igalia.com>"
+
+USER root
+
+ENV LC_ALL=C.UTF-8
+
+RUN apt-get update                                                      \
+  && apt-get -y --no-install-recommends install sudo gcc g++ ccache     \
+    git pkg-config bash-completion cmake                                \
+    libz-dev libpng-dev libgl-dev libegl1-mesa-dev libwaffle-dev        \
+    python3-setuptools python3-pip                                      \
+  && rm -fr /var/lib/apt/lists/*
+
+RUN pip3 install numpy six mako
+
+RUN getent passwd local > /dev/null || adduser --gecos "" local && passwd -d local && adduser local sudo
+
+USER local
+
+{{ if .Env.MAKEFLAGS }}
+ENV MAKEFLAGS={{ .Env.MAKEFLAGS }}
+{{ end }}
+
+WORKDIR /home/local
+
+MOUNT {{ $ccachedir }}:/home/local/.ccache:Z
+
+RUN sudo chown -R local:local /home/local/.ccache
+
+ENV PATH=/usr/lib/ccache:$PATH
+
+ADD . /home/local/piglit
+RUN sudo chown -R local:local /home/local/piglit
+
+WORKDIR /home/local/piglit
+
+ATTACH [ "/bin/bash" ]
+
+RUN cmake . && cmake --build .
+
+VOLUME /results
+
+{{ if .TAG }}
+TAG {{ $image }}:{{ .TAG }}
+{{ end }}
-- 
2.15.1



More information about the Piglit mailing list