Skip to content

Enable multi-threaded execution for TableFunction #38

Enable multi-threaded execution for TableFunction

Enable multi-threaded execution for TableFunction #38

name: Ubuntu
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-latest
timeout-minutes: 120
strategy:
matrix:
ruby: ['3.2.9', '3.3.10', '3.4.9', '4.0.2', 'head']
duckdb: ['1.4.4', '1.5.1']
services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
MYSQL_USER: test_user
MYSQL_PASSWORD: test_password
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
steps:
- uses: actions/checkout@v4
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
- name: duckdb cache
id: duckdb-cache
uses: actions/cache@v4
with:
path: libduckdb-linux-amd64
key: ${{ runner.os }}-duckdb-v${{ matrix.duckdb }}
- name: Download duckdb ${{ matrix.duckdb }}
if: steps.duckdb-cache.outputs.cache-hit != 'true'
env:
DUCKDB_VERSION: ${{ matrix.duckdb }}
run: |
curl -OL https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/libduckdb-linux-amd64.zip
case "${DUCKDB_VERSION}" in
"1.5.1") EXPECTED_SHA256="21aec66a60eae1696270ba715a481ab066a88d99a62718d0577579ac1a7a4834" ;;
"1.4.4") EXPECTED_SHA256="09cc288295964d897b47665d1898e16e8ef176cae9ea615797fc136eae15bd5d" ;;
*) echo "No known SHA256 for DuckDB v${DUCKDB_VERSION}"; exit 1 ;;
esac
echo "${EXPECTED_SHA256} libduckdb-linux-amd64.zip" | sha256sum -c
mkdir libduckdb-linux-amd64
unzip libduckdb-linux-amd64.zip -d libduckdb-linux-amd64
- name: setup libduckdb.so
run: |
sudo cp libduckdb-linux-amd64/libduckdb.so /usr/local/lib/
sudo ldconfig
- name: bundle install with Ruby ${{ matrix.ruby }}
run: |
bundle install --jobs 4 --retry 3
- name: Build test with DUCKDB_API_NO_DEPRECATED and Ruby ${{ matrix.ruby }}
run: |
env DUCKDB_API_NO_DEPRECATED=1 bundle exec rake build -- --with-duckdb-include=${GITHUB_WORKSPACE}/libduckdb-linux-amd64 --with-duckdb-lib=${GITHUB_WORKSPACE}/libduckdb-linux-amd64
bundle exec rake clean
- name: Build with Ruby ${{ matrix.ruby }}
run: |
bundle exec rake build -- --with-duckdb-include=${GITHUB_WORKSPACE}/libduckdb-linux-amd64 --with-duckdb-lib=${GITHUB_WORKSPACE}/libduckdb-linux-amd64
- name: confirm duckdb library version
env:
EXPECTED_DUCKDB_VERSION: ${{ matrix.duckdb }}
run: |
ruby -Ilib -rduckdb -e '
actual = DuckDB::LIBRARY_VERSION
expected = ENV.fetch("EXPECTED_DUCKDB_VERSION")
abort("Expected DuckDB #{expected}, got #{actual}") if actual != expected
puts "duckdb library #{actual}"
'
- name: test with Ruby ${{ matrix.ruby }}
env:
MYSQL_TEST: 1
run: |
env RUBYOPT=-W:deprecated rake test
post-test:
name: All tests passed on Ubuntu
runs-on: ubuntu-latest
needs: test
steps:
- run: echo ok