343 lines
11 KiB
YAML
343 lines
11 KiB
YAML
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
|