Merge pull request #22 from XSX-Milan/fix/notification-logic #66
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: Basic CI | |
| # Basic CI workflow for syntax and lint checks. | |
| # This workflow ensures the codebase has no syntax errors and passes linting. | |
| # It does NOT run tests, start servers, or require external services. | |
| on: | |
| push: | |
| branches: [main, master] | |
| pull_request: | |
| branches: [main, master] | |
| jobs: | |
| python-check: | |
| name: Python Syntax Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python 3.12 | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.12' | |
| # Use Python 3.12 to match Dockerfile and support f-string expressions with backslashes (PEP 701) | |
| - name: Install dependencies | |
| working-directory: ./backend_api_python | |
| run: | | |
| python -m pip install --upgrade pip | |
| # Install dependencies, excluding Windows-only packages (MetaTrader5) | |
| # MetaTrader5 is Windows-only and not available on Linux, so we filter it out | |
| grep -v "MetaTrader5" requirements.txt > /tmp/requirements_ci.txt | |
| pip install -r /tmp/requirements_ci.txt | |
| # Install dependencies to verify they are installable and enable import checks. | |
| - name: Python syntax check | |
| working-directory: ./backend_api_python | |
| run: | | |
| # Check Python syntax for all .py files using compileall | |
| # This catches syntax errors, indentation issues, and basic structural problems | |
| echo "Checking Python syntax..." | |
| python -m py_compile run.py | |
| python -m compileall -q app/ scripts/ || (echo "Python syntax check failed" && exit 1) | |
| echo "✓ Python syntax check passed" | |
| - name: Python import check | |
| working-directory: ./backend_api_python | |
| run: | | |
| # Verify critical modules can be imported | |
| # We import but do NOT call create_app() to avoid triggering: | |
| # - Database connections | |
| # - Worker threads | |
| # - Network services | |
| python -c " | |
| import sys | |
| sys.path.insert(0, '.') | |
| # Import key modules to verify they are loadable | |
| from app import create_app | |
| from app.config import settings | |
| from app.routes import health | |
| print('✓ Core modules imported successfully') | |
| print('✓ No critical import errors detected') | |
| " | |
| # This will FAIL if: | |
| # - Critical imports fail (missing dependencies, broken module structure) | |
| # This will PASS if: | |
| # - Dependencies are available and importable | |
| # - Core module structure is intact | |
| frontend-check: | |
| name: Frontend Syntax Check | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| # Use Node.js 20 to meet dependency requirements (commander@14.0.0 requires Node >= 20) | |
| # Note: Dockerfile uses Node 18, but dependencies require Node 20 | |
| - name: Install dependencies | |
| working-directory: ./quantdinger_vue | |
| env: | |
| HUSKY: 0 | |
| # Disable husky in CI (git hooks are not needed in CI environment) | |
| run: | | |
| # Project uses yarn (as specified in package.json packageManager field) | |
| # Enable corepack to use the correct yarn version | |
| corepack enable | |
| # Configure yarn registry with fallback to mirror for better reliability | |
| # Try official registry first, fallback to Taobao mirror if needed | |
| yarn config set registry https://registry.npmjs.org/ || true | |
| yarn config set network-timeout 300000 || true | |
| # IMPORTANT: skip lifecycle scripts in CI to avoid running `prepare` (husky install), | |
| # which fails because `.git` is not present in GitHub Actions checkouts by default. | |
| # Retry logic: try up to 3 times with exponential backoff | |
| max_retries=3 | |
| retry_count=0 | |
| while [ $retry_count -lt $max_retries ]; do | |
| if yarn install --frozen-lockfile --ignore-scripts; then | |
| echo "✓ Dependencies installed successfully" | |
| break | |
| else | |
| retry_count=$((retry_count + 1)) | |
| if [ $retry_count -lt $max_retries ]; then | |
| echo "⚠ Install failed, retrying ($retry_count/$max_retries)..." | |
| # Switch to Taobao mirror on retry for better reliability in China/network issues | |
| if [ $retry_count -eq 2 ]; then | |
| echo "Switching to Taobao mirror for retry..." | |
| yarn config set registry https://registry.npmmirror.com/ || true | |
| fi | |
| sleep $((retry_count * 5)) | |
| else | |
| echo "✗ Failed to install dependencies after $max_retries attempts" | |
| exit 1 | |
| fi | |
| fi | |
| done | |
| # Use --frozen-lockfile for reproducible installs. Use --ignore-scripts to keep CI non-intrusive. | |
| - name: Frontend lint check | |
| working-directory: ./quantdinger_vue | |
| run: | | |
| # Run ESLint to check JavaScript/Vue syntax and code quality | |
| # Using --no-fix to ensure we only check, not modify code | |
| npm run lint:nofix | |
| # This will FAIL if: | |
| # - JavaScript/Vue syntax errors exist | |
| # - ESLint rules are violated | |
| # This will PASS if: | |
| # - Code is syntactically valid | |
| # - Code passes ESLint rules | |