name: Weekly Linux RISC-V Build on: schedule: # Saturday 00:00 UTC+8 (Friday 16:00 UTC) - cron: '0 16 * * 5' workflow_dispatch: permissions: contents: read env: RISE_PYPI: https://gitlab.com/api/v4/projects/56254198/packages/pypi/simple PIP_BREAK_SYSTEM_PACKAGES: 1 jobs: build: name: Build (linux-riscv64) runs-on: ubuntu-24.04-riscv steps: - name: Checkout code uses: actions/checkout@v7 with: submodules: recursive - name: Install build dependencies run: | sudo mkdir -p /var/lib/dpkg/updates sudo mkdir -p /var/lib/apt/lists/ sudo mkdir -p /var/cache/apt/archives/ sudo touch /var/lib/dpkg/status sudo apt-get purge -y byobu || true sudo apt-get update -o Dpkg::Lock::Timeout=300 sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ -o Dpkg::Lock::Timeout=300 \ ccache python3-pybind11 pybind11-dev shell: bash - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: linux-riscv64-${{ runner.os }}-gcc max-size: 150M - name: Build from source run: | cd "$GITHUB_WORKSPACE" NPROC=$(nproc 2>/dev/null || echo 2) echo "Using $NPROC parallel jobs for builds" cmake -S . -B build \ -G "Unix Makefiles" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TOOLS=ON \ -DBUILD_PYTHON_BINDINGS=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache make -C build -j"$NPROC" shell: bash - name: Archive entire workspace run: | cd "$GITHUB_WORKSPACE" tar -cf linux-riscv64-workspace.tar . shell: bash - name: Upload workspace artifacts uses: actions/upload-artifact@v7 with: name: linux-riscv64-workspace path: ${{ github.workspace }}/linux-riscv64-workspace.tar if-no-files-found: error cpp-tests: name: C++ Tests runs-on: ubuntu-24.04-riscv needs: build steps: - name: Download workspace artifacts uses: actions/download-artifact@v8 with: name: linux-riscv64-workspace path: ${{ github.workspace }} - name: Extract workspace run: | cd "$GITHUB_WORKSPACE" tar -xf linux-riscv64-workspace.tar shell: bash - name: Install test dependencies run: | sudo mkdir -p /var/lib/dpkg/updates sudo mkdir -p /var/lib/apt/lists/ sudo mkdir -p /var/cache/apt/archives/ sudo touch /var/lib/dpkg/status sudo apt-get purge -y byobu || true sudo apt-get update -o Dpkg::Lock::Timeout=300 sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ -o Dpkg::Lock::Timeout=300 \ ccache python3-pybind11 pybind11-dev libgtest-dev liburing-dev shell: bash - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: linux-riscv64-${{ runner.os }}-gcc max-size: 150M - name: Reconfigure build directory run: | cd "$GITHUB_WORKSPACE" cmake -S . -B build \ -G "Unix Makefiles" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TOOLS=ON \ -DBUILD_PYTHON_BINDINGS=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache shell: bash - name: Run C++ Tests run: | cd "$GITHUB_WORKSPACE/build" NPROC=$(nproc 2>/dev/null || echo 2) make unittest -j"$NPROC" shell: bash python-tests: name: Python Tests runs-on: ubuntu-24.04-riscv needs: build steps: - name: Select Python run: | if command -v python3 >/dev/null 2>&1; then PYTHON_BIN=python3 elif command -v python >/dev/null 2>&1; then PYTHON_BIN=python else echo "No local Python interpreter found on PATH" exit 1 fi "$PYTHON_BIN" --version echo "PYTHON=$PYTHON_BIN" >> "$GITHUB_ENV" shell: bash - name: Download workspace artifacts uses: actions/download-artifact@v8 with: name: linux-riscv64-workspace path: ${{ github.workspace }} - name: Extract workspace run: | cd "$GITHUB_WORKSPACE" tar -xf linux-riscv64-workspace.tar echo "$($PYTHON -c 'import site; print(site.USER_BASE)')/bin" >> "$GITHUB_PATH" shell: bash - name: Cache pip uses: actions/cache@v6 with: path: ~/.cache/pip key: linux-riscv64-${{ runner.os }}-pip-${{ hashFiles('pyproject.toml') }} restore-keys: | linux-riscv64-${{ runner.os }}-pip- - name: Install dependencies run: | sudo mkdir -p /var/lib/dpkg/updates sudo mkdir -p /var/lib/apt/lists/ sudo mkdir -p /var/cache/apt/archives/ sudo touch /var/lib/dpkg/status sudo apt-get purge -y byobu || true sudo apt-get update -o Dpkg::Lock::Timeout=300 sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ -o Dpkg::Lock::Timeout=300 \ ccache libgtest-dev liburing-dev $PYTHON -m pip install --upgrade pip $PYTHON -m pip install numpy==2.2.2 cmake==3.30.0 ninja==1.11.1.1 --index-url "$RISE_PYPI" $PYTHON -m pip install pybind11==3.0 pytest scikit-build-core setuptools_scm pytest-xdist shell: bash - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: linux-riscv64-${{ runner.os }}-gcc max-size: 150M - name: Reconfigure build directory run: | cd "$GITHUB_WORKSPACE" cmake -S . -B build \ -G "Unix Makefiles" \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_TOOLS=ON \ -DBUILD_PYTHON_BINDINGS=ON \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ -Dpybind11_DIR="$($PYTHON -c 'import pybind11; print(pybind11.get_cmake_dir())')" shell: bash - name: Install from existing build directory run: | cd "$GITHUB_WORKSPACE" NPROC=$(nproc 2>/dev/null || echo 2) export SKBUILD_BUILD_DIR="$GITHUB_WORKSPACE/build" CMAKE_GENERATOR="Unix Makefiles" \ 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' shell: bash - name: Run Python Tests run: | cd "$GITHUB_WORKSPACE" $PYTHON -m pytest python/tests/ shell: bash cpp-examples: name: C++ Examples runs-on: ubuntu-24.04-riscv needs: build steps: - name: Download workspace artifacts uses: actions/download-artifact@v8 with: name: linux-riscv64-workspace path: ${{ github.workspace }} - name: Extract workspace run: | cd "$GITHUB_WORKSPACE" tar -xf linux-riscv64-workspace.tar shell: bash - name: Install ccache run: | sudo mkdir -p /var/lib/dpkg/updates sudo mkdir -p /var/lib/apt/lists/ sudo mkdir -p /var/cache/apt/archives/ sudo touch /var/lib/dpkg/status sudo apt-get purge -y byobu || true sudo apt-get update -o Dpkg::Lock::Timeout=300 sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ -o Dpkg::Lock::Timeout=300 \ ccache shell: bash - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: linux-riscv64-${{ runner.os }}-gcc max-size: 150M - name: Run C++ Examples run: | cd "$GITHUB_WORKSPACE/examples/c++" NPROC=$(nproc 2>/dev/null || echo 2) mkdir -p build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache make -j "$NPROC" ./db-example ./core-example ./ailego-example shell: bash c-examples: name: C Examples runs-on: ubuntu-24.04-riscv needs: build steps: - name: Download workspace artifacts uses: actions/download-artifact@v8 with: name: linux-riscv64-workspace path: ${{ github.workspace }} - name: Extract workspace run: | cd "$GITHUB_WORKSPACE" tar -xf linux-riscv64-workspace.tar shell: bash - name: Install ccache run: | sudo mkdir -p /var/lib/dpkg/updates sudo mkdir -p /var/lib/apt/lists/ sudo mkdir -p /var/cache/apt/archives/ sudo touch /var/lib/dpkg/status sudo apt-get purge -y byobu || true sudo apt-get update -o Dpkg::Lock::Timeout=300 sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq \ -o Dpkg::Options::="--force-confdef" \ -o Dpkg::Options::="--force-confold" \ -o Dpkg::Lock::Timeout=300 \ ccache shell: bash - name: Setup ccache uses: hendrikmuhs/ccache-action@v1.2 with: key: linux-riscv64-${{ runner.os }}-gcc max-size: 150M - name: Run C Examples run: | cd "$GITHUB_WORKSPACE/examples/c" NPROC=$(nproc 2>/dev/null || echo 2) mkdir -p build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_C_COMPILER_LAUNCHER=ccache \ -DCMAKE_CXX_COMPILER_LAUNCHER=ccache 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