add CI workflow for Ruby ASAN (AddressSanitizer) testing #6
This file contains hidden or 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: 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 |