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