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

Dylan Baker dylan at pnwbakers.com
Mon Feb 5 17:29:56 UTC 2018


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
> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/piglit/attachments/20180205/0eb4ec6e/attachment.sig>


More information about the Piglit mailing list