chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
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
|
||||
Reference in New Issue
Block a user