include:
    # Metadata shared my many jobs
    - local: .gitlab/rules.yml
    - local: .gitlab/artifacts.yml
    - local: .gitlab/upload.yml
    - local: .gitlab/vtk-mixins.yml
    - local: .gitlab/warning-policy.yml

    # OS builds.
    - local: .gitlab/os-linux.yml
    - local: .gitlab/os-macos.yml
    - local: .gitlab/os-windows.yml

stages:
    - quick
    - build
    - test
    - test-ext
    - package
    - release-prep
    - upload

################################################################################
# Job declarations
#
# Each job must pull in each of the following keys:
#
#   - a "base image"
#   - a build script
#   - tags for the jobs
#     - already provided for upload and CI update jobs
#   - rules for when to run the job
#
# Additionally, jobs may also contain:
#
#   - artifacts
#   - needs jobs for required jobs
################################################################################

# Linux

## Dummy
# A job that always succeeds so that we pass the robot check when all jobs are
# skipped due to certain rules

dummy:build:
    stage: build
    image: alpine:latest
    tags:
        - build
        - docker
        - linux-x86_64
    rules:
        - if: '$CI_MERGE_REQUEST_ID'
          when: on_success
        - if: '$CI_PROJECT_PATH == "vtk/vtk"'
          when: on_success
        - when: never
    script:
        - echo "dummy"
    variables:
        GIT_STRATEGY: none
    needs: []

## readthedocs documentation build
readthedocs:build:
    stage: test
    extends:
        - .readthedocs
        - .linux_builder_tags
        - .make_sphinx_docs
        - .sphinx_artifacts
        - .run_automatically
    needs: []
    timeout: 15 minutes

## Basic builds

el7-mindeps-debug-python-qt5:build:
    extends:
        - .el7_mindeps_debug_python_qt5
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    stage: quick

# Disable testing for now. Even with a modern Mesa and the llvmpipe backend,
# modern enough OpenGL is just not working in CI. Rather than disabling just
# about everything in the test suite, just skip testing altogether.
# el7-mindeps-debug-python-qt5:test:
#     extends:
#         - .el7_mindeps_debug_python_qt5
#         - .cmake_test_linux
#         - .linux_tester_tags
#         - .cmake_test_artifacts
#         - .run_automatically
#     needs:
#         - el7-mindeps-python-qt5:build

el8-python:build:
    extends:
        - .el8_icc_python
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    needs: []

el8-python:test:
    extends:
        - .el8_icc_python
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - el8-python:build

fedora39-mpi-renderless:build:
    extends:
        - .fedora39_mpi_renderless
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    needs: []

fedora39-mpi-renderless:test:
    extends:
        - .fedora39_mpi_renderless
        - .cmake_test_linux
        - .linux_builder_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-renderless:build

vtk:fedora39-mpi-renderless:test-ext:
    extends:
        - .fedora39_mpi_renderless_ext_vtk
        - .cmake_test_external_linux
        - .linux_builder_tags
        - .cmake_junit_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-renderless:test

fedora39-cuda-mpi:build:
    extends:
        - .fedora39_cuda_mpi
        - .cmake_build_linux
        - .cmake_build_artifacts
        - .linux_builder_tags
        - .run_manually
    variables:
        CTEST_MAX_PARALLELISM: 4
    timeout: 8 hours
    needs: []

fedora39-cuda-mpi:test:
    extends:
        - .fedora39_cuda_mpi
        - .cmake_test_linux
        - .cmake_test_artifacts
        - .linux_cuda_tester_tags
        - .run_automatically
    needs:
        - fedora39-cuda-mpi:build
    variables:
        CTEST_MAX_PARALLELISM: 8
    timeout: 2 hours

vtk:fedora39-cuda-mpi:test-ext:
    extends:
        - .fedora39_cuda_mpi_ext_vtk
        - .cmake_test_external_linux
        - .cmake_tidy_artifacts
        - .linux_cuda_tester_tags
        - .run_automatically
    needs:
        - fedora39-cuda-mpi:test
    variables:
        CTEST_MAX_PARALLELISM: 8
    timeout: 150 minutes

fedora39-helide-mpi-python-qt-tbb:build:
    extends:
        - .fedora39_helide_mpi_python_qt_tbb
        - .cmake_build_linux
        - .linux_fast_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    stage: quick

fedora39-helide-mpi-python-qt-tbb:test:
    extends:
        - .fedora39_helide_mpi_python_qt_tbb
        - .cmake_test_linux
        - .linux_fast_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-helide-mpi-python-qt-tbb:build

fedora39-mpi-offscreen-osmesa-python:test:
    extends:
        - .fedora39_mpi_offscreen_osmesa_python
        - .cmake_test_linux
        - .linux_builder_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-python-qt-tbb:build

vtk:fedora39-mpi-offscreen-osmesa-python:test-ext:
    extends:
        - .fedora39_mpi_offscreen_osmesa_python_ext_vtk
        - .cmake_test_external_linux
        - .linux_builder_tags
        - .cmake_junit_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-offscreen-osmesa-python:test
    timeout: 90 minutes

fedora39-mpi-ospray-python-qt-tbb:build:
    extends:
        - .fedora39_mpi_ospray_python_qt_tbb
        - .cmake_build_linux
        - .linux_fast_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    stage: quick

fedora39-mpi-ospray-python-qt-tbb:test:
    extends:
        - .fedora39_mpi_ospray_python_qt_tbb
        - .cmake_test_linux
        - .linux_fast_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-ospray-python-qt-tbb:build

fedora39-java8:build:
    extends:
        - .fedora39_java
        - .cmake_build_java_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    # The Java build extends the build time considerably.
    timeout: 4 hours
    variables:
      VTK_JAVA_VERSION: 8
    needs: []

fedora39-java11:build:
    extends:
        - .fedora39_java
        - .cmake_build_java_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    # The Java build extends the build time considerably.
    timeout: 4 hours
    variables:
      VTK_JAVA_VERSION: 11
    needs: []

fedora39-mpi-python-qt-tbb:build:
    extends:
        - .fedora39_mpi_python_qt_tbb
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    needs: []

fedora39-mpi-python-qt-tbb:test:
    extends:
        - .fedora39_mpi_python_qt_tbb
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-python-qt-tbb:build

vtk:fedora39-mpi-python-qt-tbb:test-ext:
    extends:
        - .fedora39_mpi_python_qt_tbb_ext_vtk
        - .cmake_test_external_linux
        - .linux_tester_tags
        - .cmake_junit_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-python-qt-tbb:test

fedora39-mpi-python-qt-stdthread:test:
    extends:
        - .fedora39_mpi_python_qt_stdthread
        - .smp_backend_stdthread_env_variable
        - .ctest_new_cdash_submission
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-python-qt-tbb:build

fedora39-mangling:build:
    extends:
        - .fedora39_mangling
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    stage: quick

fedora39-mangling:test:
    extends:
        - .fedora39_mangling
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mangling:build

fedora39-mpi-python-vtkmoverride:build:
    extends:
        - .fedora39_mpi_python_vtkmoverride
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    needs: []

fedora39-mpi-python-vtkmoverride:test:
    extends:
        - .fedora39_mpi_python_vtkmoverride
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - fedora39-mpi-python-vtkmoverride:build

## WebGPU backend
fedora39-webgpu:build:
    extends:
        - .fedora39_webgpu
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 90 minutes
    needs: []

fedora39-webgpu:test:
    extends:
        - .fedora39_webgpu
        - .cmake_test_linux
        - .linux_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    timeout: 90 minutes
    needs:
        - fedora39-webgpu:build

## Cross compile for the 'wasm32-emscripten' architecture on a linux host
wasm32-emscripten-linux:build:
    extends:
        - .wasm32_emscripten_linux
        - .cmake_build_wasm_emscripten_linux
        - .linux_builder_tags
        - .cmake_wasm_build_artifacts
        - .run_manually
    needs: []
    stage: quick

wasm32-emscripten:package:
    extends:
        - .wasm32_emscripten_linux
        - .cmake_package_wasm_emscripten_linux
        - .linux_packager_tags
        - .cmake_webassembly_artifacts
        - .run_automatically
    needs:
        - wasm32-emscripten-linux:build

wasm32-emscripten:vtk:upload:
    extends:
        - .wasm32_emscripten_linux
        - .generic_vtk_wasm_emscripten_linux_upload
        - .weekly_upload_only
    needs:
        - wasm32-emscripten:package

## Cross compile for the 'wasm64-emscripten' architecture on a linux host
wasm64-emscripten-linux:build:
    extends:
        - .wasm64_emscripten_linux
        - .cmake_build_wasm_emscripten_linux
        - .linux_builder_tags
        - .cmake_wasm_build_artifacts
        - .run_manually
    needs: []

wasm64-emscripten:package:
    extends:
        - .wasm64_emscripten_linux
        - .cmake_package_wasm_emscripten_linux
        - .linux_packager_tags
        - .cmake_webassembly_artifacts
        - .run_automatically
    needs:
        - wasm64-emscripten-linux:build

wasm64-emscripten:vtk:upload:
    extends:
        - .wasm64_emscripten_linux
        - .generic_vtk_wasm_emscripten_linux_upload
        - .weekly_upload_only
    needs:
        - wasm64-emscripten:package

## Test the 'wasm32-emscripten' architecture on a windows host
wasm32-emscripten-windows-chrome:test-ext:
    extends:
        - .wasm32_emscripten_windows_chrome_ext_vtk
        - .cmake_test_wasm_emscripten_windows_ext
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - wasm32-emscripten-linux:build

## Test the 'wasm64-emscripten' architecture on a windows host
wasm64-emscripten-windows-chrome:test-ext:
    extends:
        - .wasm64_emscripten_windows_chrome_ext_vtk
        - .cmake_test_wasm_emscripten_windows_ext
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - wasm64-emscripten-linux:build

## Python wheel builds

wheel-linux-python38-x86_64:build:
    extends:
        - .wheel_linux38_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-linux-python38-x86_64:test:
    extends:
        - .wheel_linux38_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python38-x86_64:test-x11:
    extends:
        - .wheel_linux38_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python38-x86_64-osmesa:test:
    extends:
        - .wheel_linux38_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python38-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux38_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python38-x86_64-egl:test:
    extends:
        - .wheel_linux38_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python38-x86_64-egl:test-x11:
    extends:
        - .wheel_linux38_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python38-x86_64:build

wheel-linux-python39-x86_64:build:
    extends:
        - .wheel_linux39_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-linux-python39-x86_64:test:
    extends:
        - .wheel_linux39_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python39-x86_64:test-x11:
    extends:
        - .wheel_linux39_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python39-x86_64-osmesa:test:
    extends:
        - .wheel_linux39_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python39-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux39_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python39-x86_64-egl:test:
    extends:
        - .wheel_linux39_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python39-x86_64-egl:test-x11:
    extends:
        - .wheel_linux39_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python39-x86_64:build

wheel-linux-python310-x86_64:build:
    extends:
        - .wheel_linux310_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-linux-python310-x86_64:test:
    extends:
        - .wheel_linux310_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python310-x86_64:test-x11:
    extends:
        - .wheel_linux310_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python310-x86_64-osmesa:test:
    extends:
        - .wheel_linux310_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python310-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux310_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python310-x86_64-egl:test:
    extends:
        - .wheel_linux310_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python310-x86_64-egl:test-x11:
    extends:
        - .wheel_linux310_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python310-x86_64:build

wheel-linux-python311-x86_64:build:
    extends:
        - .wheel_linux311_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-linux-python311-x86_64:test:
    extends:
        - .wheel_linux311_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python311-x86_64:test-x11:
    extends:
        - .wheel_linux311_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python311-x86_64-osmesa:test:
    extends:
        - .wheel_linux311_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python311-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux311_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python311-x86_64-egl:test:
    extends:
        - .wheel_linux311_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python311-x86_64-egl:test-x11:
    extends:
        - .wheel_linux311_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python311-x86_64:build

wheel-linux-python312-x86_64:build:
    extends:
        - .wheel_linux312_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .merged_only
    needs: []

wheel-linux-python312-x86_64:test:
    extends:
        - .wheel_linux312_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python312-x86_64:test-x11:
    extends:
        - .wheel_linux312_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python312-x86_64-osmesa:test:
    extends:
        - .wheel_linux312_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python312-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux312_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python312-x86_64-egl:test:
    extends:
        - .wheel_linux312_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python312-x86_64-egl:test-x11:
    extends:
        - .wheel_linux312_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python312-x86_64:build

wheel-linux-python313-x86_64:build:
    extends:
        - .wheel_linux313_x86_64
        - .cmake_build_wheel_linux
        - .linux_builder_tags
        - .cmake_wheel_artifacts
        - .run_manually
    needs: []

wheel-linux-python313-x86_64:test:
    extends:
        - .wheel_linux313_x86_64
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel-linux-python313-x86_64:test-x11:
    extends:
        - .wheel_linux313_x86_64
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel-linux-python313-x86_64-osmesa:test:
    extends:
        - .wheel_linux313_x86_64_osmesa
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel-linux-python313-x86_64-osmesa:test-x11:
    extends:
        - .wheel_linux313_x86_64_osmesa
        - .cmake_test_wheel_linux_x11
        - .linux_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel-linux-python313-x86_64-egl:test:
    extends:
        - .wheel_linux313_x86_64_egl
        - .cmake_test_wheel_linux
        - .linux_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel-linux-python313-x86_64-egl:test-x11:
    extends:
        - .wheel_linux313_x86_64_egl
        - .cmake_test_wheel_linux_x11
        - .linux_tester_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-linux-python313-x86_64:build

wheel:pypi:upload:
    extends:
        - .pypi_upload
        - .tag_only
    needs:
        - wheel-linux-python38-x86_64:build
        - job: wheel-linux-python38-x86_64:test
          artifacts: false
        - job: wheel-linux-python38-x86_64:test-x11
          artifacts: false
        - wheel-linux-python39-x86_64:build
        - job: wheel-linux-python39-x86_64:test
          artifacts: false
        - job: wheel-linux-python39-x86_64:test-x11
          artifacts: false
        - wheel-linux-python310-x86_64:build
        - job: wheel-linux-python310-x86_64:test
          artifacts: false
        - job: wheel-linux-python310-x86_64:test-x11
          artifacts: false
        - wheel-linux-python311-x86_64:build
        - job: wheel-linux-python311-x86_64:test
          artifacts: false
        - job: wheel-linux-python311-x86_64:test-x11
          artifacts: false
        - wheel-linux-python312-x86_64:build
        - job: wheel-linux-python312-x86_64:test
          artifacts: false
        - job: wheel-linux-python312-x86_64:test-x11
          artifacts: false
        - wheel-linux-python313-x86_64:build
        - job: wheel-linux-python313-x86_64:test
          artifacts: false
        - job: wheel-linux-python313-x86_64:test-x11
          artifacts: false
        - wheel-macos-python38-x86_64:build
        - job: wheel-macos-python38-x86_64:test
          artifacts: false
        - wheel-macos-python39-arm64:build
        - job: wheel-macos-python39-arm64:test
          artifacts: false
        - wheel-macos-python39-x86_64:build
        - job: wheel-macos-python39-x86_64:test
          artifacts: false
        - wheel-macos-python310-arm64:build
        - job: wheel-macos-python310-arm64:test
          artifacts: false
        - wheel-macos-python310-x86_64:build
        - job: wheel-macos-python310-x86_64:test
          artifacts: false
        - wheel-macos-python311-arm64:build
        - job: wheel-macos-python311-arm64:test
          artifacts: false
        - wheel-macos-python311-x86_64:build
        - job: wheel-macos-python311-x86_64:test
          artifacts: false
        - wheel-macos-python312-arm64:build
        - job: wheel-macos-python312-arm64:test
          artifacts: false
        - wheel-macos-python312-x86_64:build
        - job: wheel-macos-python312-x86_64:test
          artifacts: false
        - wheel-macos-python313-arm64:build
        - job: wheel-macos-python313-arm64:test
          artifacts: false
        - wheel-macos-python313-x86_64:build
        - job: wheel-macos-python313-x86_64:test
          artifacts: false
        - wheel-windows-python38-x86_64:build
        - job: wheel-windows-python38-x86_64:test
          artifacts: false
        - wheel-windows-python39-x86_64:build
        - job: wheel-windows-python39-x86_64:test
          artifacts: false
        - wheel-windows-python310-x86_64:build
        - job: wheel-windows-python310-x86_64:test
          artifacts: false
        - wheel-windows-python311-x86_64:build
        - job: wheel-windows-python311-x86_64:test
          artifacts: false
        - wheel-windows-python312-x86_64:build
        - job: wheel-windows-python312-x86_64:test
          artifacts: false
        - wheel-windows-python313-x86_64:build
        - job: wheel-windows-python313-x86_64:test
          artifacts: false

wheel:vtk:upload:
    extends:
        - .pypi_vtk_upload
        - .weekly_upload_only
    needs:
        - wheel-linux-python38-x86_64:build
        - job: wheel-linux-python38-x86_64:test
          artifacts: false
        - job: wheel-linux-python38-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python39-x86_64:build
        - job: wheel-linux-python39-x86_64:test
          artifacts: false
        - job: wheel-linux-python39-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python310-x86_64:build
        - job: wheel-linux-python310-x86_64:test
          artifacts: false
        - job: wheel-linux-python310-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python311-x86_64:build
        - job: wheel-linux-python311-x86_64:test
          artifacts: false
        - job: wheel-linux-python311-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python312-x86_64:build
        - job: wheel-linux-python312-x86_64:test
          artifacts: false
        - job: wheel-linux-python312-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python313-x86_64:build
        - job: wheel-linux-python313-x86_64:test
          artifacts: false
        - job: wheel-linux-python313-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test-x11
          artifacts: false
        - wheel-macos-python38-x86_64:build
        - job: wheel-macos-python38-x86_64:test
          artifacts: false
        - wheel-macos-python39-arm64:build
        - job: wheel-macos-python39-arm64:test
          artifacts: false
        - wheel-macos-python39-x86_64:build
        - job: wheel-macos-python39-x86_64:test
          artifacts: false
        - wheel-macos-python310-arm64:build
        - job: wheel-macos-python310-arm64:test
          artifacts: false
        - wheel-macos-python310-x86_64:build
        - job: wheel-macos-python310-x86_64:test
          artifacts: false
        - wheel-macos-python311-arm64:build
        - job: wheel-macos-python311-arm64:test
          artifacts: false
        - wheel-macos-python311-x86_64:build
        - job: wheel-macos-python311-x86_64:test
          artifacts: false
        - wheel-macos-python312-arm64:build
        - job: wheel-macos-python312-arm64:test
          artifacts: false
        - wheel-macos-python312-x86_64:build
        - job: wheel-macos-python312-x86_64:test
          artifacts: false
        - wheel-macos-python313-arm64:build
        - job: wheel-macos-python313-arm64:test
          artifacts: false
        - wheel-macos-python313-x86_64:build
        - job: wheel-macos-python313-x86_64:test
          artifacts: false
        - wheel-windows-python38-x86_64:build
        - job: wheel-windows-python38-x86_64:test
          artifacts: false
        - job: wheel-windows-python38-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python39-x86_64:build
        - job: wheel-windows-python39-x86_64:test
          artifacts: false
        - job: wheel-windows-python39-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python310-x86_64:build
        - job: wheel-windows-python310-x86_64:test
          artifacts: false
        - job: wheel-windows-python310-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python311-x86_64:build
        - job: wheel-windows-python311-x86_64:test
          artifacts: false
        - job: wheel-windows-python311-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python312-x86_64:build
        - job: wheel-windows-python312-x86_64:test
          artifacts: false
        - job: wheel-windows-python312-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python313-x86_64:build
        - job: wheel-windows-python313-x86_64:test
          artifacts: false
        - job: wheel-windows-python313-x86_64-osmesa:test
          artifacts: false

wheel-sdk:upload:
    extends:
        - .rsync_upload_wheel_sdk
        - .weekly_upload_only
    needs:
        - wheel-linux-python38-x86_64:build
        - job: wheel-linux-python38-x86_64:test
          artifacts: false
        - job: wheel-linux-python38-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python39-x86_64:build
        - job: wheel-linux-python39-x86_64:test
          artifacts: false
        - job: wheel-linux-python39-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python310-x86_64:build
        - job: wheel-linux-python310-x86_64:test
          artifacts: false
        - job: wheel-linux-python310-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python311-x86_64:build
        - job: wheel-linux-python311-x86_64:test
          artifacts: false
        - job: wheel-linux-python311-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python312-x86_64:build
        - job: wheel-linux-python312-x86_64:test
          artifacts: false
        - job: wheel-linux-python312-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python313-x86_64:build
        - job: wheel-linux-python313-x86_64:test
          artifacts: false
        - job: wheel-linux-python313-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test-x11
          artifacts: false
        - wheel-macos-python38-x86_64:build
        - job: wheel-macos-python38-x86_64:test
          artifacts: false
        - wheel-macos-python39-arm64:build
        - job: wheel-macos-python39-arm64:test
          artifacts: false
        - wheel-macos-python39-x86_64:build
        - job: wheel-macos-python39-x86_64:test
          artifacts: false
        - wheel-macos-python310-arm64:build
        - job: wheel-macos-python310-arm64:test
          artifacts: false
        - wheel-macos-python310-x86_64:build
        - job: wheel-macos-python310-x86_64:test
          artifacts: false
        - wheel-macos-python311-arm64:build
        - job: wheel-macos-python311-arm64:test
          artifacts: false
        - wheel-macos-python311-x86_64:build
        - job: wheel-macos-python311-x86_64:test
          artifacts: false
        - wheel-macos-python312-arm64:build
        - job: wheel-macos-python312-arm64:test
          artifacts: false
        - wheel-macos-python312-x86_64:build
        - job: wheel-macos-python312-x86_64:test
          artifacts: false
        - wheel-macos-python313-arm64:build
        - job: wheel-macos-python313-arm64:test
          artifacts: false
        - wheel-macos-python313-x86_64:build
        - job: wheel-macos-python313-x86_64:test
          artifacts: false
        - wheel-windows-python38-x86_64:build
        - job: wheel-windows-python38-x86_64:test
          artifacts: false
        - job: wheel-windows-python38-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python39-x86_64:build
        - job: wheel-windows-python39-x86_64:test
          artifacts: false
        - job: wheel-windows-python39-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python310-x86_64:build
        - job: wheel-windows-python310-x86_64:test
          artifacts: false
        - job: wheel-windows-python310-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python311-x86_64:build
        - job: wheel-windows-python311-x86_64:test
          artifacts: false
        - job: wheel-windows-python311-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python312-x86_64:build
        - job: wheel-windows-python312-x86_64:test
          artifacts: false
        - job: wheel-windows-python312-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python313-x86_64:build
        - job: wheel-windows-python313-x86_64:test
          artifacts: false
        - job: wheel-windows-python313-x86_64-osmesa:test
          artifacts: false
    variables:
        RSYNC_SOURCE: build/*-wheel-sdk-*.tar.xz
        RSYNC_DESTINATION: wheel-sdks/

## Static analysis builds

fedora39-tidy:build:
    extends:
        - .fedora39_tidy
        - .cmake_build_linux
        - .linux_fast_builder_tags
        - .cmake_tidy_artifacts
        - .run_manually
    # Use fast builder tag as tidy can takes a very long time on slow machine
    # Move it to the test stage so that the build stage can be required to be
    # green. `clang-tidy` just takes too long to require for every MR prior to
    # merging. See https://github.com/ejfitzgerald/clang-tidy-cache/issues/5
    # which should help performance immensely.
    stage: test
    needs: []
    # clang-tidy really hampers compilation cache improvements, so it takes
    # longer.
    timeout: 7 hours

## Sanitizer builds

# fedora39-asan:build:
#     extends:
#         - .fedora39_asan
#         - .cmake_build_linux
#         - .linux_builder_tags
#         - .cmake_build_artifacts
#         - .run_manually
#     needs: []
#
# fedora39-asan:test:
#     extends:
#         - .fedora39_asan
#         - .cmake_memcheck_linux
#         - .linux_tester_priv_tags
#         - .cmake_test_artifacts
#         - .run_automatically
#     needs:
#         - fedora39-asan:build
#
# fedora39-tsan:build:
#     extends:
#         - .fedora39_tsan
#         - .cmake_build_linux
#         - .linux_builder_tags
#         - .cmake_build_artifacts
#         - .run_manually
#     needs: []
#
# fedora39-tsan:test:
#     extends:
#         - .fedora39_tsan
#         - .cmake_memcheck_linux
#         - .linux_tester_priv_tags
#         - .cmake_test_artifacts
#         - .run_automatically
#     needs:
#         - fedora39-tsan:build
#
# fedora39-ubsan:build:
#     extends:
#         - .fedora39_ubsan
#         - .cmake_build_linux
#         - .linux_builder_tags
#         - .cmake_build_artifacts
#         - .run_manually
#     needs: []
#
# fedora39-ubsan:test:
#     extends:
#         - .fedora39_ubsan
#         - .cmake_memcheck_linux
#         - .linux_tester_priv_tags
#         - .cmake_test_artifacts
#         - .run_automatically
#     needs:
#         - fedora39-ubsan:build

## Documentation

documentation:build:
    extends:
        - .fedora39_doxygen_mpi_python_qt_tbb
        - .cmake_build_linux
        - .linux_builder_tags
        - .cmake_doxygen_artifacts
        - .run_manually
    needs: []

documentation:upload:
    extends:
        - .rsync_upload_docs
        - .upload_only
    needs:
        - documentation:build
    variables:
        RSYNC_SOURCE: build/install/usr/share/doc/vtk/doxygen/html/
        RSYNC_DESTINATION: VTKDoxygen/html

source:build:
    extends:
        - .cmake_source_tarballs
        - .cmake_release_artifacts
        - .tag_only

documentation:release-prep:
    extends:
        - .cmake_doc_tarball
        - .cmake_release_artifacts
        - .tag_only
    needs:
        - documentation:build

release-artifacts:upload:
    extends:
        - .rsync_upload_release_artifacts
        - .release_only
    needs:
        - source:build
        - documentation:release-prep
        - wheel-linux-python38-x86_64:build
        - job: wheel-linux-python38-x86_64:test
          artifacts: false
        - job: wheel-linux-python38-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python38-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python39-x86_64:build
        - job: wheel-linux-python39-x86_64:test
          artifacts: false
        - job: wheel-linux-python39-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python39-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python310-x86_64:build
        - job: wheel-linux-python310-x86_64:test
          artifacts: false
        - job: wheel-linux-python310-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python310-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python311-x86_64:build
        - job: wheel-linux-python311-x86_64:test
          artifacts: false
        - job: wheel-linux-python311-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python311-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python312-x86_64:build
        - job: wheel-linux-python312-x86_64:test
          artifacts: false
        - job: wheel-linux-python312-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python312-x86_64-egl:test-x11
          artifacts: false
        - wheel-linux-python313-x86_64:build
        - job: wheel-linux-python313-x86_64:test
          artifacts: false
        - job: wheel-linux-python313-x86_64:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-osmesa:test-x11
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test
          artifacts: false
        - job: wheel-linux-python313-x86_64-egl:test-x11
          artifacts: false
        - wheel-macos-python38-x86_64:build
        - job: wheel-macos-python38-x86_64:test
          artifacts: false
        - wheel-macos-python39-arm64:build
        - job: wheel-macos-python39-arm64:test
          artifacts: false
        - wheel-macos-python39-x86_64:build
        - job: wheel-macos-python39-x86_64:test
          artifacts: false
        - wheel-macos-python310-arm64:build
        - job: wheel-macos-python310-arm64:test
          artifacts: false
        - wheel-macos-python310-x86_64:build
        - job: wheel-macos-python310-x86_64:test
          artifacts: false
        - wheel-macos-python311-arm64:build
        - job: wheel-macos-python311-arm64:test
          artifacts: false
        - wheel-macos-python311-x86_64:build
        - job: wheel-macos-python311-x86_64:test
          artifacts: false
        - wheel-macos-python312-arm64:build
        - job: wheel-macos-python312-arm64:test
          artifacts: false
        - wheel-macos-python312-x86_64:build
        - job: wheel-macos-python312-x86_64:test
          artifacts: false
        - wheel-macos-python313-arm64:build
        - job: wheel-macos-python313-arm64:test
          artifacts: false
        - wheel-macos-python313-x86_64:build
        - job: wheel-macos-python313-x86_64:test
          artifacts: false
        - wheel-windows-python38-x86_64:build
        - job: wheel-windows-python38-x86_64:test
          artifacts: false
        - job: wheel-windows-python38-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python39-x86_64:build
        - job: wheel-windows-python39-x86_64:test
          artifacts: false
        - job: wheel-windows-python39-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python310-x86_64:build
        - job: wheel-windows-python310-x86_64:test
          artifacts: false
        - job: wheel-windows-python310-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python311-x86_64:build
        - job: wheel-windows-python311-x86_64:test
          artifacts: false
        - job: wheel-windows-python311-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python312-x86_64:build
        - job: wheel-windows-python312-x86_64:test
          artifacts: false
        - job: wheel-windows-python312-x86_64-osmesa:test
          artifacts: false
        - wheel-windows-python313-x86_64:build
        - job: wheel-windows-python313-x86_64:test
          artifacts: false
        - job: wheel-windows-python313-x86_64-osmesa:test
          artifacts: false
    variables:
        RSYNC_SOURCE: release/

# macOS

macos-arm64-kits-python-qt:build:
    extends:
        - .macos_arm64_kits_python_qt
        - .cmake_build_macos
        - .macos_arm64_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    stage: quick

macos-arm64-kits-python-qt:test:
    extends:
        - .macos_arm64_kits_python_qt
        - .cmake_test_macos
        - .macos_arm64_builder_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - macos-arm64-kits-python-qt:build

macos-x86_64-kits-python-qt:build:
    extends:
        - .macos_x86_64_kits_python_qt
        - .cmake_build_macos
        - .macos_x86_64_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    # Some of the macOS runners are not very powerful.
    timeout: 150 minutes
    needs: []

macos-x86_64-kits-python-qt:test:
    extends:
        - .macos_x86_64_kits_python_qt
        - .cmake_test_macos
        - .macos_x86_64_builder_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - macos-x86_64-kits-python-qt:build
    timeout: 2 hours

macos-x86_64-kits-python-qt-stdthread:test:
    extends:
        - .macos_x86_64_kits_python_qt_stdthread
        - .smp_backend_stdthread_env_variable
        - .ctest_new_cdash_submission
        - .cmake_test_macos
        - .macos_x86_64_builder_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - macos-x86_64-kits-python-qt:build
    timeout: 2 hours

# FIXME: This is not working because Qt uses @rpath/ for its library
# references. Since we're using a `nonconcurrent` runner for this, we can't
# bake in any paths at build time. However, to install Qt next to it, we need
# to provide the whole thing to avoid building against one Qt and using another
# at runtime. The external testing framework can't provide the rpath because
# tests exists that are just Python scripts, so `vtkpython` needs to work
# standalone.
#
# vtk:macos-x86_64-kits-python-qt:test-ext:
#     extends:
#         - .macos_x86_64_kits_python_qt_ext_vtk
#         - .cmake_test_external_macos
#         - .macos_ext_builder_tags
#         - .cmake_junit_artifacts
#         - .run_automatically
#     needs:
#         - macos-x86_64-kits-python-qt:test

## Python wheel builds

wheel-macos-python38-x86_64:build:
    extends:
        - .wheel_macos38_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    timeout: 90 minutes
    needs: []

wheel-macos-python38-x86_64:test:
    extends:
        - .wheel_macos38_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python38-x86_64:build

wheel-macos-python39-arm64:build:
    extends:
        - .wheel_macos39_arm64
        - .cmake_build_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-macos-python39-arm64:test:
    extends:
        - .wheel_macos39_arm64
        - .cmake_test_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python39-arm64:build

wheel-macos-python39-x86_64:build:
    extends:
        - .wheel_macos39_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    timeout: 90 minutes
    needs: []

wheel-macos-python39-x86_64:test:
    extends:
        - .wheel_macos39_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python39-x86_64:build

wheel-macos-python310-arm64:build:
    extends:
        - .wheel_macos310_arm64
        - .cmake_build_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-macos-python310-arm64:test:
    extends:
        - .wheel_macos310_arm64
        - .cmake_test_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python310-arm64:build

wheel-macos-python310-x86_64:build:
    extends:
        - .wheel_macos310_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    timeout: 90 minutes
    needs: []

wheel-macos-python310-x86_64:test:
    extends:
        - .wheel_macos310_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python310-x86_64:build

wheel-macos-python311-arm64:build:
    extends:
        - .wheel_macos311_arm64
        - .cmake_build_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-macos-python311-arm64:test:
    extends:
        - .wheel_macos311_arm64
        - .cmake_test_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python311-arm64:build

wheel-macos-python311-x86_64:build:
    extends:
        - .wheel_macos311_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    timeout: 90 minutes
    needs: []

wheel-macos-python311-x86_64:test:
    extends:
        - .wheel_macos311_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python311-x86_64:build

wheel-macos-python312-arm64:build:
    extends:
        - .wheel_macos312_arm64
        - .cmake_build_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .merged_only
    needs: []

wheel-macos-python312-arm64:test:
    extends:
        - .wheel_macos312_arm64
        - .cmake_test_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python312-arm64:build

wheel-macos-python312-x86_64:build:
    extends:
        - .wheel_macos312_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .merged_only
    timeout: 90 minutes
    needs: []

wheel-macos-python312-x86_64:test:
    extends:
        - .wheel_macos312_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python312-x86_64:build

wheel-macos-python313-arm64:build:
    extends:
        - .wheel_macos313_arm64
        - .cmake_build_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .run_manually
    needs: []

wheel-macos-python313-arm64:test:
    extends:
        - .wheel_macos313_arm64
        - .cmake_test_wheel_macos
        - .macos_arm64_wheel_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python313-arm64:build

wheel-macos-python313-x86_64:build:
    extends:
        - .wheel_macos313_x86_64
        - .cmake_build_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .run_manually
    timeout: 90 minutes
    needs: []

wheel-macos-python313-x86_64:test:
    extends:
        - .wheel_macos313_x86_64
        - .cmake_test_wheel_macos
        - .macos_x86_64_wheel_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-macos-python313-x86_64:build

# Windows

# The build artifacts are too large. It's unclear how big they actually are at
# the moment, so only upload "tidy" (build only) artifacts right now.
windows-vs2022-debug-mpi-qt:build:
    extends:
        - .windows_vs2022_debug_mpi_qt
        - .cmake_build_windows
        - .windows_builder_tags
        # - .cmake_build_artifacts
        - .cmake_tidy_artifacts
        - .run_manually
    timeout: 180 minutes
    needs: []

# windows-vs2022-debug-mpi-qt:test:
#     extends:
#         - .windows_vs2022_debug_mpi_qt
#         - .cmake_test_windows
#         - .windows_tester_tags
#         - .cmake_test_artifacts
#         - .run_automatically
#     needs:
#         - windows-vs2022-debug-mpi-qt:build

windows-vs2022-kits-mpi-python-qt:build:
    extends:
        - .windows_vs2022_kits_mpi_python_qt
        - .cmake_build_windows
        - .windows_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 180 minutes
    stage: quick

windows-vs2022-kits-mpi-python-qt:test:
    extends:
        - .windows_vs2022_kits_mpi_python_qt
        - .cmake_test_windows
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - windows-vs2022-kits-mpi-python-qt:build

windows-vs2022-kits-mpi-python-qt-stdthread:test:
    extends:
        - .windows_vs2022_kits_mpi_python_qt_stdthread
        - .smp_backend_stdthread_env_variable
        - .ctest_new_cdash_submission
        - .cmake_test_windows
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - windows-vs2022-kits-mpi-python-qt:build

# This is disabled because VTK-m doesn't make a relocatable installation of its
# imported targets (cf. `vtkm::tbb` since it embeds the build-time locations
# into the install tree. Since the build/install time path is not the same as
# this `concurrent`-tagged job, it's just not going to work well. See
# vtk/vtk-m#609 for tracking.
#
# Also, the `VTK_DLL_PATHS` ends up making a non-relocatable installation. See
# `.gitlab/ci/configure_windows.cmake` for the relevant code.
#
# vtk:windows-vs2022-kits-mpi-python-qt:test-ext:
#     extends:
#         - .windows_vs2022_kits_mpi_python_qt_ext_vtk
#         - .cmake_test_external_windows
#         - .windows_ext_builder_tags
#         - .cmake_junit_artifacts
#         - .run_automatically
#     needs:
#         - windows-vs2022-kits-mpi-python-qt:test

windows-vs2022-mpi-python-qt:build:
    extends:
        - .windows_vs2022_mpi_python_qt
        - .cmake_build_windows
        - .windows_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 180 minutes
    needs: []

windows-vs2022-mpi-python-qt:test:
    extends:
        - .windows_vs2022_mpi_python_qt
        - .cmake_test_windows
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - windows-vs2022-mpi-python-qt:build

windows-vs2022-mpi-python-qt-static:build:
    extends:
        - .windows_vs2022_mpi_python_qt_static
        - .cmake_build_windows
        - .windows_builder_tags
        - .cmake_build_artifacts
        - .run_manually
    timeout: 180 minutes
    needs: []

windows-vs2022-mpi-python-qt-static:test:
    extends:
        - .windows_vs2022_mpi_python_qt_static
        - .cmake_test_windows
        - .windows_tester_tags
        - .cmake_test_artifacts
        - .run_automatically
    needs:
        - windows-vs2022-mpi-python-qt-static:build

## Python wheel builds

wheel-windows-python38-x86_64:build:
    extends:
        - .wheel_windows38_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-windows-python38-x86_64:test:
    extends:
        - .wheel_windows38_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python38-x86_64:build

wheel-windows-python38-x86_64-osmesa:test:
    extends:
        - .wheel_windows38_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python38-x86_64:build

wheel-windows-python39-x86_64:build:
    extends:
        - .wheel_windows39_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-windows-python39-x86_64:test:
    extends:
        - .wheel_windows39_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python39-x86_64:build

wheel-windows-python39-x86_64-osmesa:test:
    extends:
        - .wheel_windows39_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python39-x86_64:build

wheel-windows-python310-x86_64:build:
    extends:
        - .wheel_windows310_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-windows-python310-x86_64:test:
    extends:
        - .wheel_windows310_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python310-x86_64:build

wheel-windows-python310-x86_64-osmesa:test:
    extends:
        - .wheel_windows310_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python310-x86_64:build

wheel-windows-python311-x86_64:build:
    extends:
        - .wheel_windows311_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .scheduled_only
    needs: []

wheel-windows-python311-x86_64:test:
    extends:
        - .wheel_windows311_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python311-x86_64:build

wheel-windows-python311-x86_64-osmesa:test:
    extends:
        - .wheel_windows311_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .scheduled_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python311-x86_64:build

wheel-windows-python312-x86_64:build:
    extends:
        - .wheel_windows312_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .merged_only
    needs: []

wheel-windows-python312-x86_64:test:
    extends:
        - .wheel_windows312_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python312-x86_64:build

wheel-windows-python312-x86_64-osmesa:test:
    extends:
        - .wheel_windows312_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .merged_only
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python312-x86_64:build

wheel-windows-python313-x86_64:build:
    extends:
        - .wheel_windows313_x86_64
        - .cmake_build_wheel_windows
        - .windows_wheel_builder_tags
        - .cmake_wheel_artifacts
        - .run_manually
    needs: []

wheel-windows-python313-x86_64:test:
    extends:
        - .wheel_windows313_x86_64
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python313-x86_64:build

wheel-windows-python313-x86_64-osmesa:test:
    extends:
        - .wheel_windows313_x86_64_osmesa
        - .cmake_test_wheel_windows
        - .windows_wheel_builder_tags
        - .run_automatically
        - .cdash_annotations_artifacts
    needs:
        - wheel-windows-python313-x86_64:build

macos-x86_64-java8:build:
    extends:
        - .macos_x86_64_java
        - .cmake_build_java_macos
        - .macos_x86_64_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 8
    timeout: 4 hours
    needs: []

macos-x86_64-java11:build:
    extends:
        - .macos_x86_64_java
        - .cmake_build_java_macos
        - .macos_x86_64_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 11
    timeout: 4 hours
    needs: []

macos-arm64-java8:build:
    extends:
        - .macos_arm64_java
        - .cmake_build_java_macos
        - .macos_arm64_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 8
    timeout: 4 hours
    needs: []

macos-arm64-java11:build:
    extends:
        - .macos_arm64_java
        - .cmake_build_java_macos
        - .macos_arm64_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 11
    timeout: 4 hours
    needs: []

windows-x86_64-java8:build:
    extends:
        - .windows_vs2022_java
        - .cmake_build_java_windows
        - .windows_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 8
    timeout: 4 hours
    needs: []

windows-x86_64-java11:build:
    extends:
        - .windows_vs2022_java
        - .cmake_build_java_windows
        - .windows_builder_tags
        - .cmake_build_artifacts
        - .weekly_upload_only
    variables:
      VTK_JAVA_VERSION: 11
    timeout: 4 hours
    needs: []

java8:upload:
    extends:
        - .fedora39_java
        - .java_upload_linux
        - .linux_builder_tags
        - .weekly_upload_only
    needs:
        - fedora39-java8:build
        - macos-x86_64-java8:build
        - macos-arm64-java8:build
        - windows-x86_64-java8:build
    environment:
        name: maven-upload-java8

java11:upload:
    extends:
        - .fedora39_java
        - .java_upload_linux
        - .linux_builder_tags
        - .weekly_upload_only
    needs:
        - fedora39-java11:build
        - macos-x86_64-java11:build
        - macos-arm64-java11:build
        - windows-x86_64-java11:build
    environment:
        name: maven-upload-java11
