Merge pull request #3 from xiewoc/xiewoc-patch-2 #37
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: Python CI | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| jobs: | |
| lint: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python with uv | |
| uses: astral-sh/setup-uv@v2 | |
| with: | |
| uv-version: latest | |
| - name: Create virtual environment | |
| run: uv venv | |
| - name: Add venv to environment | |
| run: echo "$PWD/.venv/bin" >> $GITHUB_PATH | |
| - name: Install linters | |
| run: uv pip install black flake8 | |
| - name: Check code formatting with Black | |
| run: | | |
| echo "🔍 Checking code formats..." | |
| uv run black main.py meshbot/ scripts/ . | |
| - name: Lint with flake8 | |
| run: | | |
| uv run flake8 meshbot/ main.py scripts/ \ | |
| --max-line-length=88 \ | |
| --ignore=E203,W503,E501,F541 \ | |
| --exclude=__pycache__,*.egg-info,build,dist,.git,.venv,venv,env,site-packages | |
| # 在 test job 中使用这个替代方案 | |
| test: | |
| runs-on: ubuntu-latest | |
| needs: lint | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python with uv | |
| uses: astral-sh/setup-uv@v2 | |
| with: | |
| uv-version: latest | |
| - name: Create virtual environment | |
| run: uv venv | |
| - name: Add venv to environment | |
| run: echo "$PWD/.venv/bin" >> $GITHUB_PATH | |
| - name: Install dependencies | |
| run: | | |
| uv pip install -r requirements.txt | |
| uv pip install pytest | |
| - name: Create test configuration | |
| run: | | |
| cat << 'EOF' > create_config.py | |
| import json | |
| import os | |
| config = { | |
| 'platform': 'ollama', | |
| 'api_keys': { | |
| 'openai': 'test-key', | |
| 'deepseek': 'test-key', | |
| 'openrouter': 'test-key', | |
| 'gemini': 'test-key', | |
| 'claude': 'test-key', | |
| 'siliconflow': 'test-key', | |
| 'fastapi': 'test-token' | |
| }, | |
| 'model_settings': { | |
| 'ollama': 'qwen2.5:7b', | |
| 'openai': 'gpt-3.5-turbo', | |
| 'deepseek': 'deepseek-chat', | |
| 'openrouter': 'openai/gpt-3.5-turbo', | |
| 'gemini': 'gemini-pro', | |
| 'claude': 'claude-3-sonnet-20240229', | |
| 'siliconflow': 'deepseek-ai/DeepSeek-V2-Chat', | |
| 'fastapi': 'fastapi-default' | |
| }, | |
| 'service_urls': { | |
| 'websockets': 'ws://localhost:9238', | |
| 'fastapi': 'http://127.0.0.1:8000' | |
| } | |
| } | |
| try: | |
| with open('config.json', 'w', encoding='utf-8') as f: | |
| json.dump(config, f, indent=2, ensure_ascii=False) | |
| print('✅ Created config.json for testing') | |
| print(f'File exists: {os.path.exists("config.json")}') | |
| except Exception as e: | |
| print(f'❌ Failed to write config.json: {e}') | |
| exit(1) | |
| EOF | |
| uv run python create_config.py | |
| rm create_config.py | |
| - name: Verify main module imports | |
| run: | | |
| cat << 'EOF' > verify_imports.py | |
| print('Testing imports...') | |
| try: | |
| from meshbot.config.config_loader import load_config | |
| print('✅ config_loader imports successfully') | |
| import main | |
| print('✅ main module imported successfully') | |
| except Exception as e: | |
| print(f'❌ Import failed: {e}') | |
| import traceback | |
| traceback.print_exc() | |
| exit(1) | |
| EOF | |
| uv run python verify_imports.py | |
| rm verify_imports.py | |
| - name: Setup environment file | |
| run: | | |
| if [ ! -f .env ]; then | |
| cp .env.example .env | |
| echo "✅ Created .env from .env.example" | |
| else | |
| echo "ℹ️ .env already exists, skipping copy" | |
| fi | |
| - name: Run tests | |
| run: | | |
| uv run pytest -v --tb=short | |
| continue-on-error: true |