mesa/.gitlab-ci/bare-metal
Tomeu Vizoso 92f3c51560 gitlab-ci: Place files from the Mesa repo into the build tarball
There's some files from the .gitlab-ci directory that are needed in the
test stage and that, because the Mesa repository isn't checked out in
that stage, need to be made available through other means.

Because those files are going to be needed in LAVA devices, place them
ino the tarball containing the built files so it's available to both
gitlab-ci runners and LAVA devices.

Before those files were passed in the artifacts of the Gitlab CI job,
but this commit places them into the built tarball so scripts later in
the pipeline don't need to account for this discrepancy.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4295>
2020-03-26 09:30:48 +00:00
..
.editorconfig
README.md
expect-output.sh
fastboot.sh gitlab-ci: Place files from the Mesa repo into the build tarball 2020-03-26 09:30:48 +00:00
google-power-relay.py
google-power-up.sh
init.sh gitlab-ci: Place files from the Mesa repo into the build tarball 2020-03-26 09:30:48 +00:00
serial-buffer.py

README.md

bare-metal Mesa testing

Testing Mesa with gitlab-runner running on the devices being tested (DUTs) proved to be too unstable, so this set of scripts is for running Mesa testing on bare-metal boards connected to a separate system using gitlab-runner. Currently only "fastboot" devices are supported.

In comparison with LAVA, this doesn't involve maintaining a separate webservice with its own job scheduler and replicating jobs between the two. It also places more of the board support in git, instead of webservice configuration. Most importantly, it doesn't download the rootfs as artifacts on each job, so we can avoid traffic to freedesktop.org. On the other hand, the serial interactions and bootloader support are more primitive.

Requirements

This testing requires power control of the DUTs by the gitlab-runner machine, since this is what we use to reset the system and get back to a pristine state at the start of testing.

We require access to the console output from the gitlb-runner system, since that is how we get the final results back from te tests. You should probably have the console on a serial connection, so that you can see bootloader progress.

The boards need to be able to have a kernel/initramfs supplied by the gitlab-runner system, since the initramfs is what contains the Mesa testing payload. Currently only "fastboot" devices are supported.

The boards should have networking, so that (in a future iteration of this code) we can extract the dEQP .xml results to artifacts on gitlab.

Setup

Each board will be registered in fd.o gitlab. You'll want something like this to register:

sudo gitlab-runner register \
     --url https://gitlab.freedesktop.org \
     --registration-token $1 \
     --name MY_BOARD_NAME \
     --tag-list MY_BOARD_TAG \
     --executor docker \
     --docker-image "alpine:latest" \
     --docker-volumes "/dev:/dev" \
     --docker-network-mode "host" \
     --docker-privileged \
     --non-interactive

The registration token has to come from a fd.o gitlab admin going to https://gitlab.freedesktop.org/admin/runners

The name scheme for Google's lab is google-freedreno-boardname-nn, and our tag is google-freedreno-db410c. The tag is what identifies a board type so that board-specific jobs can be dispatched into that pool.

We need privileged mode and the /dev bind mount in order to get at the serial console and fastboot USB devices (--device arguments don't apply to devices that show up after container start, which is the case with fastboot). We use host network mode so that we can (in the future) spin up a server to collect XML results.

Once you've added your boards, you're going to need to specify the board-specific env vars, adding something like this environment line to each runner in /etc/gitlab-runner/config.toml

[[runners]]
  name = "google-freedreno-db410c-01"
  environment = ["BM_SERIAL=/dev/ttyDB410c8", "BM_POWERUP=google-power-up.sh 8", "BM_FASTBOOT_SERIAL=15e9e390"]

Once you've updated your runners' configs, restart with sudo service gitlab-runner restart