Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
140 changes: 140 additions & 0 deletions .github/workflows/ob441-reg.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
name: ob441 Regression Tests

on:
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to test (e.g., 123). Leave empty if using ref instead.'
required: false
type: string
ref:
description: 'Branch, tag, or commit SHA to test (e.g., feature-branch or abc123). Leave empty if using PR number.'
required: false
type: string

jobs:
regression:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11"]
fail-fast: false

steps:
- name: Get PR SHA (if PR number provided)
if: github.event.inputs.pr_number != ''
id: get_pr_sha
uses: actions/github-script@v7
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const prNumber = context.payload.inputs.pr_number;
const { data: pr } = await github.rest.pulls.get({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: parseInt(prNumber)
});
console.log(`PR #${prNumber} head SHA: ${pr.head.sha}`);
core.setOutput('sha', pr.head.sha);

- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.pr_number != '' && steps.get_pr_sha.outputs.sha || github.event.inputs.ref || github.ref }}
fetch-depth: 0

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
cache: 'pip'

- name: Upgrade pip
run: |
python -m pip install --upgrade pip
pip install --upgrade setuptools wheel

- name: Cache pip dependencies
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/pyproject.toml') }}
restore-keys: |
${{ runner.os }}-pip-

- name: Install dependencies
run: |
pip install -e ".[dev,test]"

- name: Deploy OceanBase CE 4.4.1
run: |
# Remove existing container if it exists
sudo docker rm -f oceanbase 2>/dev/null || true
# Start OceanBase CE 4.4.1 container
sudo docker run -d -p 10001:2881 -e MEMORY_LIMIT=4G -e LOG_DISK_SIZE=4G -e DATAFILE_SIZE=4G -e DATAFILE_NEXT=4G -e DATAFILE_MAXSIZE=10G --name oceanbase oceanbase/oceanbase-ce:4.4.1.0-100010012025120515
# Wait for database to be ready
echo "Waiting for OceanBase to be ready..."
timeout=60
elapsed=0
while [ $elapsed -lt $timeout ]; do
if sudo docker exec oceanbase mysql -uroot -e "SELECT 1" > /dev/null 2>&1; then
echo "✓ OceanBase is ready!"
break
fi
echo "Waiting for OceanBase... ($elapsed/$timeout seconds)"
sleep 2
elapsed=$((elapsed + 2))
done
if [ $elapsed -ge $timeout ]; then
echo "⚠ Warning: OceanBase may not be fully ready, but continuing..."
fi
# Show container status
echo "OceanBase container status:"
sudo docker ps | grep oceanbase || true
echo "Recent logs:"
sudo docker logs --tail 20 oceanbase || true
mysql -uroot -h127.0.0.1 -P10001 -e "CREATE DATABASE IF NOT EXISTS powermem;" || echo "⚠ Warning: Failed to create database, but continuing..."
mysql -uroot -h127.0.0.1 -P10001 -e "SHOW DATABASES LIKE 'powermem';" || echo "⚠ Warning: Could not verify database, but continuing..."

- name: Set env
env:
QWEN_API_KEY: "${{ secrets.QWEN_API_KEY }}"
SILICONFLOW_CN_API_KEY: "${{ secrets.SILICONFLOW_CN_API_KEY }}"
SILICONFLOW_COM_API_KEY: "${{ secrets.SILICONFLOW_COM_API_KEY }}"
run: |
echo "QWEN_API_KEY length: ${#QWEN_API_KEY}"
echo "SILICONFLOW_CN_API_KEY length: ${#SILICONFLOW_CN_API_KEY}"
echo "SILICONFLOW_COM_API_KEY length: ${#SILICONFLOW_COM_API_KEY}"
cp .env.example .env
sed -i 's|^OCEANBASE_HOST=.*|OCEANBASE_HOST=127.0.0.1|' .env
sed -i 's|^OCEANBASE_PORT=.*|OCEANBASE_PORT=10001|' .env
sed -i 's|^OCEANBASE_USER=.*|OCEANBASE_USER=root|' .env
sed -i 's|^OCEANBASE_PASSWORD=.*|OCEANBASE_PASSWORD=|' .env
sed -i 's|^OCEANBASE_DATABASE=.*|OCEANBASE_DATABASE=powermem|' .env
sed -i 's|^OCEANBASE_COLLECTION=.*|OCEANBASE_COLLECTION=memories|' .env
sed -i 's|^DATABASE_PROVIDER=.*|DATABASE_PROVIDER=oceanbase|' .env
sed -i 's|^LLM_PROVIDER=.*|LLM_PROVIDER=siliconflow|' .env
sed -i 's|^LLM_MODEL=.*|LLM_MODEL=THUDM/GLM-4-9B-0414|' .env
sed -i 's|^SILICONFLOW_LLM_BASE_URL=.*|SILICONFLOW_LLM_BASE_URL=https://api.siliconflow.cn/v1|' .env
sed -i 's|^GRAPH_STORE_PORT=.*|GRAPH_STORE_PORT=10001|' .env
sed -i 's|^GRAPH_STORE_PASSWORD=.*|GRAPH_STORE_PASSWORD=|' .env
sed -i "s|^LLM_API_KEY=.*|LLM_API_KEY=${SILICONFLOW_CN_API_KEY}|" .env
sed -i "s|^EMBEDDING_API_KEY=.*|EMBEDDING_API_KEY=${QWEN_API_KEY}|" .env
sed -i "s|^POWERMEM_SERVER_API_KEYS=.*|POWERMEM_SERVER_API_KEYS=key1,key2,key3|" .env

- name: Run regression tests
id: run_tests
env:
QWEN_API_KEY: "${{ secrets.QWEN_API_KEY }}"
SILICONFLOW_CN_API_KEY: "${{ secrets.SILICONFLOW_CN_API_KEY }}"
SILICONFLOW_COM_API_KEY: "${{ secrets.SILICONFLOW_COM_API_KEY }}"
run: |
pytest tests/regression/test_native_hybrid_search.py tests/regression/test_sparse_search.py -vs

- name: Cleanup Docker
if: always()
run: |
echo "清理 Docker 容器..."
sudo docker rm -f seekdb 2>/dev/null || true
sudo docker ps
echo "✓ 清理完成"
Loading
Loading