[GHA] Enable thread sanitizer #324
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Linux Sanitizers (Ubuntu 20.04) | |
on: | |
schedule: | |
# run daily at 00:00 | |
- cron: '0 0 * * *' | |
workflow_dispatch: | |
pull_request: | |
branches: | |
- master | |
- 'releases/**' | |
concurrency: | |
# github.ref is not unique in post-commit | |
group: ${{ github.event_name == 'push' && github.run_id || github.ref }}-linux-sanitizers | |
cancel-in-progress: true | |
permissions: read-all | |
env: | |
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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
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,*/layer_tests_summary/*,*/conformance/*' | |
Docker: | |
needs: Smart_CI | |
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@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 | |
- uses: ./.github/actions/handle_docker | |
id: handle_docker | |
with: | |
images: | | |
ov_build/sanitizers | |
registry: 'openvinogithubactions.azurecr.io' | |
dockerfiles_root_dir: '.github/dockerfiles' | |
changed_components: ${{ needs.smart_ci.outputs.changed_components }} | |
Build: | |
needs: [Smart_CI, Docker] | |
timeout-minutes: 500 | |
defaults: | |
run: | |
shell: bash | |
runs-on: aks-linux-16-cores-32gb | |
if: ${{ github.repository_owner == 'openvinotoolkit' }} | |
container: | |
image: ${{ fromJSON(needs.docker.outputs.images).ov_build.sanitizers }} | |
volumes: | |
- /mount:/mount | |
strategy: | |
max-parallel: 3 | |
fail-fast: false | |
matrix: | |
include: | |
- SANITIZER: 'AddressAndLeak' | |
SANITIZER_CMAKE_OPTION: '-DENABLE_SANITIZER=ON' | |
- SANITIZER: 'UndefinedBehavior' | |
SANITIZER_CMAKE_OPTION: '-DENABLE_UB_SANITIZER=ON' | |
- SANITIZER: 'Thread' | |
SANITIZER_CMAKE_OPTION: '-DENABLE_THREAD_SANITIZER=ON' | |
env: | |
CMAKE_BUILD_TYPE: 'RelWithDebInfo' | |
CMAKE_GENERATOR: 'Ninja' | |
GITHUB_WORKSPACE: '/__w/openvino/openvino' | |
OPENVINO_REPO: /__w/openvino/openvino/openvino | |
OPENVINO_CONTRIB_REPO: /__w/openvino/openvino/openvino_contrib | |
INSTALL_DIR: /__w/openvino/openvino/openvino_install | |
INSTALL_TEST_DIR: /__w/openvino/openvino/tests_install | |
BUILD_DIR: /__w/openvino/openvino/openvino_build | |
LSAN_IGNORE: /__w/openvino/openvino/openvino/tests/sanitizers/lsan/suppressions.txt | |
ASAN_IGNORE: /__w/openvino/openvino/openvino/tests/sanitizers/asan/suppressions.supp | |
CMAKE_CXX_COMPILER_LAUNCHER: ccache | |
CMAKE_C_COMPILER_LAUNCHER: ccache | |
CCACHE_REMOTE_DIR: /mount/caches/ccache/sanitizers/${{ matrix.SANITIZER }}/${{ github.base_ref || github.ref_name }} | |
CCACHE_DIR: /__w/openvino/openvino/ccache | |
CCACHE_TEMPDIR: /__w/openvino/openvino/ccache_temp | |
CCACHE_MAXSIZE: 20G | |
CCACHE_LOGFILE: /__w/openvino/openvino/openvino_build/ccache.log | |
CCACHE_DEBUG: 1 | |
steps: | |
- name: Clone OpenVINO | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
with: | |
path: ${{ env.OPENVINO_REPO }} | |
submodules: 'true' | |
- name: Clone OpenVINO Contrib | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
with: | |
repository: 'openvinotoolkit/openvino_contrib' | |
path: ${{ env.OPENVINO_CONTRIB_REPO }} | |
submodules: 'true' | |
ref: ${{ env.TARGET_BRANCH }} | |
# | |
# Print system info | |
# | |
- name: System info | |
uses: ./openvino/.github/actions/system_info | |
- name: Setup ccache | |
id: ccache_restore | |
uses: ./openvino/.github/actions/cache | |
with: | |
# save-always: ${{ github.event_name == 'push' && 'true' || 'false' }} | |
# cleanup-always: ${{ github.event_name == 'push' && 'true' || 'false' }} | |
save-always: true | |
cleanup-always: true | |
cache-size: 10 | |
max-cache-size: 50 | |
cache-path: ${{ env.CCACHE_REMOTE_DIR }} | |
path: ${{ env.CCACHE_DIR }} | |
key: ${{ runner.os }}-${{ runner.arch }}-ccache-${{ github.sha }} | |
restore-keys: | | |
${{ runner.os }}-${{ runner.arch }}-ccache | |
# | |
# Build | |
# | |
- name: Clean ccache stats | |
run: ccache --zero-stats | |
- name: Show ccache stats | |
run: ccache --show-stats | |
- name: CMake configure - OpenVINO | |
run: | | |
cmake \ | |
-G "${{ env.CMAKE_GENERATOR }}" \ | |
-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 \ | |
-DBUILD_SHARED_LIBS=ON \ | |
-DENABLE_OV_TF_FRONTEND=ON \ | |
-DENABLE_OV_TF_LITE_FRONTEND=ON \ | |
-DENABLE_OV_PADDLE_FRONTEND=ON \ | |
-DENABLE_OV_PYTORCH_FRONTEND=ON \ | |
-DENABLE_OV_JAX_FRONTEND=ON \ | |
-DENABLE_OV_ONNX_FRONTEND=ON \ | |
-DENABLE_ONEDNN_FOR_GPU=OFF \ | |
-DCMAKE_COMPILE_WARNING_AS_ERROR=OFF \ | |
${{ matrix.SANITIZER_CMAKE_OPTION }} \ | |
-S ${OPENVINO_REPO} \ | |
-B ${BUILD_DIR} | |
- name: Cmake build - OpenVINO | |
run: | | |
cmake --build ${BUILD_DIR} --parallel --config ${{ env.CMAKE_BUILD_TYPE }} | |
env: | |
ASAN_OPTIONS: halt_on_error=0:suppressions=${{ env.ASAN_IGNORE }} | |
LSAN_OPTIONS: suppressions=${{ env.LSAN_IGNORE }}:NEOReadDebugKeys=1:DisableDeepBind=1 | |
- name: Show ccache stats | |
run: ccache --show-stats | |
- name: Cmake install - OpenVINO | |
run: | | |
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -P ${BUILD_DIR}/cmake_install.cmake --config ${{ env.CMAKE_BUILD_TYPE }} | |
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_TEST_DIR} -DCOMPONENT=tests -P ${BUILD_DIR}/cmake_install.cmake --config ${{ env.CMAKE_BUILD_TYPE }} | |
cmake -DCMAKE_INSTALL_PREFIX=${INSTALL_DIR} -DCOMPONENT=python_wheels -P ${BUILD_DIR}/cmake_install.cmake --config ${{ env.CMAKE_BUILD_TYPE }} | |
# | |
# Tests | |
# | |
- name: Pack Artifacts | |
run: | | |
pushd ${INSTALL_DIR} | |
tar -czvf ${BUILD_DIR}/openvino_package.tar.gz * | |
popd | |
pushd ${INSTALL_TEST_DIR} | |
tar -czvf ${BUILD_DIR}/openvino_tests.tar.gz * | |
popd | |
# | |
# Upload build artifacts | |
# | |
- name: Upload ccache log | |
if: ${{ always() }} | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: ccache_log_${{ matrix.SANITIZER }} | |
path: ${{ env.CCACHE_LOGFILE }} | |
if-no-files-found: 'error' | |
- name: Upload openvino package | |
if: ${{ always() }} | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: openvino_package_${{ matrix.SANITIZER }} | |
path: ${{ env.BUILD_DIR }}/openvino_package.tar.gz | |
if-no-files-found: 'error' | |
- name: Upload openvino tests package | |
if: ${{ always() }} | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
with: | |
name: openvino_tests_${{ matrix.SANITIZER }} | |
path: ${{ env.BUILD_DIR }}/openvino_tests.tar.gz | |
if-no-files-found: 'error' | |
CXX_Unit_Tests: | |
name: C++ unit tests | |
if: always() | |
needs: [Docker, Build] | |
timeout-minutes: 100 | |
runs-on: 'aks-linux-16-cores-32gb' | |
container: | |
image: ${{ fromJSON(needs.docker.outputs.images).ov_build.sanitizers }} | |
defaults: | |
run: | |
shell: bash | |
strategy: | |
max-parallel: 3 | |
fail-fast: false | |
matrix: | |
include: | |
- SANITIZER: 'AddressAndLeak' | |
- SANITIZER: 'UndefinedBehavior' | |
- SANITIZER: 'Thread' | |
env: | |
INSTALL_DIR: ${{ github.workspace }}/install | |
INSTALL_TEST_DIR: ${{ github.workspace }}/install/tests | |
TBB_ENABLE_SANITIZERS: 1 | |
steps: | |
- name: Download OpenVINO package | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: ${{ format('openvino_package_{0}', matrix.SANITIZER) }} | |
path: ${{ env.INSTALL_DIR }} | |
- name: Download OpenVINO tests package | |
uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 | |
with: | |
name: ${{ format('openvino_tests_{0}', matrix.SANITIZER) }} | |
path: ${{ env.INSTALL_TEST_DIR }} | |
# Needed as ${{ github.workspace }} is not working correctly when using Docker | |
- name: Setup Variables | |
continue-on-error: true | |
run: | | |
echo "INSTALL_DIR=$GITHUB_WORKSPACE/install" >> "$GITHUB_ENV" | |
echo "INSTALL_TEST_DIR=$GITHUB_WORKSPACE/install/tests" >> "$GITHUB_ENV" | |
echo "ASAN_OPTIONS=halt_on_error=0:suppressions=$GITHUB_WORKSPACE/openvino/tests/sanitizers/asan/suppressions.supp" >> "$GITHUB_ENV" | |
echo "LSAN_OPTIONS=suppressions=$GITHUB_WORKSPACE/openvino/tests/sanitizers/lsan/suppressions.txt:NEOReadDebugKeys=1:DisableDeepBind=1" >> "$GITHUB_ENV" | |
- name: Extract OpenVINO packages | |
run: | | |
pushd $INSTALL_DIR | |
tar -xzf openvino_package.tar.gz -C $INSTALL_DIR | |
popd | |
pushd $INSTALL_TEST_DIR | |
tar -xzf openvino_tests.tar.gz -C $INSTALL_DIR | |
popd | |
- name: Fetch Sanitizer Suppression Lists | |
uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 | |
with: | |
sparse-checkout: | | |
tests/sanitizers/lsan/suppressions.txt | |
tests/sanitizers/asan/suppressions.supp | |
sparse-checkout-cone-mode: false | |
path: 'openvino' | |
# | |
# Tests | |
# | |
- name: OpenVINO Core Unit Tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_core_unit_tests --gtest_print_time=1 --gtest_filter=-*IE_GPU* \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-OVCoreUT.xml | |
- name: OpenVINO Inference Functional Tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_inference_functional_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-InferenceFunc.xml | |
- name: OpenVINO Inference Unit Tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_inference_unit_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-InferenceUnit.xml | |
- name: Low Precision Transformations Tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_lp_transformations_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-LpTransformations.xml | |
- name: OpenVINO Conditional compilation tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_conditional_compilation_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ConditionalCompilation.xml | |
- name: IR frontend tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_ir_frontend_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-IRFrontend.xml | |
- name: PaddlePaddle frontend tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/paddle_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-PaddleTests.xml | |
- name: ONNX frontend tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_onnx_frontend_tests --gtest_print_time=1 \ | |
--gtest_filter=-*IE_GPU* \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ONNXFrontend.xml | |
- name: TensorFlow Common frontend tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_tensorflow_common_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-TensorFlowCommonFrontend.xml | |
- name: TensorFlow frontend tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_tensorflow_frontend_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-TensorFlowFrontend.xml | |
- name: TensorFlow Lite frontend tests | |
if: ${{ 'false' }} # Ticket: 134416 | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_tensorflow_lite_frontend_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-TensorFlowLiteFrontend.xml | |
- name: Transformations func tests | |
if: ${{ 'false' }} # Ticket: 143900 | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_transformations_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-Transformations.xml | |
- name: Common test utils tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_util_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-CommonUtilTests.xml | |
- name: Snippets func tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_snippets_func_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-SnippetsFuncTests.xml | |
- name: CPU plugin unit tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_cpu_unit_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-CPUUnitTests.xml | |
- name: ov_subgraphs_dumper_tests tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_subgraphs_dumper_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ov_subgraphs_dumper_tests.xml | |
- name: Template OpImpl tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_op_conformance_tests --gtest_print_time=1 --device=TEMPLATE --gtest_filter=*OpImpl*\ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-OpImplTests.xml | |
- name: AUTO unit tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_auto_unit_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ov_auto_unit_tests.xml | |
- name: AUTO func Tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${{ env.INSTALL_DIR }}/setupvars.sh | |
${{ env.INSTALL_TEST_DIR }}/ov_auto_func_tests --gtest_print_time=1 \ | |
--gtest_output=xml:${{ env.INSTALL_TEST_DIR }}/TEST-ov_auto_func_tests.xml | |
- name: Template plugin func tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_template_func_tests --gtest_print_time=1 \ | |
--gtest_filter=*smoke* \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-TemplateFuncTests.xml | |
- name: OpenVINO C API tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_capi_test --gtest_print_time=1 \ | |
--gtest_output=xml:${INSTALL_TEST_DIR}/TEST-OpenVINOCAPITests.xml | |
- name: AutoBatch unit tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_auto_batch_unit_tests --gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ov_auto_batch_unit_tests.xml | |
- name: AutoBatch func tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_auto_batch_func_tests --gtest_output=xml:${INSTALL_TEST_DIR}/TEST-ov_auto_batch_func_tests.xml --gtest_filter="*smoke*" | |
- name: Proxy Plugin func tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_proxy_plugin_tests --gtest_print_time=1 --gtest_output=xml:${INSTALL_TEST_DIR}/TEST-OVProxyTests.xml | |
- name: Hetero unit tests | |
# if: ${{ !cancelled() }} | |
run: | | |
source ${{ env.INSTALL_DIR }}/setupvars.sh | |
${{ env.INSTALL_TEST_DIR }}/ov_hetero_unit_tests --gtest_print_time=1 --gtest_output=xml:${{ env.INSTALL_TEST_DIR }}/TEST-OVHeteroUnitTests.xml | |
- name: Hetero func tests | |
if: ${{ 'false' }} # Ticket: 134425 | |
run: | | |
source ${INSTALL_DIR}/setupvars.sh | |
${INSTALL_TEST_DIR}/ov_hetero_func_tests --gtest_print_time=1 --gtest_output=xml:${INSTALL_TEST_DIR}/TEST-OVHeteroFuncTests.xml --gtest_filter="*smoke*" | |
- name: Upload Test Results | |
uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # v4.4.0 | |
if: ${{ !cancelled() }} | |
with: | |
name: test-results-cpp | |
path: ${{ env.INSTALL_TEST_DIR }}/TEST*.xml | |
if-no-files-found: 'error' |