name: Linux (Ubuntu 22.04, Python 3.11) on: schedule: # at 00:00 on Wednesday and Saturday - cron: '0 0 * * 3,6' workflow_dispatch: pull_request: merge_group: push: branches: - master - 'releases/**' concurrency: # github.ref is not unique in post-commit group: ${{ github.event_name == 'push' && github.run_id || github.ref }}-ubuntu-22 cancel-in-progress: true permissions: read-all env: PIP_CACHE_PATH: /mount/caches/pip/linux PYTHON_VERSION: '3.11' TARGET_BRANCH: ${{ github.base_ref || github.event.merge_group.base_ref || github.ref }} jobs: Smart_CI: runs-on: ubuntu-latest outputs: affected_components: "${{ steps.smart_ci.outputs.affected_components }}" changed_components: "${{ steps.smart_ci.outputs.changed_components }}" skip_workflow: "${{ steps.smart_ci.outputs.skip_workflow }}" steps: - name: checkout action uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 timeout-minutes: 15 with: sparse-checkout: .github/actions/smart-ci - name: Get affected components id: smart_ci uses: ./.github/actions/smart-ci with: repository: ${{ github.repository }} pr: ${{ github.event.number }} commit_sha: ${{ github.sha }} ref_name: ${{ github.ref_name }} component_pattern: "category: (.*)" repo_token: ${{ secrets.GITHUB_TOKEN }} skip_when_only_listed_labels_set: 'docs' skip_when_only_listed_files_changed: '*.md,*.rst,*.png,*.jpg,*.svg' - name: Show affected components run: | echo "${{ toJSON(steps.smart_ci.outputs.affected_components) }}" shell: bash Docker: needs: Smart_CI if: "!needs.smart_ci.outputs.skip_workflow" runs-on: aks-linux-4-cores-16gb-docker-build container: image: openvinogithubactions.azurecr.io/docker_build:0.2 volumes: - /mount:/mount outputs: images: "${{ steps.handle_docker.outputs.images }}" steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 timeout-minutes: 15 - uses: ./.github/actions/handle_docker id: handle_docker with: images: | ov_build/ubuntu_22_04_x64 ov_build/ubuntu_22_04_x64_nvidia ov_test/ubuntu_22_04_x64 registry: 'openvinogithubactions.azurecr.io' dockerfiles_root_dir: '.github/dockerfiles' changed_components: ${{ needs.smart_ci.outputs.changed_components }} Build: needs: [Docker, Smart_CI] uses: ./.github/workflows/job_build_linux.yml with: runner: 'aks-linux-16-cores-32gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"], "options": "-e SCCACHE_AZURE_BLOB_CONTAINER -e SCCACHE_AZURE_CONNECTION_STRING"}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} event-name: ${{ github.event_name }} os: 'ubuntu_22_04' build-js: true build-contrib: true build-debian-packages: true build-rpm-packages: false cmake-options: |- -G "Ninja Multi-Config" \ -DENABLE_CPPLINT=OFF \ -DENABLE_NCC_STYLE=OFF \ -DENABLE_TESTS=ON \ -DENABLE_STRICT_DEPENDENCIES=OFF \ -DENABLE_SYSTEM_OPENCL=ON \ -DCMAKE_VERBOSE_MAKEFILE=ON \ -DCPACK_GENERATOR=TGZ \ -DENABLE_WHEEL=ON \ -DCMAKE_COMPILE_WARNING_AS_ERROR=ON Debian_Packages: name: Debian Packages needs: [Docker, Build] uses: ./.github/workflows/job_debian_packages.yml with: runner: 'aks-linux-4-cores-16gb' image: 'openvinogithubactions.azurecr.io/dockerhub/ubuntu:22.04' Samples: needs: [ Docker, Build, Smart_CI ] if: fromJSON(needs.smart_ci.outputs.affected_components).samples uses: ./.github/workflows/job_samples_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} JS_API: name: OpenVINO JS API needs: [ Docker, Build, Smart_CI ] if: fromJSON(needs.smart_ci.outputs.affected_components).JS_API uses: ./.github/workflows/job_openvino_js.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_x64 }}"}' Conformance: needs: [ Build, Smart_CI ] timeout-minutes: ${{ matrix.TEST_TYPE == 'API' && 5 || 20 }} defaults: run: shell: bash runs-on: ubuntu-22.04-16-cores strategy: max-parallel: 2 fail-fast: false matrix: include: # 'OP' for Opset, 'API' for API - TEST_TYPE: 'OP' - TEST_TYPE: 'API' env: INSTALL_DIR: ${{ github.workspace }}/install INSTALL_TEST_DIR: ${{ github.workspace }}/install/tests CONFORMANCE_TOOLS_DIR: ${{ github.workspace }}/install/tests/functional_test_utils/layer_tests_summary CONFORMANCE_ARTIFACTS_DIR: ${{ github.workspace }}/install/conformance_artifacts TEST_DEVICE: 'CPU' if: fromJSON(needs.smart_ci.outputs.affected_components).CPU.test steps: - name: Create Directories run: | mkdir -p ${CONFORMANCE_ARTIFACTS_DIR} # # Dependencies # - name: Download OpenVINO package uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: openvino_package path: ${{ env.INSTALL_DIR }} - name: Download OpenVINO tests package uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: openvino_tests path: ${{ env.INSTALL_TEST_DIR }} - name: Extract OpenVINO packages run: | pushd ${INSTALL_DIR} pigz -dc openvino_package.tar.gz | tar -xf - -C ${INSTALL_DIR} popd pushd ${INSTALL_TEST_DIR} pigz -dc openvino_tests.tar.gz | tar -xf - -C ${INSTALL_DIR} popd - name: Fetch setup_python action uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 timeout-minutes: 15 with: sparse-checkout: | .github/actions/setup_python/action.yml sparse-checkout-cone-mode: false path: 'openvino' - name: Setup Python ${{ env.PYTHON_VERSION }} uses: ./openvino/.github/actions/setup_python with: version: ${{ env.PYTHON_VERSION }} should-setup-pip-paths: 'false' self-hosted-runner: 'false' - name: Install Dependencies run: | sudo -E ${INSTALL_DIR}/install_dependencies/install_openvino_dependencies.sh -c=core -y python3 -m pip install -r ${CONFORMANCE_TOOLS_DIR}/requirements.txt # # Tests # - name: Conformance Tests run: | source ${INSTALL_DIR}/setupvars.sh python3 ${CONFORMANCE_TOOLS_DIR}/run_conformance.py -ov=${INSTALL_DIR}/tests \ -d=${TEST_DEVICE} \ -t=${{ matrix.TEST_TYPE }} \ -w=${CONFORMANCE_ARTIFACTS_DIR} \ --cache_path=${CONFORMANCE_TOOLS_DIR}/github/cache/${TEST_DEVICE}/test_cache_${{ matrix.TEST_TYPE }}.lst \ -f=${CONFORMANCE_TOOLS_DIR}/github/skip_configs/${TEST_DEVICE}/expected_failures_${{ matrix.TEST_TYPE }}.csv - name: Pack Conformance Artifacts if: ${{ always() }} run: | pushd ${CONFORMANCE_ARTIFACTS_DIR} tar -cvf - * | pigz > ${CONFORMANCE_ARTIFACTS_DIR}/conformance_artifacts.tar.gz popd - name: Upload Conformance Artifacts if: ${{ always() }} uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: conformance_artifacts_${{ matrix.TEST_TYPE }}-${{ env.TEST_DEVICE }} path: ${{ env.CONFORMANCE_ARTIFACTS_DIR }}/conformance_artifacts.tar.gz if-no-files-found: 'error' - name: Mandatory API Conformance Tests (Template) if: ${{ matrix.TEST_TYPE == 'API' }} run: | source ${INSTALL_DIR}/setupvars.sh python3 ${CONFORMANCE_TOOLS_DIR}/run_conformance.py -ov=${INSTALL_DIR}/tests \ -d=TEMPLATE \ -t=${{ matrix.TEST_TYPE }} \ -w=${CONFORMANCE_ARTIFACTS_DIR} \ -sm=mandatory - name: Pack Conformance Artifacts if: ${{ matrix.TEST_TYPE == 'API' }} run: | pushd ${CONFORMANCE_ARTIFACTS_DIR} tar -cvf - * | pigz > ${CONFORMANCE_ARTIFACTS_DIR}/conformance_artifacts.tar.gz popd - name: Upload Conformance Artifacts if: ${{ matrix.TEST_TYPE == 'API' }} uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: conformance_artifacts_${{ matrix.TEST_TYPE }}-TEMPLATE path: ${{ env.CONFORMANCE_ARTIFACTS_DIR }}/conformance_artifacts.tar.gz if-no-files-found: 'error' ONNX_Runtime: name: ONNX Runtime Integration if: fromJSON(needs.smart_ci.outputs.affected_components).ONNX_RT || fromJSON(needs.smart_ci.outputs.affected_components).ONNX_FE needs: [ Build, Smart_CI, Docker ] uses: ./.github/workflows/job_onnx_runtime.yml with: runner: 'aks-linux-16-cores-32gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"], "options": "-e SCCACHE_AZURE_BLOB_CONTAINER -e SCCACHE_AZURE_CONNECTION_STRING"}' sccache-azure-key-prefix: 'ubuntu22_x86_64_onnxruntime' ONNX_Models: name: ONNX Models Tests if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test || fromJSON(needs.smart_ci.outputs.affected_components).ONNX_FE.test needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_onnx_models_tests.yml with: runner: 'aks-linux-16-cores-64gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' CXX_Unit_Tests: name: C++ unit tests needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_cxx_unit_tests.yml with: runner: 'aks-linux-4-cores-16gb' image: ${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }} affected-components: ${{ needs.smart_ci.outputs.affected_components }} os: 'ubuntu_22_04' Python_Unit_Tests: name: Python unit tests needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_python_unit_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' Python_API_Tests: name: Python API tests needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_python_api_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_tensorflow_layer_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' Pytorch_Layer_Tests: name: Pytorch Layer Tests needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_pytorch_layer_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' JAX_Layer_Tests: name: JAX Layer Tests needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_jax_layer_tests.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' Keras3_OpenVINO_Backend: name: Keras 3 OpenVINO Backend Tests if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_keras3_backend.yml with: runner: 'aks-linux-4-cores-16gb' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' python-version: '3.11' CPU_Functional_Tests: name: CPU functional tests if: fromJSON(needs.smart_ci.outputs.affected_components).CPU.test needs: [ Docker, Build, Smart_CI ] uses: ./.github/workflows/job_cpu_functional_tests.yml with: runner: 'aks-linux-8-cores-32gb' image: ${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }} python-version: '3.11' TensorFlow_Models_Tests_Precommit: name: TensorFlow Models tests if: fromJSON(needs.smart_ci.outputs.affected_components).TF_FE.test || fromJSON(needs.smart_ci.outputs.affected_components).TFL_FE.test needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_tensorflow_models_tests.yml with: runner: 'aks-linux-8-cores-16gb' model_scope: 'precommit' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' TensorFlow_Models_Tests_Nightly_TF_HUB: name: TensorFlow TF Hub Models tests if: ${{ github.event_name == 'schedule' }} needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_tensorflow_models_tests.yml with: runner: 'aks-linux-8-cores-64gb' model_scope: 'nightly_tf_hub' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' TensorFlow_Models_Tests_Nightly_HF: name: TensorFlow Hugging Face Models tests if: ${{ github.event_name == 'schedule' }} needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_tensorflow_models_tests.yml with: runner: 'aks-linux-8-cores-64gb' model_scope: 'nightly_hf' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' # TODO: Switch back to self-hosted runners # container: # image: openvinogithubactions.azurecr.io/dockerhub/ubuntu:22.04 # volumes: # - /mount:/mount PyTorch_Models_Tests: name: PyTorch Models tests if: ${{ github.event_name != 'schedule' && fromJSON(needs.smart_ci.outputs.affected_components).PyTorch_FE.test }} needs: [ Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_pytorch_models_tests.yml with: runner: 'ubuntu-22.04-8-cores' model_scope: 'precommit' PyTorch_Models_Tests_Nightly_Scope1: name: PyTorch Models Nightly Scope1 tests if: ${{ github.event_name == 'schedule' }} needs: [ Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_pytorch_models_tests.yml with: runner: 'ubuntu-22.04-16-cores' model_scope: 'nightly_scope1' PyTorch_Models_Tests_Nightly_Scope2: name: PyTorch Models Nightly Scope2 tests if: ${{ github.event_name == 'schedule' }} needs: [ Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_pytorch_models_tests.yml with: runner: 'ubuntu-22.04-16-cores' model_scope: 'nightly_scope2' JAX_Models_Tests_Precommit: name: JAX/Flax Models tests if: fromJSON(needs.smart_ci.outputs.affected_components).JAX_FE.test needs: [ Docker, Build, Smart_CI, Openvino_tokenizers ] uses: ./.github/workflows/job_jax_models_tests.yml with: runner: 'aks-linux-8-cores-16gb' model_scope: 'precommit' container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_test.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' NVIDIA_Plugin: name: NVIDIA plugin needs: [ Docker, Build, Smart_CI ] timeout-minutes: 15 defaults: run: shell: bash runs-on: aks-linux-16-cores-32gb container: image: ${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_x64_nvidia }} volumes: - /mount:/mount options: -e SCCACHE_AZURE_BLOB_CONTAINER -e SCCACHE_AZURE_CONNECTION_STRING env: CMAKE_BUILD_TYPE: 'Release' CMAKE_GENERATOR: 'Ninja Multi-Config' CMAKE_CUDA_COMPILER_LAUNCHER: sccache CMAKE_CXX_COMPILER_LAUNCHER: sccache CMAKE_C_COMPILER_LAUNCHER: sccache SCCACHE_IGNORE_SERVER_IO_ERROR: 1 SCCACHE_SERVER_PORT: 35555 SCCACHE_ERROR_LOG: /__w/openvino/sccache_log.txt SCCACHE_LOG: warn INSTALL_DIR: /__w/openvino/openvino/install OPENVINO_DEVELOPER_PACKAGE: /__w/openvino/openvino/install/developer_package OPENVINO_REPO: /__w/openvino/openvino/openvino OPENVINO_CONTRIB_REPO: /__w/openvino/openvino/openvino_contrib NVIDIA_BUILD_DIR: /__w/openvino/openvino/nvidia_plugin_build DEBIAN_FRONTEND: 'noninteractive' SCCACHE_AZURE_KEY_PREFIX: ubuntu22_x86_64_Release if: fromJSON(needs.smart_ci.outputs.affected_components).NVIDIA steps: - name: Download OpenVINO package uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: openvino_package path: ${{ env.INSTALL_DIR }} - name: Download OpenVINO Developer package uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 with: name: openvino_developer_package path: ${{ env.INSTALL_DIR }} - name: Extract OpenVINO packages run: | pushd ${INSTALL_DIR} pigz -dc openvino_package.tar.gz | tar -xf - -C ${INSTALL_DIR} popd pushd ${INSTALL_DIR} pigz -dc openvino_developer_package.tar.gz | tar -xf - -C ${INSTALL_DIR} popd - name: Clone OpenVINO Contrib uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 timeout-minutes: 15 with: repository: 'openvinotoolkit/openvino_contrib' path: ${{ env.OPENVINO_CONTRIB_REPO }} ref: ${{ env.TARGET_BRANCH }} # # Build # - name: Cmake & Build - NVIDIA Plugin run: | source ${INSTALL_DIR}/setupvars.sh cmake \ -DOpenVINODeveloperPackage_DIR=${OPENVINO_DEVELOPER_PACKAGE}/cmake \ -DCMAKE_COMPILE_WARNING_AS_ERROR=OFF \ -S ${OPENVINO_CONTRIB_REPO}/modules/nvidia_plugin \ -B ${NVIDIA_BUILD_DIR} cmake --build ${NVIDIA_BUILD_DIR} --parallel $(nproc) --config ${{ env.CMAKE_BUILD_TYPE }} --verbose -- ov_nvidia_func_tests ov_nvidia_unit_tests - name: Show ccache stats run: ${SCCACHE_PATH} --show-stats Openvino_tokenizers: name: OpenVINO tokenizers extension needs: [ Build, Smart_CI, Docker ] uses: ./.github/workflows/job_tokenizers.yml with: runner: 'aks-linux-4-cores-16gb' shell: bash container: '{"image": "${{ fromJSON(needs.docker.outputs.images).ov_build.ubuntu_22_04_x64 }}", "volumes": ["/mount:/mount"]}' affected-components: ${{ needs.smart_ci.outputs.affected_components }} python-version: '3.11' if: fromJSON(needs.smart_ci.outputs.affected_components).TOKENIZERS iGPU: name: iGPU Tests needs: [ Build, Smart_CI ] uses: ./.github/workflows/job_gpu_tests.yml strategy: max-parallel: 2 fail-fast: false matrix: TEST_TYPE: ['unit', 'func'] with: device: 'igpu' test_type: ${{ matrix.TEST_TYPE }} runner: "[ 'self-hosted', 'igpu' ]" container: '{"image": "ubuntu:22.04", "volumes": ["/dev/dri:/dev/dri"], "options": "--group-add 109 --group-add 44 --device /dev/dri:/dev/dri"}' # if: fromJSON(needs.smart_ci.outputs.affected_components).GPU if: ${{ 'false' }} # Ticket: 143677 dGPU: name: dGPU Tests needs: [ Build, Smart_CI ] uses: ./.github/workflows/job_gpu_tests.yml strategy: max-parallel: 2 fail-fast: false matrix: TEST_TYPE: ['unit', 'func'] with: device: 'dgpu' test_type: ${{ matrix.TEST_TYPE }} runner: "[ 'self-hosted', 'dgpu' ]" container: '{"image": "ubuntu:22.04", "volumes": ["/dev/dri:/dev/dri"], "options": "--group-add 109 --group-add 44 --device /dev/dri/card0:/dev/dri/card0 --device /dev/dri/renderD128:/dev/dri/renderD128"}' # if: ${{ github.event_name == 'schedule' }} if: ${{ 'false' }} # Ticket: 143677 Overall_Status: name: ci/gha_overall_status needs: [Smart_CI, Build, Debian_Packages, Samples, Conformance, ONNX_Runtime, CXX_Unit_Tests, Python_Unit_Tests, TensorFlow_Layer_Tests, Pytorch_Layer_Tests, CPU_Functional_Tests, TensorFlow_Models_Tests_Precommit, PyTorch_Models_Tests, JAX_Models_Tests_Precommit, NVIDIA_Plugin, Openvino_tokenizers, iGPU, Keras3_OpenVINO_Backend] if: ${{ always() }} runs-on: ubuntu-latest steps: - name: Check status of all jobs if: >- ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} run: exit 1