[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