diff --git a/.github/actions/install_ov_wheels/action.yml b/.github/actions/install_ov_wheels/action.yml new file mode 100644 index 00000000000000..f3f4f10748606a --- /dev/null +++ b/.github/actions/install_ov_wheels/action.yml @@ -0,0 +1,51 @@ +name: 'Find and install OpenVINO Python wheels' +description: 'Finds the OpenVINO Python wheels (core, dev and tokenizers) suitable for the "python3" executable and installs them' +inputs: + wheels-dir-path: + description: 'Path to the directory in which wheels are located' + required: true + wheels-to-install: + description: 'List of wheel names to install in the form of "openvino openvino_tokenizers"' +runs: + using: 'composite' + steps: + - name: Install OpenVINO Python wheels (Windows) + shell: pwsh + if: runner.os == 'Windows' + run: | + # Get the Python version + $pyVersion = python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')" + + foreach ($wheel in $("${{ inputs.wheels-to-install }}" -split ' ')) { + + # Search for the python-specific wheel version and install it if exists + $wheelPath = Get-ChildItem -Path ${{ inputs.wheels-dir-path }} -Filter "$wheel-*cp$pyVersion*.whl" | Select-Object -First 1 + if ($wheelPath) { + python3 -m pip install $wheelPath.FullName + } else { + # If the python-specific version does not exist, install by name only + $wheelPathByName = Get-ChildItem -Path ${{ inputs.wheels-dir-path }} -Filter "$wheel-*.whl" | Select-Object -First 1 + if ($wheelPathByName) { + python3 -m pip install $wheelPathByName.FullName + } else { + Write-Host "Wheel for $wheel not found." + } + } + } + + - name: Install OpenVINO Python wheels (Linux and macOS) + shell: bash + if: runner.os != 'Windows' + run: | + py_version=$(python3 -c "import sys; print(f'{sys.version_info.major}{sys.version_info.minor}')") + for wheel in "${{ inputs.wheels-to-install }}"; do + + # Search for the python-specific wheel version and install it if exists + wheel_path=$(find ${{ inputs.wheels-dir-path }} -name "$wheel-*cp$py_version*.whl") + if [ -z "${wheel_path}" ]; then + python3 -m pip install $wheel_path + else + # If the python-specific version does not exist, install by name only + python3 -m pip install ${{ inputs.wheels-dir-path }}/$wheel-*.whl + fi + done diff --git a/.github/workflows/job_build_windows.yml b/.github/workflows/job_build_windows.yml index 8a39f348d824c3..7b682f208c3435 100644 --- a/.github/workflows/job_build_windows.yml +++ b/.github/workflows/job_build_windows.yml @@ -21,6 +21,11 @@ on: description: 'A string of options passed to CMake' type: string required: true + build-additional-python-wheels: + description: 'Whether to build additional, i.e., non-system Python wheels. Should have Python 3.9-3.12 installed' + type: boolean + required: false + default: false permissions: read-all @@ -157,8 +162,7 @@ jobs: run: echo SSL_CERT_FILE=$(python3 -m certifi) >> $env:GITHUB_ENV - name: CMake configure - run: | - cmake -S ${{ env.OPENVINO_REPO }} -B ${{ env.BUILD_DIR }} ${{ inputs.cmake-options }} + run: cmake -S ${{ env.OPENVINO_REPO }} -B ${{ env.BUILD_DIR }} ${{ inputs.cmake-options }} - name: Clean ccache stats run: '& ccache --zero-stats' @@ -176,6 +180,54 @@ jobs: cmake --install . --config ${{ env.CMAKE_BUILD_TYPE }} --prefix ${{ env.INSTALL_TEST_DIR }} --component tests working-directory: ${{ env.BUILD_DIR }} + # Setup additional Python versions for wheels building + - name: Setup Python 3.9 + if: ${{ inputs.build-additional-python-wheels }} + uses: ./openvino/.github/actions/setup_python + with: + version: '3.9' + pip-cache-path: ${{ env.PIP_CACHE_PATH }} + should-setup-pip-paths: 'true' + self-hosted-runner: 'true' + + # Setup additional Python versions for wheels building + - name: Setup Python 3.10 + if: ${{ inputs.build-additional-python-wheels }} + uses: ./openvino/.github/actions/setup_python + with: + version: '3.10' + pip-cache-path: ${{ env.PIP_CACHE_PATH }} + should-setup-pip-paths: 'true' + self-hosted-runner: 'true' + + # Setup additional Python versions for wheels building + - name: Setup Python 3.12 + if: ${{ inputs.build-additional-python-wheels }} + uses: ./openvino/.github/actions/setup_python + with: + version: '3.12' + pip-cache-path: ${{ env.PIP_CACHE_PATH }} + should-setup-pip-paths: 'true' + self-hosted-runner: 'true' + + - name: Build additional Python wheels + if: ${{ inputs.build-additional-python-wheels }} + run: | + $pyVersions = '3.9', '3.10', '3.12' + foreach ($pyVersion in $pyVersions) { + $pyBuildDir = "${{ github.workspace }}/py$pyVersion" + New-Item -ItemType Directory -Path "$pyBuildDir" -Force + + $pythonCommand = "py -$pyVersion -c `"import sys; print(f'{sys.executable}')`"" + $pythonExecutablePath = & cmd /c $pythonCommand + + & $pythonExecutablePath -m pip install -r ${{ env.OPENVINO_REPO }}/src/bindings/python/wheel/requirements-dev.txt + + cmake -DPython3_EXECUTABLE="$pythonExecutablePath" -DOpenVINODeveloperPackage_DIR=${{ env.BUILD_DIR }} -S ${{ env.OPENVINO_REPO }}/src/bindings/python -B "$pyBuildDir" + cmake --build "$pyBuildDir" --parallel --config ${{ env.CMAKE_BUILD_TYPE }} + cmake --install "$pyBuildDir" --config ${{ env.CMAKE_BUILD_TYPE }} --prefix ${{ env.INSTALL_WHEELS_DIR }} --component python_wheels + } + - name: Pack Artifacts run: | $file = Get-ChildItem -Path "${{ env.INSTALL_DIR }}" @@ -220,7 +272,7 @@ jobs: uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 with: name: openvino_wheels - path: ${{ env.BUILD_DIR }}/wheels/*.whl + path: ${{ env.INSTALL_WHEELS_DIR }}/wheels/*.whl if-no-files-found: 'error' - name: Upload openvino tests package diff --git a/.github/workflows/job_pytorch_layer_tests.yml b/.github/workflows/job_pytorch_layer_tests.yml index b0eba0a278e582..271b7948d435dc 100644 --- a/.github/workflows/job_pytorch_layer_tests.yml +++ b/.github/workflows/job_pytorch_layer_tests.yml @@ -65,6 +65,7 @@ jobs: echo "OPENVINO_REPO=$GITHUB_WORKSPACE/openvino" >> "$GITHUB_ENV" echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV" echo "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV" + echo "INSTALL_WHEELS_DIR=$GITHUB_WORKSPACE/install/wheels" >> "$GITHUB_ENV" echo "LAYER_TESTS_INSTALL_DIR=$GITHUB_WORKSPACE/install/tests/layer_tests" >> "$GITHUB_ENV" - name: Install OpenVINO dependencies (mac) @@ -83,11 +84,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath ${{ env.INSTALL_DIR }} working-directory: ${{ env.INSTALL_DIR }} - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -99,20 +101,11 @@ jobs: should-setup-pip-paths: ${{ runner.os != 'macOS' }} self-hosted-runner: ${{ runner.os != 'macOS' }} - - name: Install OpenVINO Python wheels (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Install the core OV wheel - python3 -m pip install ./openvino-*.whl - working-directory: ${{ env.INSTALL_WHEELS_DIR }} - - - name: Install OpenVINO Python wheels (Windows) - if: runner.os == 'Windows' - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path . -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - working-directory: ${{ env.INSTALL_WHEELS_DIR }} + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino' - name: Install Pytorch Layer tests dependencies run: | diff --git a/.github/workflows/job_tensorflow_layer_tests.yml b/.github/workflows/job_tensorflow_layer_tests.yml index 29afb466d69a42..b13d2f882e9a48 100644 --- a/.github/workflows/job_tensorflow_layer_tests.yml +++ b/.github/workflows/job_tensorflow_layer_tests.yml @@ -66,6 +66,7 @@ jobs: echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV" echo "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV" echo "LAYER_TESTS_INSTALL_DIR=$GITHUB_WORKSPACE/install/tests/layer_tests" >> "$GITHUB_ENV" + echo "INSTALL_WHEELS_DIR=$GITHUB_WORKSPACE/install/wheels" >> "$GITHUB_ENV" - name: Install OpenVINO dependencies (mac) if: runner.os == 'macOS' @@ -83,11 +84,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath ${{ env.INSTALL_DIR }} working-directory: ${{ env.INSTALL_DIR }} - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -99,27 +101,11 @@ jobs: should-setup-pip-paths: ${{ runner.os != 'macOS' }} self-hosted-runner: ${{ runner.os != 'macOS' }} - - name: Install OpenVINO Python wheels (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Install the core OV wheel - python3 -m pip install ./openvino-*.whl - - # Install the core OV Tokenizers wheel - python3 -m pip install ./openvino_tokenizers-*.whl - working-directory: ${{ env.INSTALL_WHEELS_DIR }} - - - name: Install OpenVINO Python wheels (Windows) - if: runner.os == 'Windows' - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path . -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - - # Find and install the core OV Tokenizers wheel - $ovCoreWheelPath=Get-ChildItem -Path . -Filter openvino_tokenizers-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - working-directory: ${{ env.INSTALL_WHEELS_DIR }} + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino openvino_tokenizers' - name: Install Python Layer tests dependencies run: | diff --git a/.github/workflows/job_tokenizers.yml b/.github/workflows/job_tokenizers.yml index 4b84bee25c78f4..1068ec550d1752 100644 --- a/.github/workflows/job_tokenizers.yml +++ b/.github/workflows/job_tokenizers.yml @@ -54,13 +54,15 @@ jobs: echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV" echo "OPENVINO_TOKENIZERS_REPO=$GITHUB_WORKSPACE/openvino_tokenizers" >> "$GITHUB_ENV" echo "EXTENSION_BUILD_DIR=$GITHUB_WORKSPACE/build" >> "$GITHUB_ENV" + echo "INSTALL_WHEELS_DIR=$GITHUB_WORKSPACE/install/wheels" >> "$GITHUB_ENV" - - name: checkout action + - name: checkout actions uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: | .github/actions/setup_python .github/actions/cache + .github/actions/install_ov_wheels/action.yml install_build_dependencies.sh - name: Install OpenVINO dependencies (mac) @@ -93,22 +95,11 @@ jobs: # Dependencies # - - name: Install OpenVINO Python wheel (Linux and macOS) - if: runner.os != 'Windows' - run: | - # Find and install wheel - wheel_name=$(find . -name 'openvino-*.whl') - python3 -m pip install $wheel_name - working-directory: ${{ env.INSTALL_WHEELS_DIR }} - - - - name: Install OpenVINO Python wheel (Windows) - if: runner.os == 'Windows' - run: | - # Find and install wheel - $ovCoreWheelPath=Get-ChildItem -Path . -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - working-directory: ${{ env.INSTALL_WHEELS_DIR }} + - name: Install OpenVINO Python wheels + uses: ./.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino' # # Build diff --git a/.github/workflows/windows_vs2019_release.yml b/.github/workflows/windows_vs2019_release.yml index a416f577cdb3e1..18b49f9fc6a8fe 100644 --- a/.github/workflows/windows_vs2019_release.yml +++ b/.github/workflows/windows_vs2019_release.yml @@ -59,6 +59,7 @@ jobs: affected-components: ${{ needs.smart_ci.outputs.affected_components }} build-type: 'Release' target-branch: ${{ needs.smart_ci.outputs.target_branch }} + build-additional-python-wheels: true cmake-options: |- -G "Ninja Multi-Config" ` -DENABLE_PYTHON=ON ` @@ -69,7 +70,7 @@ jobs: -DENABLE_STRICT_DEPENDENCIES=OFF ` -DCMAKE_DISABLE_FIND_PACKAGE_PkgConfig=ON ` -DCUSTOM_OPERATIONS="calculate_grid;complex_mul;fft;grid_sample;sparse_conv;sparse_conv_transpose" ` - -DOPENVINO_EXTRA_MODULES="${env:OPENVINO_CONTRIB_REPO }}/modules/custom_operations;${env:OPENVINO_CONTRIB_REPO}/modules/java_api" + -DOPENVINO_EXTRA_MODULES="${env:OPENVINO_CONTRIB_REPO}/modules/custom_operations;${env:OPENVINO_CONTRIB_REPO}/modules/java_api" Samples: needs: [ Build, Smart_CI ] @@ -108,11 +109,12 @@ jobs: Expand-Archive openvino_tests.zip -DestinationPath . working-directory: ${{ env.INSTALL_DIR }} - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -135,11 +137,16 @@ jobs: run: | & ${{ env.SAMPLES_INSTALL_DIR }}/c/build_samples.ps1 -InstallDirectory ${{ env.INSTALL_DIR }} -BuildDirectory ${{ env.BUILD_DIR }}/c_samples + # Install Python benchmark_app by installing openvino-*.whl + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino' + - name: Samples tests run: | - # Install Python benchmark_app by installing openvino-*.whl - $ovCoreWheelPath=Get-ChildItem -Path ./wheels -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install --ignore-installed PyYAML -r ./tests/smoke_tests/requirements.txt "$ovCoreWheelPath" + python3 -m pip install --ignore-installed PyYAML -r ./tests/smoke_tests/requirements.txt . "./setupvars.ps1" $Env:PYTHONCOERCECLOCALE="warn" python3 -bb -W error -X dev -X warn_default_encoding -m pytest ./tests/smoke_tests --numprocesses auto @@ -270,15 +277,15 @@ jobs: merge-multiple: true - name: Extract OpenVINO packages - run: | - Expand-Archive openvino_tests.zip -DestinationPath . + run: Expand-Archive openvino_tests.zip -DestinationPath . working-directory: ${{ env.INSTALL_DIR }} - - name: Fetch setup_python action + - name: Fetch setup_python and install wheels actions uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: sparse-checkout: | .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml sparse-checkout-cone-mode: false path: 'openvino' @@ -291,15 +298,10 @@ jobs: self-hosted-runner: 'true' - name: Install OpenVINO Python wheels - run: | - # Find and install the core OV wheel - $ovCoreWheelPath=Get-ChildItem -Path . -Filter openvino-*.whl | % { $_.FullName } - python3 -m pip install "$ovCoreWheelPath" - - # Find and install the dev OV wheel - $ovDevWheelPath=Get-ChildItem -Path . -Filter openvino_dev*.whl | % { $_.FullName } - python3 -m pip install "$ovDevWheelPath[caffe,kaldi,onnx,tensorflow2,pytorch]" - working-directory: ${{ env.INSTALL_WHEELS_DIR }} + uses: ./openvino/.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino' - name: Install Python API tests dependencies run: | @@ -318,13 +320,6 @@ jobs: - name: Set SSL_CERT_FILE for model downloading for unit tests run: echo SSL_CERT_FILE=$(python3 -m certifi) >> $env:GITHUB_ENV - - name: Python API Tests - #if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test # Ticket: 127101 - shell: cmd - run: | - set PYTHONPATH=${{ env.LAYER_TESTS_INSTALL_DIR }};%PYTHONPATH% - python3 -m pytest -sv ${{ env.INSTALL_TEST_DIR }}/pyopenvino ${{ env.PYTHON_STATIC_ARGS }} --junitxml=${{ env.INSTALL_TEST_DIR }}/TEST-Pyngraph.xml --ignore=${{ env.INSTALL_TEST_DIR }}/pyopenvino/tests/test_utils/test_utils.py - - name: Model Optimizer UT if: fromJSON(needs.smart_ci.outputs.affected_components).MO.test shell: cmd @@ -332,9 +327,7 @@ jobs: python3 -m pytest -s ${{ env.INSTALL_TEST_DIR }}/mo/unit_tests --junitxml=${{ env.INSTALL_TEST_DIR }}/TEST-ModelOptimizer.xml - name: Install Python Layer tests dependencies - run: | - # layer test requirements - python3 -m pip install -r ${{ env.LAYER_TESTS_INSTALL_DIR }}/requirements.txt + run: python3 -m pip install -r ${{ env.LAYER_TESTS_INSTALL_DIR }}/requirements.txt - name: ONNX Layer Tests if: fromJSON(needs.smart_ci.outputs.affected_components).ONNX_FE.test @@ -406,10 +399,104 @@ jobs: uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 if: ${{ !cancelled() }} with: - name: test-results-python + name: test-results-python-unittests path: ${{ env.INSTALL_TEST_DIR }}/TEST*.xml if-no-files-found: 'error' + Python_API_Tests: + name: OpenVINO Python API Tests + if: fromJSON(needs.smart_ci.outputs.affected_components).Python_API.test + needs: [ Build, Smart_CI ] + timeout-minutes: 35 + strategy: + fail-fast: false + matrix: + python-version: ["3.9", "3.10", "3.11", "3.12"] + defaults: + run: + shell: pwsh + runs-on: aks-win-8-cores-16gb + env: + OPENVINO_REPO: "${{ github.workspace }}\\openvino" + INSTALL_DIR: "${{ github.workspace }}\\install" + INSTALL_TEST_DIR: "${{ github.workspace }}\\install\\tests" + INSTALL_WHEELS_DIR: "${{ github.workspace }}\\install\\wheels" + PYTHON_STATIC_ARGS: -m "not dynamic_library and not template_plugin" + steps: + - name: Download OpenVINO artifacts (tarballs) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + pattern: openvino_[tests]* + path: ${{ env.INSTALL_DIR }} + merge-multiple: true + + - name: Download OpenVINO artifacts (wheels) + uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + with: + pattern: openvino_[wheels]* + path: ${{ env.INSTALL_WHEELS_DIR }} + merge-multiple: true + + - name: Extract OpenVINO packages + run: Expand-Archive openvino_tests.zip -DestinationPath . + working-directory: ${{ env.INSTALL_DIR }} + + - name: Fetch setup_python and install wheels actions + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + sparse-checkout: | + .github/actions/setup_python/action.yml + .github/actions/install_ov_wheels/action.yml + sparse-checkout-cone-mode: false + path: 'openvino' + + - name: Setup Python ${{ matrix.python-version }} + uses: ./openvino/.github/actions/setup_python + with: + version: ${{ matrix.python-version }} + pip-cache-path: ${{ env.PIP_CACHE_PATH }} + should-setup-pip-paths: 'false' + self-hosted-runner: 'true' + + - name: Install OpenVINO Python wheels + uses: ./openvino/.github/actions/install_ov_wheels + with: + wheels-dir-path: ${{ env.INSTALL_WHEELS_DIR }} + wheels-to-install: 'openvino' + + - name: Install Python API tests dependencies + run: python3 -m pip install -r ${{ env.INSTALL_TEST_DIR }}/bindings/python/requirements_test.txt + + - name: Set SSL_CERT_FILE for model downloading for unit tests + run: echo SSL_CERT_FILE=$(python3 -m certifi) >> $env:GITHUB_ENV + + - name: Python API Tests + shell: cmd + run: | + set PYTHONPATH=${{ env.INSTALL_TEST_DIR }};%PYTHONPATH% + python3 -m pytest -sv ${{ env.INSTALL_TEST_DIR }}/pyopenvino ${{ env.PYTHON_STATIC_ARGS }} --junitxml=${{ env.INSTALL_TEST_DIR }}/TEST-Pyngraph.xml --ignore=${{ env.INSTALL_TEST_DIR }}/pyopenvino/tests/test_utils/test_utils.py + + - name: Python API Tests -- numpy>=2.0.0 + shell: cmd + run: | + python3 -m pip uninstall -y numpy + python3 -m pip install "numpy>=2.0.0,<2.1.0" + python3 -m pip install -r ${{ env.INSTALL_TEST_DIR }}/bindings/python/requirements_test.txt + # for 'template' extension + set PYTHONPATH=${{ env.INSTALL_TEST_DIR }};%PYTHONPATH% + set PATH=${{ env.INSTALL_TEST_DIR }};%PATH% + python3 -m pytest -sv ${{ env.INSTALL_TEST_DIR }}/pyopenvino --junitxml=${{ env.INSTALL_TEST_DIR }}/TEST-Pyngraph_new_numpy.xml --ignore=${{ env.INSTALL_TEST_DIR }}/pyopenvino/tests/test_utils/test_utils.py + + - name: Upload Test Results + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + if: ${{ !cancelled() }} + with: + name: test-results-python-${{ matrix.python-version }} + path: | + ${{ env.INSTALL_TEST_DIR }}/TEST*.html + ${{ env.INSTALL_TEST_DIR }}/TEST*.xml + if-no-files-found: 'error' + TensorFlow_Layer_Tests: name: TensorFlow Layer Tests needs: [ Build, Smart_CI, Openvino_tokenizers ]