Skip to content

chore: unify build system into pyproject.toml #1

chore: unify build system into pyproject.toml

chore: unify build system into pyproject.toml #1

Workflow file for this run

# 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