Skip to content

add CI workflow for Ruby ASAN (AddressSanitizer) testing #6

add CI workflow for Ruby ASAN (AddressSanitizer) testing

add CI workflow for Ruby ASAN (AddressSanitizer) testing #6

name: Ruby ASAN
on:
push:
branches:
- main
pull_request:
types:
- opened
- synchronize
- reopened
concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
test:
runs-on: ubuntu-24.04
timeout-minutes: 30
strategy:
matrix:
duckdb: ['1.4.4', '1.3.2']
steps:
- uses: actions/checkout@v6
- name: Set up Ruby with ASAN
uses: ruby/setup-ruby@v1
with:
ruby-version: asan
bundler-cache: true
- name: duckdb cache
id: duckdb-cache
uses: actions/cache@v5
with:
path: duckdb-v${{ matrix.duckdb }}
key: ${{ runner.os }}-duckdb-v${{ matrix.duckdb }}
- name: Build duckdb ${{ matrix.duckdb }}
env:
DUCKDB_VERSION: ${{ matrix.duckdb }}
if: steps.duckdb-cache.outputs.cache-hit != 'true'
run: |
git clone -b v$DUCKDB_VERSION https://github.com/duckdb/duckdb.git duckdb-tmp-v$DUCKDB_VERSION
cd duckdb-tmp-v$DUCKDB_VERSION && make && cd ..
rm -rf duckdb-v$DUCKDB_VERSION
mkdir -p duckdb-v$DUCKDB_VERSION/build/release/src duckdb-v$DUCKDB_VERSION/src
cp -rip duckdb-tmp-v$DUCKDB_VERSION/build/release/src/*.so duckdb-v$DUCKDB_VERSION/build/release/src
cp -rip duckdb-tmp-v$DUCKDB_VERSION/src/include duckdb-v$DUCKDB_VERSION/src/
- name: bundle install
env:
DUCKDB_VERSION: ${{ matrix.duckdb }}
run: |
bundle install --jobs 4 --retry 3
- name: Build with ASAN Ruby
env:
DUCKDB_VERSION: ${{ matrix.duckdb }}
run: |
bundle exec rake build -- --with-duckdb-include=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/src/include --with-duckdb-lib=${GITHUB_WORKSPACE}/duckdb-v${DUCKDB_VERSION}/build/release/src/
- name: Run tests with ASAN
env:
DUCKDB_VERSION: ${{ matrix.duckdb }}
run: |
# LD_PRELOAD resolves __cxa_throw ASAN CHECK failure when DuckDB (built
# without ASAN) throws C++ exceptions internally.
# See: https://github.com/google/sanitizers/issues/934
export LD_PRELOAD="$(realpath "$(gcc -print-file-name=libstdc++.so)")"
rake test
post-test:
name: All ASAN tests passed
runs-on: ubuntu-latest
needs: test
steps:
- run: echo ok