This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Main | ||
| on: | ||
| workflow_call: | ||
| inputs: | ||
| platform: | ||
| description: 'Platform identifier' | ||
| required: true | ||
| type: string | ||
| os: | ||
| description: 'GitHub Actions runner OS' | ||
| required: true | ||
| type: string | ||
| # Allow manual testing | ||
| workflow_dispatch: | ||
| inputs: | ||
| platform: | ||
| description: 'Platform identifier' | ||
| required: true | ||
| type: string | ||
| default: 'linux-x64' | ||
| os: | ||
| description: 'GitHub Actions runner OS' | ||
| required: true | ||
| type: string | ||
| default: 'ubuntu-24.04' | ||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || '' }}-${{ github.base_ref || '' }}-${{ github.ref != 'refs/heads/main' || github.sha }} | ||
| cancel-in-progress: true | ||
| permissions: | ||
| contents: read | ||
| jobs: | ||
| # Build and test matrix (parallel execution) | ||
| build-and-test: | ||
| name: Build & Test (${{ inputs.platform }}) | ||
| runs-on: ${{ inputs.os }} | ||
| steps: | ||
| - name: Debug Build Start | ||
| run: | | ||
| echo "=== Build Started ===" | ||
| echo "Platform: ${{ inputs.platform }}" | ||
| echo "OS: ${{ inputs.os }}" | ||
| echo "GitHub Ref: ${{ github.ref }}" | ||
| echo "=====================" | ||
| 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: 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" | ||
| # 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 | ||