panfrost: ci: Avoid pulling Docker image on every run
[mesa.git] / src / gallium / drivers / panfrost / ci / gitlab-ci.yml
1 variables:
2 DOCKER_DRIVER: overlay2
3
4 stages:
5 - containers
6 - build
7 - test
8
9 # Build Docker image with deqp, the rootfs and the build deps for Mesa
10 .container:
11 stage: containers
12 image: docker:stable
13 only:
14 changes:
15 - src/gallium/drivers/panfrost/ci/gitlab-ci.yml
16 - src/gallium/drivers/panfrost/ci/Dockerfile
17 - src/gallium/drivers/panfrost/ci/create-rootfs.sh
18 - src/gallium/drivers/panfrost/ci/${KERNEL_ARCH}.config
19 services:
20 - docker:dind
21 variables:
22 DOCKER_HOST: tcp://docker:2375
23 DOCKER_DRIVER: overlay2
24 script:
25 - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
26 - time docker build
27 -t $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH}
28 --build-arg DEBIAN_ARCH=${DEBIAN_ARCH}
29 --build-arg GCC_ARCH=${GCC_ARCH}
30 --build-arg KERNEL_ARCH=${KERNEL_ARCH}
31 --build-arg DEFCONFIG=${DEFCONFIG}
32 --build-arg DEVICE_TREES=${DEVICE_TREES}
33 --build-arg KERNEL_IMAGE_NAME=${KERNEL_IMAGE_NAME}
34 src/gallium/drivers/panfrost/ci
35 - time docker push $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH}
36 - docker history $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH}
37
38 container:armhf:
39 extends: .container
40 variables:
41 DEBIAN_ARCH: "armhf"
42 GCC_ARCH: "arm-linux-gnueabihf"
43 KERNEL_ARCH: "arm"
44 DEFCONFIG: "arch/arm/configs/multi_v7_defconfig"
45 DEVICE_TREES: "arch/arm/boot/dts/rk3288-veyron-jaq.dtb"
46 KERNEL_IMAGE_NAME: "zImage"
47
48 container:arm64:
49 extends: .container
50 variables:
51 DEBIAN_ARCH: "arm64"
52 GCC_ARCH: "aarch64-linux-gnu"
53 KERNEL_ARCH: "arm64"
54 DEFCONFIG: "arch/arm64/configs/defconfig"
55 DEVICE_TREES: "arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb"
56 KERNEL_IMAGE_NAME: "Image"
57
58 .build:
59 stage: build
60 image: $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH}:latest
61 cache:
62 paths:
63 - ccache
64 before_script:
65 - mkdir -p results mesa-build
66 - mkdir -p ccache
67 script:
68 - export CCACHE_BASEDIR=$CI_PROJECT_DIR
69 - export CCACHE_DIR=$CI_PROJECT_DIR/ccache
70 - export PATH="/usr/lib/ccache:$PATH"
71 - ccache -s
72
73 # Build Mesa
74 - /usr/share/meson/debcrossgen --arch ${DEBIAN_ARCH} -o /tmp/cross_file.txt
75 - meson . mesa-build
76 --cross-file /tmp/cross_file.txt
77 --libdir /artifacts/rootfs/mesa/lib/
78 --buildtype release
79 -Dgallium-drivers=kmsro,panfrost
80 -Ddri-drivers=
81 -Dprefix=/artifacts/rootfs/mesa
82 - ninja -C mesa-build install
83 - du -sh /artifacts/rootfs/mesa/*
84 - rm -rf /artifacts/rootfs/mesa/include
85
86 # Pack rootfs
87 - cp src/gallium/drivers/panfrost/ci/deqp-runner.sh /artifacts/rootfs/deqp/.
88 - du -sh /artifacts/rootfs/deqp/*
89 - find /artifacts/rootfs/ -type f -printf "%s\t%p\n" | sort -n
90 - cd /artifacts/rootfs/ ; find -H | cpio -H newc -v -o | gzip -c - > $CI_PROJECT_DIR/results/panfrost-rootfs-${DEBIAN_ARCH}.cpio.gz
91
92 # Copy kernel and DT
93 - cp /artifacts/${KERNEL_IMAGE_NAME} /artifacts/*.dtb $CI_PROJECT_DIR/results/.
94
95 # Generate LAVA job
96 - cd $CI_PROJECT_DIR
97 - src/gallium/drivers/panfrost/ci/generate_lava.py
98 --template src/gallium/drivers/panfrost/ci/lava-deqp.yml.jinja2
99 --arch ${DEBIAN_ARCH}
100 --base-artifacts-url $CI_PROJECT_URL/-/jobs/$CI_JOB_ID/artifacts/raw/results
101 --device-type ${DEVICE_TYPE}
102 --kernel-image-name ${KERNEL_IMAGE_NAME}
103 > results/lava-deqp.yml
104 artifacts:
105 when: always
106 paths:
107 - results/
108
109 build:armhf:
110 extends: .build
111 variables:
112 DEBIAN_ARCH: "armhf"
113 GCC_ARCH: "arm-linux-gnueabihf"
114 DEVICE_TYPE: "rk3288-veyron-jaq"
115 KERNEL_IMAGE_NAME: "zImage"
116
117 build:arm64:
118 extends: .build
119 variables:
120 DEBIAN_ARCH: "arm64"
121 GCC_ARCH: "aarch64-linux-gnu"
122 DEVICE_TYPE: "rk3399-gru-kevin"
123 KERNEL_IMAGE_NAME: "Image"
124
125 .test:
126 stage: test
127 tags:
128 - idle-jobs
129 image: $CI_REGISTRY/$CI_PROJECT_PATH/arm64:latest # Any of the images will be fine
130 script:
131 - mkdir -p ~/.config/
132 - |
133 echo "default:
134 uri: https://lava.collabora.co.uk/RPC2
135 timeout: 120
136 username: jenkins-fdo
137 token: $LAVA_TOKEN
138 " > ~/.config/lavacli.yaml
139 - lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp.yml` || echo $lava_job_id
140 - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee results/lava-deqp-$lava_job_id.log
141 - lavacli jobs show $lava_job_id
142 - curl "https://lava.collabora.co.uk/results/$lava_job_id/csv?user=jenkins-fdo&token=$LAVA_TOKEN" > raw_results.csv
143 - cat raw_results.csv | csvcut -c 12,3 | grep dEQP-GLES2 | sort > results/results-$lava_job_id.csv
144
145 # FIXME: Remove flip-flops from comparison files
146 - |
147 FLIP_FLOPS="
148 dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_neg_x_neg_z_and_pos_x_pos_z_and_neg_x_neg_y_pos_z
149 dEQP-GLES2.functional.clipping.triangle_vertex.clip_three.clip_pos_y_pos_z_and_neg_x_neg_y_pos_z_and_pos_x_pos_y_neg_z
150 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1
151 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16
152 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4
153 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16
154 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1
155 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16
156 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4
157 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16
158 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1
159 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16
160 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8
161 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16
162 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8
163 dEQP-GLES2.functional.fbo.render.recreate_depthbuffer.
164 dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer.
165 dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1
166 dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4
167 dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1
168 dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4
169 dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16
170 dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16
171 dEQP-GLES2.functional.fbo.render.stencil_clear.rbo_rgb5_a1_stencil_index8
172 dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8
173 dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8
174 dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8
175 dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8
176 dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer
177 dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer
178 dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope
179 dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope
180 dEQP-GLES2.functional.shaders.invariance.highp.loop_4
181 dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex
182 dEQP-GLES2.functional.shaders.random.all_features.fragment.12
183 dEQP-GLES2.functional.shaders.random.all_features.fragment.37
184 dEQP-GLES2.functional.texture.units.2_units.mixed.1
185 dEQP-GLES2.functional.texture.units.2_units.mixed.3
186 dEQP-GLES2.functional.texture.units.2_units.only_2d.2
187 dEQP-GLES2.functional.texture.units.4_units.mixed.5
188 dEQP-GLES2.functional.texture.units.4_units.only_2d.0
189 dEQP-GLES2.functional.texture.units.all_units.only_cube.4
190 dEQP-GLES2.functional.texture.units.all_units.only_cube.7
191 dEQP-GLES2.functional.texture.units.all_units.only_cube.8
192 "
193 - for test in $FLIP_FLOPS; do sed -i "/$test/d" src/gallium/drivers/panfrost/ci/expected-failures.txt results/results-$lava_job_id.csv; done
194
195 - PASSED=$(grep pass$ results/results-$lava_job_id.csv | wc -l)
196 - FAILED=$(grep fail$ results/results-$lava_job_id.csv | wc -l)
197 - TOTAL=$(wc -l < results/results-$lava_job_id.csv)
198 - 'echo "Passed: $PASSED ($(expr $PASSED \* 100 / $TOTAL)%)"'
199 - 'echo "Failed: $FAILED ($(expr $FAILED \* 100 / $TOTAL)%)"'
200 - 'echo "Total: $TOTAL"'
201 - 'if [ $TOTAL != 17439 ]; then echo "WARNING: Unexpected count of results. Incomplete run?"; fi'
202
203 - sed '/,pass/d' results/results-$lava_job_id.csv | sed 's/,fail//' > results/failures-$lava_job_id.txt
204 - diff -u src/gallium/drivers/panfrost/ci/expected-failures.txt results/failures-$lava_job_id.txt
205 artifacts:
206 when: always
207 paths:
208 - results/
209
210 test:armhf:
211 extends: .test
212 dependencies:
213 - build:armhf
214
215 test:arm64:
216 extends: .test
217 dependencies:
218 - build:arm64
219