chore: unify build system into pyproject.toml #2
This file contains 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
# yamllint disable rule:line-length | |
name: Build and test | |
on: # yamllint disable-line rule:truthy | |
workflow_dispatch: | |
push: | |
branches: | |
- master | |
- main | |
- dev | |
- release* | |
tags: | |
- v* | |
pull_request: | |
branches: | |
- master | |
- main | |
- dev | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
librocksdb: | |
name: Build librocksdb-${{ matrix.rocksdb-version }} | |
runs-on: ubuntu-22.04 | |
env: | |
LIBROCKSDB_PATH: /opt/rocksdb | |
strategy: | |
fail-fast: false | |
matrix: | |
rocksdb-version: ['v6.29.5', 'v7.10.2', 'v8.11.4', 'v9.10.0'] | |
steps: | |
- uses: actions/cache@v4 | |
id: cache-librocksdb | |
with: | |
key: librocksdb-${{ matrix.rocksdb-version }} | |
path: ${{ env.LIBROCKSDB_PATH }} | |
- name: Install libraries | |
if: steps.cache-librocksdb.outputs.cache-hit != 'true' | |
run: sudo apt install -y libbz2-dev zlib1g-dev libzstd-dev libsnappy-dev liblz4-dev g++ make | |
- uses: actions/checkout@v4 | |
name: Checkout RocksDB repository | |
if: steps.cache-librocksdb.outputs.cache-hit != 'true' | |
with: | |
repository: facebook/rocksdb | |
path: ./rocksdb | |
ref: ${{ matrix.rocksdb-version }} | |
- name: Build RocksDB ${{ matrix.rocksdb-version }} | |
if: steps.cache-librocksdb.outputs.cache-hit != 'true' | |
working-directory: ./rocksdb | |
run: | | |
make shared_lib -j8 DISABLE_WARNING_AS_ERROR=1 | |
sudo make install-shared PREFIX=${{ env.LIBROCKSDB_PATH }} | |
sudo make install-headers PREFIX=${{ env.LIBROCKSDB_PATH }} | |
test-linux: | |
name: Test on Python ${{ matrix.python-version}} with librocksdb-${{ matrix.rocksdb-version }} | |
needs: librocksdb | |
runs-on: ubuntu-latest | |
env: | |
LIBROCKSDB_PATH: /opt/rocksdb | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
rocksdb-version: ['v6.29.5', 'v7.10.2', 'v8.11.4', 'v9.10.0'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: astral-sh/setup-uv@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
enable-cache: false | |
- name: Install libraries | |
run: sudo apt install -y libbz2-dev zlib1g-dev libzstd-dev libsnappy-dev liblz4-dev g++ make | |
- name: Restore librocksdb-${{ matrix.rocksdb-version }} from cache | |
uses: actions/cache@v4 | |
id: cache-librocksdb | |
with: | |
key: librocksdb-${{ matrix.rocksdb-version }} | |
path: ${{ env.LIBROCKSDB_PATH }} | |
fail-on-cache-miss: true | |
- name: Build python-rocksdb | |
env: | |
CPPFLAGS: -I${{ env.LIBROCKSDB_PATH }}/include | |
LDFLAGS: -L${{ env.LIBROCKSDB_PATH }}/lib | |
run: | | |
uv venv | |
uv pip install --editable .[test] | |
- name: Run tests | |
env: | |
LD_LIBRARY_PATH: ${{ env.LIBROCKSDB_PATH }}/lib | |
run: | | |
uvx pytest | |
test-macos: | |
name: Test on Python ${{ matrix.python-version}} with librocksdb from homebrew | |
runs-on: macos-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: astral-sh/setup-uv@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
enable-cache: false | |
- name: Install libraries | |
run: brew install rocksdb snappy | |
- name: Build python-rocksdb | |
run: | | |
uv venv | |
uv pip install --editable .[test] | |
- name: Run tests | |
run: | | |
uvx pytest | |
test-debian: | |
name: Test on Python ${{ matrix.python-version}} with Debian ${{ matrix.debian-dist }} librocksdb | |
runs-on: ubuntu-latest | |
container: debian:${{ matrix.debian-dist }}-slim | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: ['3.10', '3.11', '3.12', '3.13'] | |
debian-dist: [bullseye, bookworm] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: astral-sh/setup-uv@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
enable-cache: false | |
- name: Install libraries | |
run: | | |
apt update | |
apt install -y build-essential librocksdb-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev | |
- name: Build python-rocksdb | |
run: | | |
uv venv | |
uv pip install --editable .[test] | |
- name: Run tests | |
run: | | |
uvx pytest |