Skip to content

feat: CSR graph caching for 2x algorithm speedup (#10) #17

feat: CSR graph caching for 2x algorithm speedup (#10)

feat: CSR graph caching for 2x algorithm speedup (#10) #17

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
# =============================================================================
# Fast Tests - Run first on all PRs and pushes
# =============================================================================
build-and-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev libcunit1-dev
- name: Build extension
run: make extension
- name: Run unit tests
run: make test-unit
- name: Run functional tests
run: make test-functional
rust-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev
- name: Build extension
run: make extension
- name: Copy extension to Rust libs
run: |
mkdir -p bindings/rust/libs
cp build/graphqlite.so bindings/rust/libs/graphqlite-linux-x86_64.so
- name: Cargo check
working-directory: bindings/rust
run: cargo check
- name: Cargo clippy
working-directory: bindings/rust
run: cargo clippy -- -D warnings
python-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev
- name: Build extension
run: make extension
- name: Install Python package
working-directory: bindings/python
run: pip install -e ".[dev]"
- name: Run Python tests
working-directory: bindings/python
run: pytest tests/ -v
windows-build:
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v4
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-sqlite3
mingw-w64-x86_64-libsystre
bison
flex
make
- name: Build extension
run: make extension
- name: Run functional tests
run: make test-functional
# =============================================================================
# Full Tests - Run after fast tests pass
# =============================================================================
full-build-unix:
needs: [build-and-test, rust-check, python-check, windows-build]
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev libcunit1-dev
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install bison flex sqlite cunit
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
echo "$(brew --prefix flex)/bin" >> $GITHUB_PATH
echo "HOMEBREW_PREFIX=$(brew --prefix)" >> $GITHUB_ENV
echo "SQLITE_PREFIX=$(brew --prefix sqlite)" >> $GITHUB_ENV
- name: Build extension
run: make extension
- name: Run unit tests (Linux)
if: runner.os == 'Linux'
run: make test-unit
- name: Run unit tests (macOS)
if: runner.os == 'macOS'
run: make test-unit EXTRA_INCLUDES="-I$HOMEBREW_PREFIX/include" EXTRA_LIBS="-L$HOMEBREW_PREFIX/lib"
- name: Run functional tests (Linux)
if: runner.os == 'Linux'
run: make test-functional
- name: Run functional tests (macOS)
if: runner.os == 'macOS'
run: make test-functional EXTRA_INCLUDES="-I$HOMEBREW_PREFIX/include" EXTRA_LIBS="-L$HOMEBREW_PREFIX/lib" SQLITE="$SQLITE_PREFIX/bin/sqlite3"
full-rust-tests:
needs: [build-and-test, rust-check, python-check, windows-build]
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
lib_name: graphqlite-linux-x86_64.so
ext_file: graphqlite.so
- os: macos-latest
lib_name: graphqlite-macos-aarch64.dylib
ext_file: graphqlite.dylib
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Install dependencies (Linux)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev
- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: |
brew install bison flex sqlite
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
echo "$(brew --prefix flex)/bin" >> $GITHUB_PATH
- name: Build extension
run: make extension
- name: Copy extension to Rust libs
run: |
mkdir -p bindings/rust/libs
cp build/${{ matrix.ext_file }} bindings/rust/libs/${{ matrix.lib_name }}
- name: Run Rust tests
working-directory: bindings/rust
run: cargo test --lib --test integration -- --test-threads=1
full-python-tests-linux:
needs: [build-and-test, rust-check, python-check, windows-build]
strategy:
fail-fast: false
matrix:
python-version: ['3.9', '3.10', '3.11', '3.12']
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev
- name: Build extension
run: make extension
- name: Install Python package
working-directory: bindings/python
run: pip install -e ".[dev]"
- name: Run Python tests
working-directory: bindings/python
run: pytest tests/ -v
full-python-tests-macos:
needs: [build-and-test, rust-check, python-check, windows-build]
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
brew install bison flex sqlite python@3.11
echo "$(brew --prefix bison)/bin" >> $GITHUB_PATH
echo "$(brew --prefix flex)/bin" >> $GITHUB_PATH
echo "$(brew --prefix python@3.11)/libexec/bin" >> $GITHUB_PATH
- name: Build extension
run: make extension
- name: Install Python package
run: python3 -m pip install -e "./bindings/python[dev]"
- name: Run Python tests
working-directory: bindings/python
run: |
SQLITE_PREFIX=$(brew --prefix sqlite)
DYLD_LIBRARY_PATH="$SQLITE_PREFIX/lib:$DYLD_LIBRARY_PATH" python3 -m pytest tests/ -v
full-windows-tests:
needs: [build-and-test, rust-check, python-check, windows-build]
runs-on: windows-latest
defaults:
run:
shell: msys2 {0}
steps:
- uses: actions/checkout@v4
- name: Setup MSYS2
uses: msys2/setup-msys2@v2
with:
msystem: MINGW64
update: true
install: >-
mingw-w64-x86_64-gcc
mingw-w64-x86_64-sqlite3
mingw-w64-x86_64-libsystre
bison
flex
make
- name: Build extension
run: make extension
- name: Run functional tests
run: make test-functional
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install and test Python bindings
shell: bash
run: |
pip install -e "./bindings/python[dev]"
cd bindings/python && pytest tests/ -v
- name: Copy extension to Rust libs
run: |
mkdir -p bindings/rust/libs
cp build/graphqlite.dll bindings/rust/libs/graphqlite-windows-x86_64.dll
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Test Rust bindings
shell: bash
working-directory: bindings/rust
run: cargo test --lib --test integration -- --test-threads=1
# =============================================================================
# Performance Tests - Main branch only
# =============================================================================
performance-tests:
if: github.ref == 'refs/heads/main'
needs: [build-and-test, rust-check, python-check, windows-build]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y bison flex libsqlite3-dev bc
- name: Build extension
run: make extension
- name: Run performance tests
run: make performance