5
INSTALL=$(realpath -s "$PWD"/install)
6
MINIO_ARGS="--credentials=/tmp/.minio_credentials"
8
RESULTS=$(realpath -s "$PWD"/results)
11
# Set up the driver environment.
12
# Modifiying here directly LD_LIBRARY_PATH may cause problems when
13
# using a command wrapper. Hence, we will just set it when running the
15
export __LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$INSTALL/lib/"
17
# Sanity check to ensure that our environment is sufficient to make our tests
18
# run against the Mesa built by CI, rather than any installed distro version.
19
MESA_VERSION=$(head -1 "$INSTALL/VERSION" | sed 's/\./\\./g')
23
NC='\033[0m' # No Color
29
# wrapper to supress +x to avoid spamming the log
36
if [ "$VK_DRIVER" ]; then
40
# Set the Vulkan driver to use.
41
export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/${VK_DRIVER}_icd.x86_64.json"
43
if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
44
# Set environment for Wine.
45
export WINEDEBUG="-all"
46
export WINEPREFIX="/dxvk-wine64"
49
# Set environment for DXVK.
50
export DXVK_LOG_LEVEL="none"
51
export DXVK_STATE_CACHE=0
53
# Set environment for gfxreconstruct executables.
54
export PATH="/gfxreconstruct/build/bin:$PATH"
57
SANITY_MESA_VERSION_CMD="vulkaninfo"
59
HANG_DETECTION_CMD="/parallel-deqp-runner/build/bin/hang-detection"
62
# Set up the Window System Interface (WSI)
64
if [ ${TEST_START_XORG:-0} -eq 1 ]; then
65
"$INSTALL"/common/start-x.sh "$INSTALL"
68
# Run vulkan against the host's running X server (xvfb doesn't
70
# Set the DISPLAY env variable in each gitlab-runner's
72
# https://docs.gitlab.com/runner/configuration/advanced-configuration.html#the-runners-section
73
quiet printf "%s%s\n" "Running against the hosts' X server. " \
74
"DISPLAY is \"$DISPLAY\"."
80
if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
81
# Set environment for apitrace executable.
82
export PATH="/apitrace/build:$PATH"
84
# Our rootfs may not have "less", which apitrace uses during
89
SANITY_MESA_VERSION_CMD="wflinfo"
94
# Set up the platform windowing system.
96
if [ "x$EGL_PLATFORM" = "xsurfaceless" ]; then
98
# Use the surfaceless EGL platform.
100
export WAFFLE_PLATFORM="surfaceless_egl"
102
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform surfaceless_egl --api gles2"
104
if [ "x$GALLIUM_DRIVER" = "xvirpipe" ]; then
105
# piglit is to use virpipe, and virgl_test_server llvmpipe
106
export GALLIUM_DRIVER="$GALLIUM_DRIVER"
108
LD_LIBRARY_PATH="$__LD_LIBRARY_PATH" \
109
GALLIUM_DRIVER=llvmpipe \
110
GALLIVM_PERF="nopt" \
111
VTEST_USE_EGL_SURFACELESS=1 \
113
virgl_test_server >"$RESULTS"/vtest-log.txt 2>&1 &
117
elif [ "x$PIGLIT_PLATFORM" = "xgbm" ]; then
118
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform gbm --api gl"
119
elif [ "x$PIGLIT_PLATFORM" = "xmixed_glx_egl" ]; then
120
# It is assumed that you have already brought up your X server before
121
# calling this script.
122
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl"
124
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD --platform glx --api gl --profile core"
125
RUN_CMD_WRAPPER="xvfb-run --server-args=\"-noreset\" sh -c"
129
if [ "$ZINK_USE_LAVAPIPE" ]; then
130
export VK_ICD_FILENAMES="$INSTALL/share/vulkan/icd.d/lvp_icd.x86_64.json"
133
# If the job is parallel at the gitlab job level, will take the corresponding
134
# fraction of the caselist.
135
if [ -n "$CI_NODE_INDEX" ]; then
137
if [ "$PIGLIT_PROFILES" != "${PIGLIT_PROFILES% *}" ]; then
138
FAILURE_MESSAGE=$(printf "%s" "Can't parallelize piglit with multiple profiles")
139
quiet print_red printf "%s\n" "$FAILURE_MESSAGE"
146
replay_minio_upload_images() {
147
find "$RESULTS/$__PREFIX" -type f -name "*.png" -printf "%P\n" \
148
| while read -r line; do
150
__TRACE="${line%-*-*}"
151
if grep -q "^$__PREFIX/$__TRACE: pass$" ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig"; then
152
if [ "x$CI_PROJECT_PATH" != "x$FDO_UPSTREAM_REPO" ]; then
155
__MINIO_PATH="$PIGLIT_REPLAY_REFERENCE_IMAGES_BASE"
156
__DESTINATION_FILE_PATH="${line##*-}"
157
if wget -q --method=HEAD "https://${__MINIO_PATH}/${__DESTINATION_FILE_PATH}" 2>/dev/null; then
161
__MINIO_PATH="$JOB_ARTIFACTS_BASE"
162
__DESTINATION_FILE_PATH="$__MINIO_TRACES_PREFIX/${line##*-}"
165
ci-fairy minio cp $MINIO_ARGS "$RESULTS/$__PREFIX/$line" \
166
"minio://${__MINIO_PATH}/${__DESTINATION_FILE_PATH}"
170
SANITY_MESA_VERSION_CMD="$SANITY_MESA_VERSION_CMD | tee /tmp/version.txt | grep \"Mesa $MESA_VERSION\(\s\|$\)\""
172
if [ -d results ]; then
173
cd results && rm -rf ..?* .[!.]* *
177
if [ -n "$USE_CASELIST" ]; then
178
PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
179
PIGLIT_GENTESTS="./piglit print-cmd $PIGLIT_TESTS $PIGLIT_PROFILES --format \"{name}\" > /tmp/case-list.txt"
180
RUN_GENTESTS="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $PIGLIT_GENTESTS"
184
sed -ni $CI_NODE_INDEX~$CI_NODE_TOTAL"p" /tmp/case-list.txt
186
PIGLIT_TESTS="--test-list /tmp/case-list.txt"
189
PIGLIT_OPTIONS=$(printf "%s" "$PIGLIT_OPTIONS")
191
PIGLIT_TESTS=$(printf "%s" "$PIGLIT_TESTS")
193
PIGLIT_CMD="./piglit run --timeout 300 -j${FDO_CI_CONCURRENT:-4} $PIGLIT_OPTIONS $PIGLIT_TESTS $PIGLIT_PROFILES "$(/usr/bin/printf "%q" "$RESULTS")
195
RUN_CMD="export LD_LIBRARY_PATH=$__LD_LIBRARY_PATH; $SANITY_MESA_VERSION_CMD && $HANG_DETECTION_CMD $PIGLIT_CMD"
197
if [ "$RUN_CMD_WRAPPER" ]; then
198
RUN_CMD="set +e; $RUN_CMD_WRAPPER "$(/usr/bin/printf "%q" "$RUN_CMD")"; set -e"
201
FAILURE_MESSAGE=$(printf "%s" "Unexpected change in results:")
203
if [ "x$PIGLIT_PROFILES" = "xreplay" ] \
204
&& [ ${PIGLIT_REPLAY_UPLOAD_TO_MINIO:-0} -eq 1 ]; then
205
ci-fairy minio login $MINIO_ARGS $CI_JOB_JWT
210
if [ $? -ne 0 ]; then
211
printf "%s\n" "Found $(cat /tmp/version.txt), expected $MESA_VERSION"
214
ARTIFACTS_BASE_URL="https://${CI_PROJECT_ROOT_NAMESPACE}.${CI_PAGES_DOMAIN}/-/${CI_PROJECT_NAME}/-/jobs/${CI_JOB_ID}/artifacts"
216
if [ ${PIGLIT_JUNIT_RESULTS:-0} -eq 1 ]; then
217
./piglit summary aggregate "$RESULTS" -o junit.xml
218
FAILURE_MESSAGE=$(printf "${FAILURE_MESSAGE}\n%s" "Check the JUnit report for failures at: ${ARTIFACTS_BASE_URL}/results/junit.xml")
221
PIGLIT_RESULTS="${PIGLIT_RESULTS:-$PIGLIT_PROFILES}"
222
RESULTSFILE="$RESULTS/$PIGLIT_RESULTS.txt"
223
mkdir -p .gitlab-ci/piglit
224
./piglit summary console "$RESULTS"/results.json.bz2 \
225
| tee ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig" \
226
| head -n -1 | grep -v ": pass" \
227
| sed '/^summary:/Q' \
230
if [ "x$PIGLIT_PROFILES" = "xreplay" ] \
231
&& [ ${PIGLIT_REPLAY_UPLOAD_TO_MINIO:-0} -eq 1 ]; then
233
__PREFIX="trace/$PIGLIT_REPLAY_DEVICE_NAME"
234
__MINIO_PATH="$PIGLIT_REPLAY_ARTIFACTS_BASE_URL"
235
__MINIO_TRACES_PREFIX="traces"
237
if [ "x$PIGLIT_REPLAY_SUBCOMMAND" != "xprofile" ]; then
238
quiet replay_minio_upload_images
242
if [ -n "$USE_CASELIST" ]; then
243
# Just filter the expected results based on the tests that were actually
244
# executed, and switch to the version with no summary
245
cat ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.orig" | sed '/^summary:/Q' | rev \
246
| cut -f2- -d: | rev | sed "s/$/:/g" > /tmp/executed.txt
248
grep -F -f /tmp/executed.txt "$INSTALL/$PIGLIT_RESULTS.txt" \
249
> ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" || true
250
elif [ -f "$INSTALL/$PIGLIT_RESULTS.txt" ]; then
251
cp "$INSTALL/$PIGLIT_RESULTS.txt" \
252
".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline"
254
touch ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline"
257
if diff -q ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE; then
261
./piglit summary html --exclude-details=pass \
262
"$RESULTS"/summary "$RESULTS"/results.json.bz2
264
if [ "x$PIGLIT_PROFILES" = "xreplay" ]; then
265
find "$RESULTS"/summary -type f -name "*.html" -print0 \
266
| xargs -0 sed -i 's%<img src="file://'"${RESULTS}"'.*-\([0-9a-f]*\)\.png%<img src="https://'"${JOB_ARTIFACTS_BASE}"'/traces/\1.png%g'
267
find "$RESULTS"/summary -type f -name "*.html" -print0 \
268
| xargs -0 sed -i 's%<img src="file://%<img src="https://'"${PIGLIT_REPLAY_REFERENCE_IMAGES_BASE}"'/%g'
271
FAILURE_MESSAGE=$(printf "${FAILURE_MESSAGE}\n%s" "Check the HTML summary for problems at: ${ARTIFACTS_BASE_URL}/results/summary/problems.html")
273
quiet print_red printf "%s\n" "$FAILURE_MESSAGE"
274
quiet diff --color=always -u ".gitlab-ci/piglit/$PIGLIT_RESULTS.txt.baseline" $RESULTSFILE