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: 906183 MESA_PROJECT_PATH: mesa/mesa STORAGE_HOST: s3.freedesktop.org CI_REGISTRY_IMAGE: "harbor.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: 9f0eb526291fe74651fe1430cbd2397f4c0a819b 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: 926e97d5df203fe19a2498e6a84335dedbab382e 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_64_build: stage: build extends: - .set-image-base-tag variables: MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} S3_ARTIFACT_NAME: virgl-x86_64 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 debian/x86_64_build_msm: stage: build extends: - .set-image-base-tag variables: MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} MINIO_ARTIFACT_NAME: virgl-amd64 EXTRA_OPTION: > -D drm=enabled -D drm-msm-experimental=true script: - .gitlab-ci/meson/build.sh artifacts: name: "virgl_${CI_JOB_NAME}" when: always paths: - install/ - results/ rules: - changes: - src/drm/**/* when: on_success - 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 debian/x86_64_build_minigbm: stage: build extends: - .set-image-base-tag variables: MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} MINIO_ARTIFACT_NAME: virgl-amd64 EXTRA_OPTION: > -D minigbm_allocation=true script: - .gitlab-ci/meson/build.sh artifacts: name: "virgl_${CI_JOB_NAME}" when: always paths: - install/ - results/ rules: - changes: - src/vrend_winsys_gbm.* - src/vrend_winsys_egl.c - src/vrend_renderer.c when: on_success - 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 debian/x86_64_build_tracing: stage: build extends: - .set-image-base-tag variables: MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_IMAGE_PATH} MESA_IMAGE_TAG: ${DEBIAN_BUILD_TAG} MINIO_ARTIFACT_NAME: virgl-amd64 WRAP_DEBUG: default DEBIAN_FRONTEND: noninteractive script: - apt-get update && apt-get install -y libsysprof-4-dev - TRACING_BACKEND=percetto .gitlab-ci/meson/build.sh - TRACING_BACKEND=perfetto .gitlab-ci/meson/build.sh - TRACING_BACKEND=sysprof .gitlab-ci/meson/build.sh - TRACING_BACKEND=stderr .gitlab-ci/meson/build.sh artifacts: name: "virgl_${CI_JOB_NAME}" when: always paths: - install/ - results/ rules: - changes: - src/virgl_util.h - src/virgl_util.c when: on_success - 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 # FIXME: Mesa's `debian/x86_build-mingw` job is turned off until gets # fixed on Debian 12. Disable here as a side effect. .debian/mingw32-x86_64: stage: build extends: - .set-image-base-tag variables: MESA_IMAGE_PATH: ${DEBIAN_X86_64_BUILD_MINGW_IMAGE_PATH} MESA_IMAGE_TAG: ${DEBIAN_BUILD_MINGW_TAG} EXTRA_OPTION: > --cross-file=.gitlab-ci/x86_64-w64-mingw32 -Dplatforms= -Dtests=false -Drender-server=false -Dvenus=false script: - git clone --depth 1 https://github.com/anholt/libepoxy.git && pushd libepoxy && meson setup _build --cross-file=../.gitlab-ci/x86_64-w64-mingw32 -Dprefix=/usr/x86_64-w64-mingw32 && meson install -C _build && popd - .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_64_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 LLVM_VERSION: 15 CC: clang-${LLVM_VERSION} 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_64_TEST_IMAGE_GL_PATH} MESA_IMAGE_TAG: ${DEBIAN_X86_64_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_64_test.sh artifacts: name: "virgl-result" when: always paths: - results/ reports: junit: results/junit.xml needs: - job: debian/x86_64_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_64_TEST_IMAGE_VK_PATH} MESA_IMAGE_TAG: ${DEBIAN_X86_64_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_64_test.sh artifacts: name: "venus-result" when: always paths: - results/ reports: junit: results/junit.xml needs: - job: debian/x86_64_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"