Skip to content

feat: Enhance GitHub Actions "Code Sanitizers" Workflow #767

feat: Enhance GitHub Actions "Code Sanitizers" Workflow

feat: Enhance GitHub Actions "Code Sanitizers" Workflow #767

Workflow file for this run

name: Code Sanitizers
on: [push, pull_request, workflow_dispatch]
env:
RELEASE: 0
artifact: 0
jobs:
google_sanitizers_linux:
name: ${{ matrix.SANITIZER }} / ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }} / ${{ matrix.COMPILER }}
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
TEST_USE_ROCKSDB: [0, 1]
COMPILER: [clang]
SANITIZER: [ASAN, ASAN_INT, TSAN]
runs-on: ubuntu-20.04
outputs:
issue_reported: ${{ steps.show_report.outputs.issue_reported }}
env:
COMPILER: ${{ matrix.COMPILER }}
TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }}
XSAN: ${{ endsWith(matrix.sanitizer, 'ASAN_INT') && 'ASAN' || matrix.SANITIZER }}
XSAN_SUPPRESSIONS: ${{ endsWith(matrix.SANITIZER, 'TSAN') && 'suppressions=../tsan_suppressions' || '' }}
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
steps:
- name: Checkout
uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Prepare
run: sudo -E ci/prepare/linux/prepare.sh
- name: XSan variable values
run: |
(
echo "XSAN: '${XSAN}'"
echo "XSAN_SUPPRESSIONS: '${XSAN_SUPPRESSIONS}'"
)
- name: Build Tests
id: build_tests
run: ${{ matrix.SANITIZER }}=1 ci/build-ci.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 'core_test rpc_test'
- name: Run core_test
id: core_test
continue-on-error: true
run: |
export ${XSAN}_OPTIONS="${XSAN_SUPPRESSIONS} log_exe_name=1 log_path=sanitizer_report"
timeout -sHUP 45m ./core_test
working-directory: build
- name: Run rpc_test
id: rpc_test
continue-on-error: true
run: |
export ${XSAN}_OPTIONS="${XSAN_SUPPRESSIONS} log_exe_name=1 log_path=sanitizer_report"
timeout -sHUP 20m ./rpc_test
working-directory: build
- name: Test Reports
id: show_report
run: |
(
issue_reported=false
reports=$(ls build/sanitizer_report* 2>/dev/null)
if [[ -n "${reports}" ]]; then
echo "Report Output:"
for report in ${reports}; do
echo "File: $report"
cat ${report}
echo
done
issue_reported=true
else
echo "No report has been generated."
fi
echo "issue_reported=${issue_reported}" >> $GITHUB_OUTPUT
) || exit 0