aboutsummaryrefslogtreecommitdiff
path: root/.gitlab-ci.yml
diff options
context:
space:
mode:
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r--.gitlab-ci.yml349
1 files changed, 349 insertions, 0 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 00000000..3955e386
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,349 @@
+variables:
+ FDO_UPSTREAM_REPO: "virgl/virglrenderer"
+ MESA_TEMPLATES_COMMIT: &ci-templates-commit d5aa3941aa03c2f716595116354fb81eb8012acb
+ MESA_BASE_TAG: ${DEBIAN_BASE_TAG}
+ #
+ # IMPORTANT!
+ #
+ # Use the Pipeline ID corresponding to the Mesa Git rev provided below.
+ # If multiple pipeline runs are available, please choose the one having
+ # at least the 'debian-testing' job in 'Build-x86_64' stage completed.
+ #
+ # Pick a pipeline on https://gitlab.freedesktop.org/mesa/mesa/-/pipelines/
+ #
+ MESA_PIPELINE_ID: 743439
+ MESA_PROJECT_PATH: mesa/mesa
+ STORAGE_HOST: s3.freedesktop.org
+ CI_REGISTRY_IMAGE: "registry.freedesktop.org/${MESA_PROJECT_PATH}"
+ # per-pipeline artifact storage on MinIO
+ PIPELINE_ARTIFACTS_BASE: ${STORAGE_HOST}/artifacts/${CI_PROJECT_PATH}/${CI_PIPELINE_ID}
+ # per-job artifact storage on MinIO
+ JOB_ARTIFACTS_BASE: ${PIPELINE_ARTIFACTS_BASE}/${CI_JOB_ID}
+ # reference images stored for traces
+ PIGLIT_REPLAY_REFERENCE_IMAGES_BASE: "${STORAGE_HOST}/mesa-tracie-results/${FDO_UPSTREAM_REPO}"
+
+
+include:
+ - project: 'freedesktop/ci-templates'
+ ref: 79c325922670137e8f0a4dc5f6f097e0eb57c1af
+ file:
+ - '/templates/ci-fairy.yml'
+ - project: 'freedesktop/ci-templates'
+ ref: *ci-templates-commit
+ file:
+ - '/templates/debian.yml'
+ - '/templates/fedora.yml'
+ - project: 'mesa/mesa'
+ # IMPORTANT: Use a recent Mesa Git revision
+ # The commit ref must be in sync with the pipeline picked above
+ # It can be found on the pipeline page below the commit message
+ ref: 1ec172646cd7f5b8c04173a6b45a871aa48aa12e
+ file:
+ - '/.gitlab-ci/image-tags.yml'
+
+# YAML anchors for rule conditions
+# --------------------------------
+.rules-anchors:
+ rules:
+ # Scheduled pipeline
+ - if: &is-scheduled-pipeline '$CI_PIPELINE_SOURCE == "schedule"'
+ when: on_success
+ # Forked project branch / pre-merge pipeline not for Marge bot
+ - if: &is-forked-branch-or-pre-merge-not-for-marge '$CI_PROJECT_NAMESPACE != "virgl" || ($GITLAB_USER_LOGIN != "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event")'
+ when: manual
+ # Pipeline runs for the main branch of the upstream virglrenderer project
+ - if: &is-virglrenderer-main '$CI_PROJECT_NAMESPACE == "virgl" && $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH && $CI_COMMIT_BRANCH'
+ when: always
+ # Post-merge pipeline
+ - if: &is-post-merge '$CI_PROJECT_NAMESPACE == "virgl" && $CI_COMMIT_BRANCH'
+ when: on_success
+ # Pre-merge pipeline for Marge Bot
+ - if: &is-pre-merge-for-marge '$GITLAB_USER_LOGIN == "marge-bot" && $CI_PIPELINE_SOURCE == "merge_request_event"'
+ when: on_success
+
+stages:
+ - build
+ - sanity test
+ - test
+
+.set-image:
+ variables:
+ MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_TEMPLATES_COMMIT}"
+ image: "$MESA_IMAGE"
+
+.set-image-base-tag:
+ extends:
+ - .set-image
+ variables:
+ MESA_IMAGE: "$CI_REGISTRY_IMAGE/${MESA_IMAGE_PATH}:${MESA_IMAGE_TAG}--${MESA_BASE_TAG}--${MESA_TEMPLATES_COMMIT}"
+
+debian/x86_build:
+ stage: build
+ extends:
+ - .set-image-base-tag
+ variables:
+ MESA_IMAGE_PATH: ${DEBIAN_X86_BUILD_IMAGE_PATH}
+ MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG}
+ MINIO_ARTIFACT_NAME: virgl-amd64
+ script:
+ - .gitlab-ci/meson/build.sh
+ artifacts:
+ name: "virgl_${CI_JOB_NAME}"
+ when: always
+ paths:
+ - install/
+ - results/
+ rules:
+ - if: *is-scheduled-pipeline
+ when: on_success
+ - if: *is-post-merge
+ when: never
+ - if: *is-forked-branch-or-pre-merge-not-for-marge
+ when: manual
+ - if: *is-pre-merge-for-marge
+ when: on_success
+ - when: never
+
+#
+# Sanity test jobs
+#
+
+.make_check_base:
+ stage: sanity test
+ extends: debian/x86_build
+ needs: []
+ artifacts:
+ when: always
+ paths:
+ - results/
+
+mesa check meson:
+ extends: .make_check_base
+ variables:
+ TEST_SUITE: make-check-meson
+
+make check clang-fuzzer:
+ extends: .make_check_base
+ variables:
+ TEST_SUITE: make-check-clang-fuzzer
+ CC: clang
+ EXTRA_OPTION: "-D fuzzer=true"
+
+make check trace-stderr:
+ extends: .make_check_base
+ variables:
+ TEST_SUITE: make-check-trace-stderr
+ EXTRA_OPTION: "-D tracing=stderr"
+
+make check venus:
+ extends: .make_check_base
+ variables:
+ TEST_SUITE: make-check-venus
+
+#
+# Piglit & dEQP test jobs
+#
+
+.use-gl-test-image:
+ stage: test
+ extends:
+ - .set-image-base-tag
+ before_script:
+ - echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}"
+ - unset CI_JOB_JWT
+ - export CI_JOB_NAME_SANITIZED="$(echo $CI_JOB_NAME | tr ' /' '--')"
+ variables:
+ CI_JOB_JWT_FILE: /minio_jwt
+ MESA_IMAGE_PATH: ${DEBIAN_X86_TEST_IMAGE_GL_PATH}
+ MESA_IMAGE_TAG: ${DEBIAN_X86_TEST_GL_TAG}
+ script:
+ - export DEQP_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}"
+ - export PIGLIT_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}"
+ - .gitlab-ci/container/debian/x86_test.sh
+ artifacts:
+ name: "virgl-result"
+ when: always
+ paths:
+ - results/
+ reports:
+ junit: results/junit.xml
+ needs:
+ - job: debian/x86_build
+ artifacts: true
+ rules:
+ - if: *is-post-merge
+ when: never
+ - when: on_success
+
+.use-vk-test-image:
+ stage: test
+ extends:
+ - .set-image-base-tag
+ before_script:
+ - echo -n "${CI_JOB_JWT}" > "${CI_JOB_JWT_FILE}"
+ - unset CI_JOB_JWT
+ - export CI_JOB_NAME_SANITIZED="$(echo $CI_JOB_NAME | tr ' /' '--')"
+ variables:
+ CI_JOB_JWT_FILE: /minio_jwt
+ MESA_IMAGE_PATH: ${DEBIAN_X86_TEST_IMAGE_VK_PATH}
+ MESA_IMAGE_TAG: ${DEBIAN_X86_TEST_VK_TAG}
+ script:
+ - export DEQP_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}"
+ - export PIGLIT_RESULTS_DIR="results/${CI_JOB_NAME_SANITIZED}"
+ - .gitlab-ci/container/debian/x86_test.sh
+ artifacts:
+ name: "venus-result"
+ when: always
+ paths:
+ - results/
+ reports:
+ junit: results/junit.xml
+ needs:
+ - job: debian/x86_build
+ artifacts: true
+ rules:
+ - if: *is-post-merge
+ when: never
+ - when: on_success
+
+.gl-host-test:
+ extends:
+ - .use-gl-test-image
+ variables:
+ GALLIUM_DRIVER: virpipe
+ GALLIVM_PERF: nopt
+
+.gl-virt-test:
+ extends:
+ - .use-gl-test-image
+ variables:
+ GALLIUM_DRIVER: virgl
+ CROSVM_GALLIUM_DRIVER: llvmpipe
+ GALLIVM_PERF: "nopt,no_quad_lod"
+
+.deqp-host:
+ extends:
+ - .gl-host-test
+
+.piglit-host:
+ extends:
+ - .gl-host-test
+ variables: &piglit-host-variables
+ PIGLIT_PLATFORM: surfaceless_egl
+ PIGLIT_NO_WINDOW: 1
+ PIGLIT_PROFILES: gpu
+
+.deqp-virt:
+ extends:
+ - .gl-virt-test
+ variables:
+ # There will be FDO_CI_CONCURRENT Crosvm processes, so each should use a single thread
+ LP_NUM_THREADS: 1
+
+.piglit-virt:
+ extends:
+ - .gl-virt-test
+ variables:
+ <<: *piglit-host-variables
+ # Use all threads for rendering and only run one job at a time
+ LP_NUM_THREADS: ${FDO_CI_CONCURRENT}
+ FORCE_FDO_CI_CONCURRENT: 1
+
+# Host runners (virpipe/vtest)
+
+deqp-gl-host:
+ extends:
+ - .deqp-host
+ variables:
+ DEQP_SUITE: virgl-gl
+ GPU_VERSION: virgl-gl
+
+deqp-gles-host:
+ extends:
+ - .deqp-host
+ variables:
+ VIRGL_HOST_API: GLES
+ DEQP_SUITE: virgl-gles
+ GPU_VERSION: virgl-gles
+
+piglit-gl-host:
+ extends:
+ - .piglit-host
+ variables:
+ GPU_VERSION: virgl-gl
+
+piglit-gles-host:
+ extends:
+ - .piglit-host
+ variables:
+ VIRGL_HOST_API: GLES
+ GPU_VERSION: virgl-gles
+
+# Virt runners (virgl/crosvm)
+
+deqp-gl-virt:
+ extends:
+ - .deqp-virt
+ variables:
+ DEQP_SUITE: virgl-gl
+ GPU_VERSION: virgl-gl
+ CROSVM_GPU_ARGS: &deqp-gl-crosvm-gpu-args "gles=false,backend=virglrenderer,egl=true,surfaceless=true,width=1024,height=768"
+
+deqp-gles-virt:
+ extends:
+ - .deqp-virt
+ variables:
+ VIRGL_HOST_API: GLES
+ DEQP_SUITE: virgl-gles
+ GPU_VERSION: virgl-gles
+ CROSVM_GPU_ARGS: &deqp-gles-crosvm-gpu-args "gles=true,backend=virglrenderer,egl=true,surfaceless=true,width=1024,height=768"
+
+piglit-gl-virt:
+ extends:
+ - .piglit-virt
+ parallel: 3
+ variables:
+ GPU_VERSION: virgl-gl
+ CROSVM_GPU_ARGS: *deqp-gl-crosvm-gpu-args
+
+piglit-gles-virt:
+ extends:
+ - .piglit-virt
+ parallel: 3
+ variables:
+ VIRGL_HOST_API: GLES
+ GPU_VERSION: virgl-gles
+ CROSVM_GPU_ARGS: *deqp-gles-crosvm-gpu-args
+
+virgl-traces:
+ extends:
+ - .piglit-virt
+ variables:
+ GPU_VERSION: virgl-gl
+ CROSVM_GPU_ARGS: *deqp-gl-crosvm-gpu-args
+ EGL_PLATFORM: "surfaceless"
+ PIGLIT_REPLAY_DESCRIPTION_FILE: "${CI_PROJECT_DIR}/install/traces-virgl.yml"
+ PIGLIT_REPLAY_DEVICE_NAME: "gl-virgl"
+ PIGLIT_RESULTS: "virgl-replay"
+
+.venus-lavapipe-test:
+ extends:
+ - .use-vk-test-image
+ variables:
+ VK_DRIVER: virtio
+ CROSVM_GALLIUM_DRIVER: "llvmpipe"
+ CROSVM_VK_DRIVER: "lvp"
+
+venus-lavapipe:
+ extends:
+ - .venus-lavapipe-test
+ variables:
+ DEQP_FRACTION: 15
+ DEQP_SUITE: venus
+ GPU_VERSION: venus
+ LP_NUM_THREADS: 1 # There will be FDO_CI_CONCURRENT Crosvm processes, so each should use a single thread
+ FDO_CI_CONCURRENT: 32 # Seems to be the fastest value, more gets actually slower
+ CROSVM_MEMORY: 3072
+ CROSVM_GPU_ARGS: "vulkan=true,gles=false,backend=virglrenderer,egl=true,surfaceless=true"
+ tags:
+ - mesa-swrast