186 lines
5.6 KiB
YAML
186 lines
5.6 KiB
YAML
name: MacOS & Linux Build
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
platform:
|
|
description: 'Platform identifier'
|
|
required: true
|
|
type: string
|
|
os:
|
|
description: 'GitHub Actions runner OS'
|
|
required: true
|
|
type: string
|
|
compiler:
|
|
description: 'C++ compiler to use (gcc or clang)'
|
|
required: false
|
|
type: string
|
|
default: ''
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
# Build and test matrix (parallel execution)
|
|
build-and-test:
|
|
name: Build & Test (${{ inputs.platform }})
|
|
runs-on: ${{ inputs.os }}
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- os: ${{ inputs.os }}
|
|
platform: ${{ inputs.platform }}
|
|
arch_flag: "" # Use appropriate architecture
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v7
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Setup ccache
|
|
uses: hendrikmuhs/ccache-action@v1.2
|
|
with:
|
|
key: ${{ inputs.platform }}-${{ inputs.os }}-${{ inputs.compiler || 'gcc' }}
|
|
max-size: 150M
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.10'
|
|
cache: 'pip'
|
|
cache-dependency-path: 'pyproject.toml'
|
|
|
|
- name: Install Clang
|
|
if: inputs.compiler == 'clang' && runner.os == 'Linux'
|
|
run: |
|
|
sudo apt-get update -y
|
|
sudo apt-get install -y clang libomp-dev
|
|
shell: bash
|
|
|
|
- name: Install AIO
|
|
if: runner.os == 'Linux' && runner.arch == 'X64'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y --no-install-recommends \
|
|
libaio-dev
|
|
shell: bash
|
|
|
|
- name: Print CPU info
|
|
if: runner.os == 'Linux'
|
|
run: lscpu
|
|
shell: bash
|
|
|
|
- name: Set up environment variables
|
|
run: |
|
|
# Set number of processors for parallel builds
|
|
if [[ "${{ matrix.platform }}" == "macos-arm64" ]]; then
|
|
NPROC=$(sysctl -n hw.ncpu 2>/dev/null || echo 2)
|
|
else
|
|
NPROC=$(nproc 2>/dev/null || echo 2)
|
|
fi
|
|
echo "NPROC=$NPROC" >> $GITHUB_ENV
|
|
echo "Using $NPROC parallel jobs for builds"
|
|
|
|
# Set compiler when clang is requested
|
|
if [[ "${{ inputs.compiler }}" == "clang" ]]; then
|
|
echo "CC=clang" >> $GITHUB_ENV
|
|
echo "CXX=clang++" >> $GITHUB_ENV
|
|
fi
|
|
|
|
# Add Python user base bin to PATH for pip-installed CLI tools
|
|
echo "$(python -c 'import site; print(site.USER_BASE)')/bin" >> $GITHUB_PATH
|
|
shell: bash
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
python -m pip install \
|
|
pybind11==3.0 \
|
|
cmake==3.30.0 \
|
|
ninja==1.11.1 \
|
|
pytest \
|
|
pytest-xdist \
|
|
scikit-build-core \
|
|
setuptools_scm
|
|
shell: bash
|
|
|
|
- name: Check CMake subproject integration
|
|
if: matrix.platform == 'linux-x64'
|
|
run: |
|
|
SMOKE_SOURCE="$RUNNER_TEMP/zvec-subproject-smoke"
|
|
SMOKE_BUILD="$RUNNER_TEMP/zvec-subproject-build"
|
|
|
|
mkdir -p "$SMOKE_SOURCE" "$SMOKE_BUILD"
|
|
cp "$GITHUB_WORKSPACE/.github/cmake/subproject-integration/CMakeLists.txt" \
|
|
"$SMOKE_SOURCE/CMakeLists.txt"
|
|
|
|
cmake -S "$SMOKE_SOURCE" -B "$SMOKE_BUILD" -G Ninja \
|
|
-DZVEC_SOURCE_DIR="$GITHUB_WORKSPACE" \
|
|
-DCMAKE_BUILD_TYPE=Release \
|
|
-DBUILD_TOOLS=OFF \
|
|
-DBUILD_C_BINDINGS=OFF \
|
|
-DBUILD_PYTHON_BINDINGS=OFF \
|
|
-DENABLE_WERROR=ON \
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
shell: bash
|
|
|
|
- name: Build from source
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE"
|
|
|
|
CMAKE_GENERATOR="Ninja" \
|
|
CMAKE_BUILD_PARALLEL_LEVEL="$NPROC" \
|
|
python -m pip install -v . \
|
|
--no-build-isolation \
|
|
--config-settings='cmake.define.BUILD_TOOLS=ON' \
|
|
--config-settings='cmake.define.ENABLE_WERROR=ON' \
|
|
--config-settings='cmake.define.CMAKE_C_COMPILER_LAUNCHER=ccache' \
|
|
--config-settings='cmake.define.CMAKE_CXX_COMPILER_LAUNCHER=ccache' \
|
|
${{ matrix.arch_flag }}
|
|
shell: bash
|
|
|
|
- name: Run C++ Tests
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE/build"
|
|
cmake --build . --target unittest --parallel $NPROC
|
|
shell: bash
|
|
|
|
- name: Run Python Tests
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE"
|
|
python -m pytest python/tests/
|
|
shell: bash
|
|
|
|
- name: Run C++ Examples
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE/examples/c++"
|
|
mkdir build && cd build
|
|
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
cmake --build . --parallel $NPROC
|
|
./db-example
|
|
./core-example
|
|
./ailego-example
|
|
shell: bash
|
|
|
|
- name: Run C Examples
|
|
run: |
|
|
cd "$GITHUB_WORKSPACE/examples/c"
|
|
mkdir build && cd build
|
|
cmake .. -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
|
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
|
|
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
|
cmake --build . --parallel $NPROC
|
|
./c_api_basic_example
|
|
./c_api_collection_schema_example
|
|
./c_api_doc_example
|
|
./c_api_field_schema_example
|
|
./c_api_index_example
|
|
./c_api_optimized_example
|
|
shell: bash
|