[Piglit] [PATCH v4] travis: add docker based cmake build job
Andres Gomez
agomez at igalia.com
Tue Feb 6 13:11:20 UTC 2018
Thanks, Dylan, Eric and Juan!
I've just pushed this changed. ☺
PS: In my Travis-CI, the job is taking ~13 min. right now.
On Mon, 2018-02-05 at 09:29 -0800, Dylan Baker wrote:
> I haven't looked too closely at this, but I like the idea of using docker to
> allow running the cmake based job.
>
> Acked-by: Dylan Baker <dylan at pnwbakers.com>
>
> Quoting Andres Gomez (2018-01-31 13:11:52)
> > 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.
> > v4:
> > - Use DOCKER_PARENT, DOCKER_IMAGE and DOCKER_TAG variables from the
> > custom Travis-CI setup to define the PARENT, IMAGE and TAG
> > parameters during the docker image creation.
> > - Upload the image only if DOCKER_IMAGE and DOCKER_TAG are set.
> >
> > 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..b4cbcca49 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 ${DOCKER_TAG:+--var TAG=}${DOCKER_TAG} ${DOCKER_IMAGE:+--var IMAGE=}${DOCKER_IMAGE} ${DOCKER_PARENT:+--var PARENT=}${DOCKER_PARENT} .
> > + fi
> > +
> > +after_success:
> > + - |
> > + if [[ $BUILD != pytest ]]; then
> > + if [[ -n $DOCKER_IMAGE && -n $DOCKER_TAG && -n $DOCKER_USERNAME && $TRAVIS_BRANCH == master ]]; then
> > + docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}"
> > + docker push "${DOCKER_IMAGE}":"${DOCKER_TAG}"
> > + fi
> > + fi
> > diff --git a/docker/Rockerfile.piglit b/docker/Rockerfile.piglit
> > new file mode 100644
> > index 000000000..0d8f8bb45
> > --- /dev/null
> > +++ b/docker/Rockerfile.piglit
> > @@ -0,0 +1,74 @@
> > +#
> > +# This builds Piglit.
> > +#
> > +# ~~~
> > +# rocker build -f Rockerfile.piglit [--attach] \
> > +# [--var IMAGE=freedesktop/mesa] # freedesktop/mesa, myrepo/myproyect, ... \
> > +# [--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:
> > +# - 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 .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
> >
--
Br,
Andres
More information about the Piglit
mailing list