name: LiteLLM Linting

on:
  pull_request:
    branches: [ main ]

jobs:
  lint:
    runs-on: ubuntu-latest
    timeout-minutes: 5

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0
        clean: true

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.12'

    - name: Install Poetry
      uses: snok/install-poetry@v1

    - name: Clean Python cache
      run: |
        find . -type d -name "__pycache__" -exec rm -rf {} + || true
        find . -name "*.pyc" -delete || true

    - name: Install dependencies
      run: |
        poetry lock
        poetry install --with dev

    - name: Run Black formatting
      run: |
        cd litellm
        poetry run black .
        cd ..

    - name: Debug - Check file state
      run: |
        echo "Current branch:"
        git branch --show-current
        echo "Last 3 commits:"
        git log --oneline -3
        echo "File content around line 43:"
        head -50 litellm/litellm_core_utils/custom_logger_registry.py | tail -10
        
    - name: Run Ruff linting
      run: |
        cd litellm
        poetry run ruff check .
        cd ..

    - name: Print OpenAI version
      run: |
        poetry run python -c "import openai; print(f'OpenAI version: {openai.__version__}')"

    - name: Run MyPy type checking
      run: |
        cd litellm
        poetry run mypy . 
        cd ..

    - name: Check for circular imports
      run: |
        cd litellm
        poetry run python ../tests/documentation_tests/test_circular_imports.py
        cd ..

    - name: Check import safety
      run: |
        poetry run python -c "from litellm import *" || (echo '🚨 import failed, this means you introduced unprotected imports! 🚨'; exit 1)

  secret-scan:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    permissions:
      contents: read

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.12'

    - name: Run secret scan test
      run: |
        pip install pytest
        pytest tests/litellm/test_no_hardcoded_secrets.py -v

    - name: Run ggshield secret scan
      env:
        GITGUARDIAN_API_KEY: ${{ secrets.GITGUARDIAN_API_KEY }}
      run: |
        if [ -n "$GITGUARDIAN_API_KEY" ]; then
          pip install ggshield
          ggshield secret scan repo .
        else
          echo "GITGUARDIAN_API_KEY not set, skipping ggshield scan"
        fi
