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