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@v6 with: submodules: recursive - 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: 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 \ pybind11==3.0 \ cmake==3.30.0 \ ninja==1.11.1 \ pytest \ scikit-build-core \ setuptools_scm shell: bash - name: Build from source run: | cd "$GITHUB_WORKSPACE" CMAKE_GENERATOR="Unix Makefiles" \ CMAKE_BUILD_PARALLEL_LEVEL="$NPROC" \ python -m pip install -v . \ --no-build-isolation \ --config-settings='cmake.define.BUILD_TOOLS="ON"' \ ${{ matrix.arch_flag }} shell: bash - name: Run C++ Tests run: | cd "$GITHUB_WORKSPACE/build" make unittest -j$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 .. -DCMAKE_BUILD_TYPE=Release make -j $NPROC ./db-example ./core-example ./ailego-example shell: bash - name: Run C Examples run: | cd "$GITHUB_WORKSPACE/examples/c" mkdir build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j $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