name: Reusable Build on: workflow_call: inputs: ref: description: 'Git ref to build' required: false type: string default: '' jobs: build: name: Build ${{ matrix.os }} strategy: matrix: include: - os: ubuntu-latest python: '3.11' - os: macos-latest python: '3.11' runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 with: ref: ${{ inputs.ref }} submodules: recursive - name: Setup Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python }} - name: Install uv uses: astral-sh/setup-uv@v4 - name: Install system dependencies (Ubuntu) if: runner.os == 'Linux' run: | sudo apt-get update sudo apt-get install -y libomp-dev libboost-all-dev protobuf-compiler libzmq3-dev - name: Install system dependencies (macOS) if: runner.os == 'macOS' run: | brew install llvm libomp boost protobuf zeromq - name: Build packages run: | # Build core (platform independent) if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then cd packages/leann-core uv build cd ../.. fi # Build HNSW backend cd packages/leann-backend-hnsw uv pip install --system -r pyproject.toml --extra build if [ "${{ matrix.os }}" == "macos-latest" ]; then CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++ uv build else uv build fi cd ../.. # Build DiskANN backend cd packages/leann-backend-diskann uv pip install --system -r pyproject.toml --extra build if [ "${{ matrix.os }}" == "macos-latest" ]; then CC=$(brew --prefix llvm)/bin/clang CXX=$(brew --prefix llvm)/bin/clang++ uv build else uv build fi cd ../.. # Build meta package (platform independent) if [ "${{ matrix.os }}" == "ubuntu-latest" ]; then cd packages/leann uv build cd ../.. fi echo "📦 Built packages:" find packages/*/dist -name "*.whl" -o -name "*.tar.gz" | sort - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: packages-${{ matrix.os }}-${{ matrix.python }} path: packages/*/dist/