Re: [igt-dev] [PATCH v2 3/3] gitlab-ci: introduce final containers

Arkadiusz Hiler
2019-08-22T08:45:14Z

On Tue, Aug 20, 2019 at 04:19:36PM +0300, Oleg Vasilev wrote:
> Currently, the containers are used only to build IGT. We also want to
> have an option to run IGT inside a container. For this, new build stage
> is added.
>
> Signed-off-by: Oleg Vasilev <oleg.vasilev@intel.com>
> ---
> .gitlab-ci.yml | 25 ++++++++++++++++++++++++-
> Dockerfile.final | 16 ++++++++++++++++
> scripts/docker-help.sh | 34 ++++++++++++++++++++++++++++++++++
> 3 files changed, 74 insertions(+), 1 deletion(-)
> create mode 100644 Dockerfile.final
> create mode 100755 scripts/docker-help.sh
>
> diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
> index c9f8ca35..109ad7d0 100644
> --- a/.gitlab-ci.yml
> +++ b/.gitlab-ci.yml
> @@ -16,6 +16,7 @@ stages:
> - build
> - test
> - deploy
> + - final-containers
>
> ################# CONTAINERS #######################
>
> @@ -85,12 +86,15 @@ containers:igt-fedora:
> build:tests-fedora:
> stage: build
> script:
> - - meson $MESON_OPTIONS build
> + - meson --prefix=`pwd`/opt-igt $MESON_OPTIONS build
> - ninja -C build
> + - ninja -C build install
> - ninja -C build igt-gpu-tools-doc
> + - ls opt-igt
> artifacts:
> paths:
> - build
> + - opt-igt
>
> build:tests-fedora-no-libunwind:
> stage: build
> @@ -273,3 +277,22 @@ pages:
> only:
> - master
>
> +############## FINAL CONTAINERS ####################
> +
> +
> +final-containers:igt-final:

I am sceptical about having it named igt-final.

How about just igt-x86_64?

If you need further clarification on what people should use then you can
add "build-env-" to the name of the *base* images.

> + stage: final-containers
> + image: docker:stable
> + services:
> + - docker:dind
> + dependencies:
> + - build:tests-fedora
> + variables:
> + DOCKER_HOST: tcp://docker:2375
> + DOCKER_DRIVER: overlay2
> + FORCE_REBUILD: 1
> + script:
> + - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
> + - docker pull $CI_REGISTRY/$CI_PROJECT_PATH/igt-fedora
> + - docker tag $CI_REGISTRY/$CI_PROJECT_PATH/igt-fedora igt-fedora
> + - scripts/pull-or-rebuild.sh Dockerfile.final igt-final
> diff --git a/Dockerfile.final b/Dockerfile.final
> new file mode 100644
> index 00000000..214a5c20
> --- /dev/null
> +++ b/Dockerfile.final
> @@ -0,0 +1,16 @@
> +# Version number to bump for force image rebuild: 0
> +FROM igt-fedora
> +
> +RUN dnf install -y findutils && \
> + dnf clean all
> +
> +COPY opt-igt /opt/igt
> +COPY scripts/docker-help.sh /usr/local/bin/docker-help.sh
> +
> +ENV PATH="/opt/igt/bin:${PATH}"
> +ENV LD_LIBRARY_PATH="/opt/igt/lib:/opt/igt/lib64:${LD_LIBRARY_PATH}"
> +ENV IGT_TEST_ROOT="/opt/igt/libexec/igt-gpu-tools"
> +
> +COPY scripts/docker-help.sh /usr/local/bin/docker-help.sh

I would also put this one in .gitlab-ci/

> +
> +CMD docker-help.sh
> diff --git a/scripts/docker-help.sh b/scripts/docker-help.sh
> new file mode 100755
> index 00000000..671da137
> --- /dev/null
> +++ b/scripts/docker-help.sh
> @@ -0,0 +1,34 @@
> +#!/bin/sh
> +#
> +# Copyright © 2019 Intel Corporation
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the "Software"),
> +# to deal in the Software without restriction, including without limitation
> +# the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +# and/or sell copies of the Software, and to permit persons to whom the
> +# Software is furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> +# IN THE SOFTWARE.
> +
> +TEST_LIST=$(find /opt/igt/libexec -type f -printf "%f ")

Shouldn't it be /opt/igt/libexec/igt-gpu-tools?

> +cat << END
> +This is a docker container, packaged with intel-gpu-tools.
> + - IGT runner is available in PATH. In order for results to be available on a
> + host system, the directory has to be mounted inside, e.g.
> + docker run -v results:/tmp/results igt-final igt_runner /tmp/results
> + - Test lists are available in /opt/igt/share/igt-gpu-tools
> + - Test binaries are available in IGT_TEST_ROOT=/opt/igt/libexec.

Can you mention --priviledged/seccomp shenanigans for testing real HW
from inside the container?

> +Contents of /opt/igt/libexec: $TEST_LIST

Also print PATH, LD_LIBRARY_PATH, IGT_TEST_ROOT so people know what they
are getting set for free.

--
Cheers,
Arek