1+ name : TidesDB Python CI
2+
3+ on :
4+ push :
5+ branches : [ "master" ]
6+ pull_request :
7+ branches : [ "master" ]
8+ workflow_dispatch :
9+
10+ jobs :
11+ build-and-test :
12+ strategy :
13+ fail-fast : false
14+ matrix :
15+ include :
16+ - os : ubuntu-latest
17+ name : Linux x64
18+ - os : macos-latest
19+ name : macOS x64
20+ - os : windows-latest
21+ name : Windows x64
22+
23+ runs-on : ${{ matrix.os }}
24+ name : ${{ matrix.name }}
25+
26+ steps :
27+ - name : Checkout tidesdb-python repo
28+ uses : actions/checkout@v4
29+ with :
30+ repository : tidesdb/tidesdb-python
31+ path : tidesdb-python
32+
33+ - name : Checkout tidesdb repo
34+ uses : actions/checkout@v4
35+ with :
36+ repository : tidesdb/tidesdb
37+ path : tidesdb
38+
39+ - name : Install dependencies (Linux)
40+ if : runner.os == 'Linux'
41+ run : |
42+ sudo apt update
43+ sudo apt install -y libzstd-dev liblz4-dev libsnappy-dev build-essential cmake pkg-config
44+
45+ - name : Install dependencies (macOS)
46+ if : runner.os == 'macOS'
47+ run : brew install zstd lz4 snappy
48+
49+ - name : Setup MSYS2 (Windows)
50+ if : runner.os == 'Windows'
51+ uses : msys2/setup-msys2@v2
52+ with :
53+ msystem : MINGW64
54+ update : true
55+ install : >-
56+ mingw-w64-x86_64-gcc
57+ mingw-w64-x86_64-cmake
58+ mingw-w64-x86_64-make
59+ mingw-w64-x86_64-zstd
60+ mingw-w64-x86_64-lz4
61+ mingw-w64-x86_64-snappy
62+ mingw-w64-x86_64-python
63+ mingw-w64-x86_64-python-pip
64+
65+ - name : Configure and build TidesDB (Linux)
66+ if : runner.os == 'Linux'
67+ run : |
68+ cd tidesdb
69+ cmake -S . -B build -DTIDESDB_BUILD_TESTS=OFF -DTIDESDB_WITH_SANITIZER=OFF
70+ cmake --build build --config Release
71+ sudo cmake --install build
72+ sudo ldconfig
73+
74+ - name : Configure and build TidesDB (macOS)
75+ if : runner.os == 'macOS'
76+ run : |
77+ cd tidesdb
78+ export HOMEBREW_PREFIX=$(brew --prefix)
79+ cmake -S . -B build \
80+ -DTIDESDB_BUILD_TESTS=OFF \
81+ -DTIDESDB_WITH_SANITIZER=OFF \
82+ -DCMAKE_PREFIX_PATH="${HOMEBREW_PREFIX}"
83+ cmake --build build --config Release
84+ sudo cmake --install build
85+
86+ - name : Create CMake config files for MSYS2 packages (Windows)
87+ if : runner.os == 'Windows'
88+ shell : msys2 {0}
89+ run : |
90+ MINGW_PREFIX_WIN=$(cygpath -m /mingw64)
91+
92+ mkdir -p /mingw64/lib/cmake/lz4
93+ mkdir -p /mingw64/lib/cmake/zstd
94+ mkdir -p /mingw64/lib/cmake/Snappy
95+ mkdir -p /mingw64/lib/cmake/PThreads4W
96+
97+ cat > /mingw64/lib/cmake/lz4/lz4-config.cmake << EOF
98+ if(NOT TARGET lz4::lz4)
99+ add_library(lz4::lz4 SHARED IMPORTED)
100+ set_target_properties(lz4::lz4 PROPERTIES
101+ IMPORTED_LOCATION "${MINGW_PREFIX_WIN}/bin/liblz4.dll"
102+ IMPORTED_IMPLIB "${MINGW_PREFIX_WIN}/lib/liblz4.dll.a"
103+ INTERFACE_INCLUDE_DIRECTORIES "${MINGW_PREFIX_WIN}/include"
104+ )
105+ endif()
106+ EOF
107+
108+ cat > /mingw64/lib/cmake/zstd/zstd-config.cmake << EOF
109+ if(NOT TARGET zstd::libzstd_shared)
110+ add_library(zstd::libzstd_shared SHARED IMPORTED)
111+ set_target_properties(zstd::libzstd_shared PROPERTIES
112+ IMPORTED_LOCATION "${MINGW_PREFIX_WIN}/bin/libzstd.dll"
113+ IMPORTED_IMPLIB "${MINGW_PREFIX_WIN}/lib/libzstd.dll.a"
114+ INTERFACE_INCLUDE_DIRECTORIES "${MINGW_PREFIX_WIN}/include"
115+ )
116+ endif()
117+ EOF
118+
119+ cat > /mingw64/lib/cmake/Snappy/Snappy-config.cmake << EOF
120+ if(NOT TARGET Snappy::snappy)
121+ add_library(Snappy::snappy SHARED IMPORTED)
122+ set_target_properties(Snappy::snappy PROPERTIES
123+ IMPORTED_LOCATION "${MINGW_PREFIX_WIN}/bin/libsnappy.dll"
124+ IMPORTED_IMPLIB "${MINGW_PREFIX_WIN}/lib/libsnappy.dll.a"
125+ INTERFACE_INCLUDE_DIRECTORIES "${MINGW_PREFIX_WIN}/include"
126+ )
127+ endif()
128+ EOF
129+
130+ cat > /mingw64/lib/cmake/PThreads4W/PThreads4W-config.cmake << EOF
131+ if(NOT TARGET PThreads4W::PThreads4W)
132+ add_library(PThreads4W::PThreads4W SHARED IMPORTED)
133+ set_target_properties(PThreads4W::PThreads4W PROPERTIES
134+ IMPORTED_LOCATION "${MINGW_PREFIX_WIN}/bin/libwinpthread-1.dll"
135+ IMPORTED_IMPLIB "${MINGW_PREFIX_WIN}/lib/libpthread.dll.a"
136+ INTERFACE_INCLUDE_DIRECTORIES "${MINGW_PREFIX_WIN}/include"
137+ )
138+ endif()
139+ EOF
140+
141+ - name : Configure and build TidesDB (Windows)
142+ if : runner.os == 'Windows'
143+ shell : msys2 {0}
144+ run : |
145+ cd tidesdb
146+ cmake -G "MinGW Makefiles" \
147+ -DCMAKE_MAKE_PROGRAM=mingw32-make \
148+ -DCMAKE_PREFIX_PATH=/mingw64 \
149+ -DTIDESDB_WITH_SANITIZER=OFF \
150+ -DTIDESDB_BUILD_TESTS=OFF \
151+ -DBUILD_SHARED_LIBS=ON \
152+ -S . -B build
153+ cmake --build build --config Release
154+ cmake --install build --prefix /mingw64
155+ cp build/libtidesdb.dll /mingw64/bin/
156+
157+ - name : Install Python
158+ uses : actions/setup-python@v5
159+ with :
160+ python-version : ' 3.12'
161+
162+ - name : Run Python tests (Linux)
163+ if : runner.os == 'Linux'
164+ run : |
165+ cd tidesdb-python
166+ pip install -e ".[dev]"
167+ pytest -v
168+
169+ - name : Run Python tests (macOS)
170+ if : runner.os == 'macOS'
171+ run : |
172+ cd tidesdb-python
173+ pip install -e ".[dev]"
174+ pytest -v
175+
176+ - name : Run Python tests (Windows)
177+ if : runner.os == 'Windows'
178+ shell : msys2 {0}
179+ run : |
180+ export PATH="/mingw64/bin:/mingw64/lib:$PATH"
181+ cd tidesdb-python
182+ python -m venv venv
183+ source venv/bin/activate
184+ pip install pytest pytest-cov
185+ pip install -e .
186+ pytest -v --no-cov
0 commit comments