1b8e80941Smrgvariables:
2b8e80941Smrg  DOCKER_DRIVER: overlay2
3b8e80941Smrg
4b8e80941Smrgstages:
5b8e80941Smrg  - build-container
6b8e80941Smrg  - build
7b8e80941Smrg  - test
8b8e80941Smrg
9b8e80941Smrg# Build Docker image with deqp, the rootfs and the build deps for Mesa
10b8e80941Smrgbuild-container:
11b8e80941Smrg  stage: build-container
12b8e80941Smrg  when: always
13b8e80941Smrg  services:
14b8e80941Smrg    - docker:dind
15b8e80941Smrg  image: docker:latest
16b8e80941Smrg  before_script:
17b8e80941Smrg    - mkdir -p results
18b8e80941Smrg  script:
19b8e80941Smrg    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
20b8e80941Smrg    - time docker pull $CI_REGISTRY_IMAGE:latest || true
21b8e80941Smrg    - time docker build
22b8e80941Smrg             -t $CI_REGISTRY_IMAGE
23b8e80941Smrg             --cache-from $CI_REGISTRY_IMAGE:latest
24b8e80941Smrg             src/gallium/drivers/panfrost/ci
25b8e80941Smrg             2>&1 | tee results/docker_build_log.txt
26b8e80941Smrg    - time docker push $CI_REGISTRY_IMAGE:latest 2>&1 | tee results/docker_push_log.txt
27b8e80941Smrg
28b8e80941Smrg    - docker history $CI_REGISTRY_IMAGE:latest
29b8e80941Smrg
30b8e80941Smrg    - "grep -o 'digest: sha256:[0-9a-f]\\+' results/docker_push_log.txt |
31b8e80941Smrg       cut -f 2 -d ' ' |
32b8e80941Smrg       tee results/docker_image_digest.txt"
33b8e80941Smrg  artifacts:
34b8e80941Smrg    when: always
35b8e80941Smrg    paths:
36b8e80941Smrg      - results/
37b8e80941Smrg
38b8e80941Smrgbuild:
39b8e80941Smrg  stage: build
40b8e80941Smrg  image: $CI_REGISTRY_IMAGE:latest
41b8e80941Smrg  cache:
42b8e80941Smrg    paths:
43b8e80941Smrg      - ccache
44b8e80941Smrg  before_script:
45b8e80941Smrg    - mkdir -p results mesa-build
46b8e80941Smrg    - mkdir -p ccache
47b8e80941Smrg  script:
48b8e80941Smrg    - export CCACHE_BASEDIR=$CI_PROJECT_DIR
49b8e80941Smrg    - export CCACHE_DIR=$CI_PROJECT_DIR/ccache
50b8e80941Smrg    - export PATH="/usr/lib/ccache:$PATH"
51b8e80941Smrg    - ccache -s
52b8e80941Smrg
53b8e80941Smrg    - /usr/share/meson/debcrossgen --arch arm64 -o /tmp/cross_file.txt
54b8e80941Smrg    - meson . mesa-build
55b8e80941Smrg        --cross-file /tmp/cross_file.txt
56b8e80941Smrg        --libdir /artifacts/rootfs/mesa/lib/aarch64-linux-gnu
57b8e80941Smrg        --buildtype release
58b8e80941Smrg        -Dgallium-drivers=kmsro,panfrost
59b8e80941Smrg        -Ddri-drivers=
60b8e80941Smrg        -Dprefix=/artifacts/rootfs/mesa
61b8e80941Smrg    - ninja -C mesa-build install
62b8e80941Smrg    - du -sh /artifacts/rootfs/mesa/*
63b8e80941Smrg    - rm -rf /artifacts/rootfs/mesa/include
64b8e80941Smrg    - cp src/gallium/drivers/panfrost/ci/deqp-runner.sh /artifacts/rootfs/deqp/.
65b8e80941Smrg    - du -sh /artifacts/rootfs/deqp/*
66b8e80941Smrg    - find /artifacts/rootfs/ -type f -printf "%s\t%p\n" | sort -n
67b8e80941Smrg    - cd /artifacts/rootfs/ ; find -H  |  cpio -H newc -v -o | gzip -c - > $CI_PROJECT_DIR/results/panfrost-rootfs.cpio.gz
68b8e80941Smrg    - cp /artifacts/Image /artifacts/rk3399-gru-kevin.dtb $CI_PROJECT_DIR/results/.
69b8e80941Smrg
70b8e80941Smrg    - cd $CI_PROJECT_DIR
71b8e80941Smrg    - src/gallium/drivers/panfrost/ci/generate_lava.py
72b8e80941Smrg        --template src/gallium/drivers/panfrost/ci/lava-deqp.yml.jinja2
73b8e80941Smrg        --base-artifacts-url $CI_PROJECT_URL/-/jobs/$CI_JOB_ID/artifacts/raw/results
74b8e80941Smrg        > results/lava-deqp.yml
75b8e80941Smrg  artifacts:
76b8e80941Smrg    when: always
77b8e80941Smrg    paths:
78b8e80941Smrg      - results/
79b8e80941Smrg
80b8e80941Smrgtest:
81b8e80941Smrg  stage: test
82b8e80941Smrg  image: $CI_REGISTRY_IMAGE:latest
83b8e80941Smrg  script:
84b8e80941Smrg    - mkdir -p ~/.config/
85b8e80941Smrg    - |
86b8e80941Smrg      echo "default:
87b8e80941Smrg        uri: https://lava.collabora.co.uk/RPC2
88b8e80941Smrg        timeout: 120
89b8e80941Smrg        username: jenkins-fdo
90b8e80941Smrg        token: $LAVA_TOKEN
91b8e80941Smrg      " > ~/.config/lavacli.yaml
92b8e80941Smrg    - lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp.yml`
93b8e80941Smrg    - echo $lava_job_id
94b8e80941Smrg    - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee results/lava-deqp-$lava_job_id.log
95b8e80941Smrg    - lavacli jobs show $lava_job_id
96b8e80941Smrg    - curl "https://lava.collabora.co.uk/results/$lava_job_id/csv?user=jenkins-fdo&token=$LAVA_TOKEN" > raw_results.csv
97b8e80941Smrg    - cat raw_results.csv | csvcut -c 12,3 | grep dEQP-GLES2 | sort > results/results-$lava_job_id.csv
98b8e80941Smrg
99b8e80941Smrg    # FIXME: Remove flip-flops from comparison files
100b8e80941Smrg    - sed -i '/dEQP-GLES2.functional.shaders.invariance.highp.loop_4/d' src/gallium/drivers/panfrost/ci/expected-failures.txt results/results-$lava_job_id.csv
101b8e80941Smrg    - sed -i '/dEQP-GLES2.functional.texture.units.2_units.mixed.1/d' src/gallium/drivers/panfrost/ci/expected-failures.txt results/results-$lava_job_id.csv
102b8e80941Smrg    - sed -i '/dEQP-GLES2.functional.texture.units.4_units.mixed.5/d' src/gallium/drivers/panfrost/ci/expected-failures.txt results/results-$lava_job_id.csv
103b8e80941Smrg    - sed -i '/dEQP-GLES2.functional.texture.units.all_units.only_cube.7/d' src/gallium/drivers/panfrost/ci/expected-failures.txt results/results-$lava_job_id.csv
104b8e80941Smrg
105b8e80941Smrg    - PASSED=$(grep pass$ results/results-$lava_job_id.csv | wc -l)
106b8e80941Smrg    - FAILED=$(grep fail$ results/results-$lava_job_id.csv | wc -l)
107b8e80941Smrg    - TOTAL=$(wc -l < results/results-$lava_job_id.csv)
108b8e80941Smrg    - 'echo "Passed: $PASSED ($(expr $PASSED \* 100 / $TOTAL)%)"'
109b8e80941Smrg    - 'echo "Failed: $FAILED ($(expr $FAILED \* 100 / $TOTAL)%)"'
110b8e80941Smrg    - 'echo "Total: $TOTAL"'
111b8e80941Smrg
112b8e80941Smrg    - sed '/,pass/d' results/results-$lava_job_id.csv | sed 's/,fail//' > results/failures-$lava_job_id.txt
113b8e80941Smrg    - diff -u src/gallium/drivers/panfrost/ci/expected-failures.txt results/failures-$lava_job_id.txt
114b8e80941Smrg  artifacts:
115b8e80941Smrg    when: always
116b8e80941Smrg    paths:
117b8e80941Smrg      - results/