variables: DOCKER_DRIVER: overlay2 stages: - containers - build - test # Build Docker image with deqp, the rootfs and the build deps for Mesa .container: stage: containers image: docker:stable only: changes: - src/gallium/drivers/panfrost/ci/gitlab-ci.yml - src/gallium/drivers/panfrost/ci/Dockerfile - src/gallium/drivers/panfrost/ci/create-rootfs.sh - src/gallium/drivers/panfrost/ci/${KERNEL_ARCH}.config services: - docker:dind variables: DOCKER_HOST: tcp://docker:2375 DOCKER_DRIVER: overlay2 script: - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY - time docker build -t $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH} --build-arg DEBIAN_ARCH=${DEBIAN_ARCH} --build-arg GCC_ARCH=${GCC_ARCH} --build-arg KERNEL_ARCH=${KERNEL_ARCH} --build-arg DEFCONFIG=${DEFCONFIG} --build-arg DEVICE_TREES=${DEVICE_TREES} --build-arg KERNEL_IMAGE_NAME=${KERNEL_IMAGE_NAME} src/gallium/drivers/panfrost/ci - time docker push $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH} - docker history $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH} container:armhf: extends: .container variables: DEBIAN_ARCH: "armhf" GCC_ARCH: "arm-linux-gnueabihf" KERNEL_ARCH: "arm" DEFCONFIG: "arch/arm/configs/multi_v7_defconfig" DEVICE_TREES: "arch/arm/boot/dts/rk3288-veyron-jaq.dtb" KERNEL_IMAGE_NAME: "zImage" container:arm64: extends: .container variables: DEBIAN_ARCH: "arm64" GCC_ARCH: "aarch64-linux-gnu" KERNEL_ARCH: "arm64" DEFCONFIG: "arch/arm64/configs/defconfig" DEVICE_TREES: "arch/arm64/boot/dts/rockchip/rk3399-gru-kevin.dtb" KERNEL_IMAGE_NAME: "Image" .build: stage: build image: $CI_REGISTRY/$CI_PROJECT_PATH/${DEBIAN_ARCH}:latest cache: paths: - ccache before_script: - mkdir -p results mesa-build - mkdir -p ccache script: - export CCACHE_BASEDIR=$CI_PROJECT_DIR - export CCACHE_DIR=$CI_PROJECT_DIR/ccache - export PATH="/usr/lib/ccache:$PATH" - ccache -s # Build Mesa - /usr/share/meson/debcrossgen --arch ${DEBIAN_ARCH} -o /tmp/cross_file.txt - meson . mesa-build --cross-file /tmp/cross_file.txt --libdir /artifacts/rootfs/mesa/lib/ --buildtype release -Dgallium-drivers=kmsro,panfrost -Ddri-drivers= -Dprefix=/artifacts/rootfs/mesa - ninja -C mesa-build install - du -sh /artifacts/rootfs/mesa/* - rm -rf /artifacts/rootfs/mesa/include # Pack rootfs - cp src/gallium/drivers/panfrost/ci/deqp-runner.sh /artifacts/rootfs/deqp/. - du -sh /artifacts/rootfs/deqp/* - find /artifacts/rootfs/ -type f -printf "%s\t%p\n" | sort -n - cd /artifacts/rootfs/ ; find -H | cpio -H newc -v -o | gzip -c - > $CI_PROJECT_DIR/results/panfrost-rootfs-${DEBIAN_ARCH}.cpio.gz # Copy kernel and DT - cp /artifacts/${KERNEL_IMAGE_NAME} /artifacts/*.dtb $CI_PROJECT_DIR/results/. # Generate LAVA job - cd $CI_PROJECT_DIR - src/gallium/drivers/panfrost/ci/generate_lava.py --template src/gallium/drivers/panfrost/ci/lava-deqp.yml.jinja2 --arch ${DEBIAN_ARCH} --base-artifacts-url $CI_PROJECT_URL/-/jobs/$CI_JOB_ID/artifacts/raw/results --device-type ${DEVICE_TYPE} --kernel-image-name ${KERNEL_IMAGE_NAME} > results/lava-deqp.yml artifacts: when: always paths: - results/ build:armhf: extends: .build variables: DEBIAN_ARCH: "armhf" GCC_ARCH: "arm-linux-gnueabihf" DEVICE_TYPE: "rk3288-veyron-jaq" KERNEL_IMAGE_NAME: "zImage" build:arm64: extends: .build variables: DEBIAN_ARCH: "arm64" GCC_ARCH: "aarch64-linux-gnu" DEVICE_TYPE: "rk3399-gru-kevin" KERNEL_IMAGE_NAME: "Image" .test: stage: test tags: - idle-jobs image: $CI_REGISTRY/$CI_PROJECT_PATH/arm64:latest # Any of the images will be fine script: - mkdir -p ~/.config/ - | echo "default: uri: https://lava.collabora.co.uk/RPC2 timeout: 120 username: jenkins-fdo token: $LAVA_TOKEN " > ~/.config/lavacli.yaml - lava_job_id=`lavacli jobs submit $CI_PROJECT_DIR/results/lava-deqp.yml` || echo $lava_job_id - lavacli jobs logs $lava_job_id | grep -a -v "{'case':" | tee results/lava-deqp-$lava_job_id.log - lavacli jobs show $lava_job_id - curl "https://lava.collabora.co.uk/results/$lava_job_id/csv?user=jenkins-fdo&token=$LAVA_TOKEN" > raw_results.csv - cat raw_results.csv | csvcut -c 12,3 | grep dEQP-GLES2 | sort > results/results-$lava_job_id.csv # FIXME: Remove flip-flops from comparison files - | FLIP_FLOPS=" 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 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 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgb5_a1_depth_component16 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4 dEQP-GLES2.functional.fbo.render.color.blend_rbo_rgba4_depth_component16 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgb5_a1_depth_component16 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4 dEQP-GLES2.functional.fbo.render.color.blend_npot_rbo_rgba4_depth_component16 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_depth_component16 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgb5_a1_stencil_index8 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_depth_component16 dEQP-GLES2.functional.fbo.render.color_clear.rbo_rgba4_stencil_index8 dEQP-GLES2.functional.fbo.render.recreate_depthbuffer. dEQP-GLES2.functional.fbo.render.recreate_stencilbuffer. dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgb5_a1 dEQP-GLES2.functional.fbo.render.shared_colorbuffer_clear.rbo_rgba4 dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgb5_a1 dEQP-GLES2.functional.fbo.render.shared_colorbuffer.rbo_rgba4 dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgb5_a1_depth_component16 dEQP-GLES2.functional.fbo.render.shared_depthbuffer.rbo_rgba4_depth_component16 dEQP-GLES2.functional.fbo.render.stencil_clear.rbo_rgb5_a1_stencil_index8 dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgb5_a1_stencil_index8 dEQP-GLES2.functional.fbo.render.stencil.npot_rbo_rgba4_stencil_index8 dEQP-GLES2.functional.fbo.render.stencil.rbo_rgb5_a1_stencil_index8 dEQP-GLES2.functional.fbo.render.stencil.rbo_rgba4_stencil_index8 dEQP-GLES2.functional.lifetime.attach.deleted_input.renderbuffer_framebuffer dEQP-GLES2.functional.lifetime.attach.deleted_output.renderbuffer_framebuffer dEQP-GLES2.functional.polygon_offset.fixed16_factor_0_slope dEQP-GLES2.functional.polygon_offset.fixed16_factor_1_slope dEQP-GLES2.functional.shaders.invariance.highp.loop_4 dEQP-GLES2.functional.shaders.operator.common_functions.smoothstep.mediump_vec3_vertex dEQP-GLES2.functional.shaders.random.all_features.fragment.12 dEQP-GLES2.functional.shaders.random.all_features.fragment.37 dEQP-GLES2.functional.texture.units.2_units.mixed.1 dEQP-GLES2.functional.texture.units.2_units.mixed.3 dEQP-GLES2.functional.texture.units.2_units.only_2d.2 dEQP-GLES2.functional.texture.units.4_units.mixed.5 dEQP-GLES2.functional.texture.units.4_units.only_2d.0 dEQP-GLES2.functional.texture.units.all_units.only_cube.4 dEQP-GLES2.functional.texture.units.all_units.only_cube.7 dEQP-GLES2.functional.texture.units.all_units.only_cube.8 " - 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 - PASSED=$(grep pass$ results/results-$lava_job_id.csv | wc -l) - FAILED=$(grep fail$ results/results-$lava_job_id.csv | wc -l) - TOTAL=$(wc -l < results/results-$lava_job_id.csv) - 'echo "Passed: $PASSED ($(expr $PASSED \* 100 / $TOTAL)%)"' - 'echo "Failed: $FAILED ($(expr $FAILED \* 100 / $TOTAL)%)"' - 'echo "Total: $TOTAL"' - 'if [ $TOTAL != 17439 ]; then echo "WARNING: Unexpected count of results. Incomplete run?"; fi' - sed '/,pass/d' results/results-$lava_job_id.csv | sed 's/,fail//' > results/failures-$lava_job_id.txt - diff -u src/gallium/drivers/panfrost/ci/expected-failures.txt results/failures-$lava_job_id.txt artifacts: when: always paths: - results/ test:armhf: extends: .test dependencies: - build:armhf test:arm64: extends: .test dependencies: - build:arm64