# .github/workflows/comprehensive_tests.yml

name: Swarms Comprehensive Tests

# This workflow triggers on pushes and pull requests to the master branch.
on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        # You can test against multiple Python versions here if needed.
        python-version: ["3.10"]

    steps:
    # Step 1: Check out the code.
    # For pull requests, this action automatically checks out the code
    # from the PR's branch, not the master branch. This is the key
    # to testing the proposed changes.
    - name: Checkout repository
      uses: actions/checkout@v4

    # Step 2: Set up the specified Python version.
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v5
      with:
        python-version: ${{ matrix.python-version }}

    # Step 3: Install Poetry for dependency management.
    - name: Install Poetry
      uses: snok/install-poetry@v1
      with:
        virtualenvs-create: true
        virtualenvs-in-project: true

    # Step 4: Cache dependencies to speed up subsequent runs.
    - name: Load cached venv
      id: cached-poetry-dependencies
      uses: actions/cache@v4
      with:
        path: .venv
        key: venv-${{ runner.os }}-${{ steps.setup-python.outputs.python-version }}-${{ hashFiles('**/poetry.lock') }}

    # Step 5: Install dependencies and the project package itself.
    # This is the crucial step. 'poetry install' will install all dependencies
    # and also install the 'swarms' package from the checked-out PR code
    # in editable mode within the virtual environment.
    - name: Install dependencies
      if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true'
      run: poetry install --no-interaction --with dev --all-extras

    # Step 6: Create dummy image files required for multi-modal tests.
    # This ensures your tests are self-contained.
    - name: Create dummy image files for testing
      run: |
        mkdir -p tests/test_data
        touch tests/test_data/image1.jpg
        touch tests/test_data/image2.png
        echo "dummy image data" > tests/test_data/image1.jpg
        echo "dummy image data" > tests/test_data/image2.png

    # Step 7: Run the comprehensive test suite.
    # 'poetry run' executes the command within the virtual environment,
    # ensuring that when 'tests/comprehensive_test.py' imports 'swarms',
    # it's importing the code from the pull request.
    - name: Run Comprehensive Test Suite
      env:
        # Securely pass API keys and other secrets to the test environment.
        # These must be configured in your repository's secrets.
        OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
        # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        # GITHUB_REPO_OWNER: "kyegomez"
        # GITHUB_REPO_NAME: "swarms"
      run: |
        poetry run python tests/comprehensive_test.py

    # Step 8: Upload the generated test report as an artifact.
    # This happens even if the previous steps fail, allowing you to debug.
    - name: Upload Test Report
      if: always()
      uses: actions/upload-artifact@v4
      with:
        name: test-report-${{ matrix.python-version }}
        path: test_runs/