Merge pull request #4787 from pwojcikdev/bounded-backlog-pr #2486
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: Code Sanitizers | |
on: [ push, pull_request, workflow_dispatch ] | |
jobs: | |
linux_sanitizers: | |
name: Linux [${{ matrix.SANITIZER.name }}] [${{ matrix.BACKEND }} | ${{ matrix.COMPILER }}] ${{ matrix.SANITIZER.ignore_errors && ' (Errors Ignored)' || '' }} | |
timeout-minutes: 120 | |
strategy: | |
fail-fast: false | |
matrix: | |
BACKEND: [ lmdb, rocksdb ] | |
COMPILER: [ clang ] | |
SANITIZER: | |
- { name: UBSAN, ignore_errors: false } | |
- { name: ASAN, ignore_errors: false, leak_check: false } | |
- { name: ASAN_INT, ignore_errors: true, leak_check: false } | |
- { name: TSAN, ignore_errors: false } | |
- { name: LEAK, ignore_errors: false, leak_check: true } | |
exclude: | |
# Bug when running with TSAN: "ThreadSanitizer: CHECK failed: sanitizer_deadlock_detector" | |
- BACKEND: rocksdb | |
SANITIZER: { name: TSAN } | |
runs-on: ubuntu-22.04 | |
env: | |
COMPILER: ${{ matrix.COMPILER }} | |
BACKEND: ${{ matrix.BACKEND }} | |
SANITIZER: ${{ matrix.SANITIZER.name }} | |
IGNORE_ERRORS: ${{ matrix.SANITIZER.ignore_errors }} | |
TEST_USE_ROCKSDB: ${{ matrix.BACKEND == 'rocksdb' && '1' || '0' }} | |
DEADLINE_SCALE_FACTOR: ${{ matrix.BACKEND == 'rocksdb' && '2' || '1' }} | |
ASAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:suppressions=../asan_suppressions:detect_leaks=${{ matrix.SANITIZER.leak_check && '1' || '0' }} | |
TSAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:suppressions=../tsan_suppressions | |
UBSAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:print_stacktrace=1 | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Prepare | |
run: sudo -E ci/prepare/linux/prepare.sh | |
- name: Build Tests | |
id: build | |
run: ci/build-tests.sh | |
- name: Core Tests | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: true | |
run: timeout -sKILL 45m ../ci/tests/run-core-tests.sh | |
working-directory: build | |
- name: RPC Tests | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: true | |
run: timeout -sKILL 20m ../ci/tests/run-rpc-tests.sh | |
working-directory: build | |
- name: Reports | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: ${{ env.IGNORE_ERRORS == 'true' }} | |
run: ../ci/tests/show-sanitizer-reports.sh | |
working-directory: build | |
macos_sanitizers: | |
name: macOS [${{ matrix.SANITIZER.name }}] [${{ matrix.BACKEND }} | ${{ matrix.COMPILER }}] ${{ matrix.SANITIZER.ignore_errors && ' (Errors Ignored)' || '' }} | |
timeout-minutes: 120 | |
strategy: | |
fail-fast: false | |
matrix: | |
BACKEND: [ lmdb, rocksdb ] | |
COMPILER: [ clang ] | |
SANITIZER: | |
- { name: UBSAN, ignore_errors: false } | |
- { name: ASAN, ignore_errors: false } | |
- { name: TSAN, ignore_errors: false } | |
runs-on: macos-14 | |
env: | |
COMPILER: ${{ matrix.COMPILER }} | |
BACKEND: ${{ matrix.BACKEND }} | |
SANITIZER: ${{ matrix.SANITIZER.name }} | |
IGNORE_ERRORS: ${{ matrix.SANITIZER.ignore_errors }} | |
TEST_USE_ROCKSDB: ${{ matrix.BACKEND == 'rocksdb' && '1' || '0' }} | |
DEADLINE_SCALE_FACTOR: ${{ matrix.BACKEND == 'rocksdb' && '2' || '1' }} | |
ASAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:suppressions=../asan_suppressions | |
TSAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:suppressions=../tsan_suppressions | |
UBSAN_OPTIONS: log_exe_name=1:log_path=sanitizer_report:print_stacktrace=1 | |
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: "recursive" | |
- name: Prepare | |
run: ci/prepare/macos/prepare.sh | |
- name: Build Tests | |
id: build | |
run: ci/build-tests.sh | |
- name: Core Tests | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: true | |
run: timeout -sKILL 45m ../ci/tests/run-core-tests.sh | |
working-directory: build | |
- name: RPC Tests | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: true | |
run: timeout -sKILL 20m ../ci/tests/run-rpc-tests.sh | |
working-directory: build | |
- name: Reports | |
if: steps.build.outcome == 'success' && (success() || failure()) | |
continue-on-error: ${{ env.IGNORE_ERRORS == 'true' }} | |
run: ../ci/tests/show-sanitizer-reports.sh | |
working-directory: build | |