Skip to content

Added AddressSanitizer [ASan] CI pipeline #3

Added AddressSanitizer [ASan] CI pipeline

Added AddressSanitizer [ASan] CI pipeline #3

name: OCV PR Linux 24 ASan
on:
pull_request:
branches:
- main
paths:
- '.github/workflows/OCV-PR-LINUX-24-ASan.yaml'
workflow_call:
inputs:
workflow_branch:
description: "Branch for ci-gha-workflow repository"
default: "main"
required: false
type: string
concurrency:
group: OCV-PR-Linux-24-ASan-${{ github.ref }}
cancel-in-progress: true
jobs:
branch_eval:
runs-on: ubuntu-24.04
outputs:
branches: ${{ steps.determine-branches.outputs.branches }}
steps:
- id: determine-branches
shell: bash
run: |
if [ "${{ github.event.repository.name == 'ci-gha-workflow' }}" = "true" ] ; then
echo "branches=[ '4.x', '5.x' ]" >> "$GITHUB_OUTPUT"
else
echo "branches=[ '${{ github.base_ref }}' ]" >> "$GITHUB_OUTPUT"
fi
Ubuntu-24-ASan:
runs-on: opencv-cn-lin-x86-64
timeout-minutes: 180
needs:
- branch_eval
strategy:
fail-fast: false
matrix:
branch: ${{ fromJSON(needs.branch_eval.outputs.branches )}}
defaults:
run:
shell: bash
container:
image: 'quay.io/opencv-ci/opencv-ubuntu-24.04:20251127'
volumes:
- /home/opencv-cn/git_cache:/opt/git_cache
- /home/opencv-cn/ci_cache/opencv/24.04:/opt/.ccache
- /home/opencv-cn/binaries_cache/24.04:/opt/binaries_cache
- /home/opencv-cn/dnn-models:/opt/dnn-models
env:
ANT_HOME: '/usr/share/ant'
DNN_MODELS: '/opt/dnn-models'
CCACHE_DIR: '/opt/.ccache'
CCACHE_MAXSIZE: '8G'
OPENCV_DOWNLOAD_PATH: '/opt/binaries_cache'
# Focused CMAKE_OPT for Ubuntu 24.04 with ASan enabled by default
CMAKE_OPT: >-
-DBUILD_DOCS=ON
-DBUILD_EXAMPLES=ON
-DOPENCV_ENABLE_NONFREE=ON
-DWITH_IMGCODEC_GIF=ON
-DWITH_JPEGXL=ON
-DWITH_AVIF=ON
-DWITH_GPHOTO2=ON
-DWITH_ARAVIS=ON
-DCPU_BASELINE=AVX2
-DCMAKE_BUILD_TYPE=RelWithDebInfo
-DENABLE_OMIT_FRAME_POINTER=OFF
-DCMAKE_C_FLAGS="-fno-omit-frame-pointer -fsanitize=address"
-DCMAKE_CXX_FLAGS="-fno-omit-frame-pointer -fsanitize=address"
-DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address"
-DCMAKE_SHARED_LINKER_FLAGS="-fsanitize=address"
HOME: '/home/ubuntu'
MAIN_BUILD_DIR: "${{ (github.event.repository.name != 'opencv_contrib') && 'build' || 'build-contrib' }}"
OPENCV_FOR_THREADS_NUM: 8
CMAKE_BUILD_PARALLEL_LEVEL: 8
steps:
- name: Checkout workflow repository
uses: actions/checkout@v4
with:
repository: opencv/ci-gha-workflow
ref: "${{ github.repository == 'opencv/ci-gha-workflow' && github.ref || inputs.workflow_branch }}"
- name: Checkout and merge OpenCV
uses: ./checkout-and-merge
with:
target_branch: "${{ matrix.branch }}"
author: "${{ github.event.pull_request.user.login }}"
source_branch: "${{ github.event.repository.name == 'ci-gha-workflow' && '' || github.head_ref }}"
gitcache: '/opt/git_cache'
home: '${{ env.HOME }}'
workdir: '${{ env.HOME }}'
- name: Update extra dnn models
timeout-minutes: 60
working-directory: '${{ env.HOME }}'
run: |
ls -lR ${{ env.DNN_MODELS }}
python3 opencv_extra/testdata/dnn/download_models.py \
--cleanup \
--dst '${{ env.DNN_MODELS }}/dnn'
echo "OPENCV_DNN_TEST_DATA_PATH=${{ env.DNN_MODELS }}" >> $GITHUB_ENV
- if: ${{ github.event.repository.name != 'opencv_contrib' }}
name: Configure and build OpenCV
uses: ./configure-and-build
with:
workdir: '${{ env.HOME }}'
builddir: 'build'
generator: 'Ninja'
options: '${{ env.CMAKE_OPT }}'
- name: Configure and build OpenCV with contrib
uses: ./configure-and-build
with:
workdir: '${{ env.HOME }}'
builddir: 'build-contrib'
generator: 'Ninja'
options: '-DOPENCV_EXTRA_MODULES_PATH=opencv_contrib/modules ${{ env.CMAKE_OPT }}'
- name: Run OpenCV tests
uses: ./run-tests
timeout-minutes: 100
env:
OPENCV_TEST_DATA_PATH: '${{ env.HOME }}/opencv_extra/testdata'
OPENCV_TEST_REQUIRE_DATA: 1
OPENCV_TEST_CHECK_OPTIONAL_DATA: 1
PYTHONPATH: '${{ env.HOME }}/${{ env.MAIN_BUILD_DIR }}/python_loader:$PYTHONPATH'
ASAN_OPTIONS: 'detect_leaks=1:exitcode=1:abort_on_error=1:halt_on_error=1'
with:
workdir: '${{ env.HOME }}'
builddir: '${{ env.MAIN_BUILD_DIR }}'
logdir: '${{ env.HOME }}/${{ env.MAIN_BUILD_DIR }}'
plan: "test-plan-${{ matrix.branch }}.json"
suite: "[ ${{ (github.event.repository.name == 'opencv_contrib') && '''linux-contrib''' || '''linux''' }} ]"
filter: "[ 'ubuntu-common', 'ubuntu-avx2' ]"
enable_python: "true"
enable_java: "true"
suffix: '24.04_asan_${{ matrix.branch }}'
- if: ${{ always() && env.WARNINGS == '1' }}
name: Warnings check
run: |
echo "::error Warnings have been found!"
exit 1