diff options
Diffstat (limited to '.gitlab-ci.yml')
-rw-r--r-- | .gitlab-ci.yml | 349 |
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 |