122 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
| 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-24.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
 | |
| 
 | 
