From 71c94a5d25202175ef63fbeb3e17bc568326bd0f Mon Sep 17 00:00:00 2001 From: ArslanSaleem Date: Thu, 9 Jan 2025 11:00:51 +0100 Subject: [PATCH] fix(CI): split ci into core and exntensions --- .github/workflows/ci-core.yml | 79 ++++++++++++++ .github/workflows/ci-extensions.yml | 89 +++++++++++++++ .github/workflows/ci.yml | 161 ---------------------------- 3 files changed, 168 insertions(+), 161 deletions(-) create mode 100644 .github/workflows/ci-core.yml create mode 100644 .github/workflows/ci-extensions.yml delete mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci-core.yml b/.github/workflows/ci-core.yml new file mode 100644 index 000000000..320caccac --- /dev/null +++ b/.github/workflows/ci-core.yml @@ -0,0 +1,79 @@ +name: ci-core + +on: + push: + branches: [main] + pull_request: + +jobs: + core-tests: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + python-version: ["3.10", "3.11"] + + steps: + - name: Clean up instance space + if: matrix.os != 'windows-latest' + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + df -h + + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry (Unix) + if: matrix.os != 'windows-latest' + run: | + curl -sSL https://install.python-poetry.org | python3 - + echo 'export PATH="$HOME/.local/bin:$PATH"' >> $GITHUB_ENV + + - name: Install Poetry (Windows) + if: matrix.os == 'windows-latest' + run: | + (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - + echo "C:\\Users\\runneradmin\\AppData\\Roaming\\Python\\Scripts" >> $env:GITHUB_PATH + + - name: Verify Poetry Installation + run: poetry --version + + - name: Clear Poetry Cache + run: poetry cache clear pypi --all + + - name: Install future + run: pip wheel --use-pep517 "future==0.18.3" + + - name: Install dependencies + run: poetry install --all-extras --with dev --verbose + + - name: Lint with ruff + run: make format_diff + + - name: Spellcheck + run: make spell_check + + - name: Run core tests + run: make test_core + + - name: Run code coverage + continue-on-error: true + run: | + poetry run coverage run --source=pandasai -m pytest tests + poetry run coverage xml + + - name: Report coverage + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false diff --git a/.github/workflows/ci-extensions.yml b/.github/workflows/ci-extensions.yml new file mode 100644 index 000000000..59e1f09ed --- /dev/null +++ b/.github/workflows/ci-extensions.yml @@ -0,0 +1,89 @@ +name: ci-extensions + +on: + push: + branches: [main] + pull_request: + +jobs: + extensions-tests: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + python-version: ["3.10", "3.11"] + + steps: + - name: Clean up instance space + if: matrix.os != 'windows-latest' + run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + df -h + + - uses: actions/checkout@v3 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry (Unix) + if: matrix.os != 'windows-latest' + run: | + curl -sSL https://install.python-poetry.org | python3 - + echo 'export PATH="$HOME/.local/bin:$PATH"' >> $GITHUB_ENV + + - name: Install Poetry (Windows) + if: matrix.os == 'windows-latest' + run: | + (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - + echo "C:\\Users\\runneradmin\\AppData\\Roaming\\Python\\Scripts" >> $env:GITHUB_PATH + + - name: Verify Poetry Installation + run: poetry --version + + - name: Clear Poetry Cache + run: poetry cache clear pypi --all + + - name: Install dependencies and test extensions + if: matrix.os != 'windows-latest' + run: | + for ext in extensions/*; do + if [ -d "$ext" ] && [ -f "$ext/pyproject.toml" ]; then + echo "Installing dependencies and running tests for $ext" + (cd "$ext" && poetry install --all-extras --with test --verbose) + (cd "$ext" && poetry run pytest tests/) + fi + done + + - name: Run extension tests (Windows) + if: matrix.os == 'windows-latest' + run: | + Get-ChildItem -Path extensions/* -Directory | ForEach-Object { + $testDir = Join-Path $_.FullName "tests" + if (Test-Path $testDir) { + Write-Host "Running tests for $($_.FullName)" + Push-Location $_.FullName + poetry install --all-extras --with test --verbose + poetry run pytest tests/ + Pop-Location + } + } + + - name: Run code coverage for extensions + continue-on-error: true + run: | + poetry run coverage run --source=extensions -m pytest tests extensions/*/tests + poetry run coverage xml + + - name: Report coverage + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + files: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 89a2404fc..000000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,161 +0,0 @@ -name: ci - -on: - push: - branches: [main] - pull_request: - -jobs: - build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macOS-latest] - python-version: ["3.10", "3.11"] - - steps: - - name: Clean up instance space - if: matrix.os != 'windows-latest' - run: | - sudo rm -rf /usr/share/dotnet - sudo rm -rf /opt/ghc - sudo rm -rf "/usr/local/share/boost" - sudo rm -rf "$AGENT_TOOLSDIRECTORY" - df -h - - - uses: actions/checkout@v3 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - - - name: Install Poetry (Unix) - if: matrix.os != 'windows-latest' - run: | - curl -sSL https://install.python-poetry.org | python3 - - echo 'export PATH="$HOME/.local/bin:$PATH"' >> $GITHUB_ENV - - name: Install Poetry (Windows) - if: matrix.os == 'windows-latest' - run: | - (Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | python - - echo "C:\\Users\\runneradmin\\AppData\\Roaming\\Python\\Scripts" >> $env:GITHUB_PATH - - name: Verify Poetry Installation - run: poetry --version - - name: Clear Poetry Cache - run: poetry cache clear pypi --all - - name: Install future - run: pip wheel --use-pep517 "future==0.18.3" - - name: Install dependencies - run: poetry install --all-extras --with dev --verbose - - name: Lint with ruff - run: make format_diff - - name: Spellcheck - run: make spell_check - - name: Run core tests - run: make test_core - - # Install dependencies, test, and remove for each extension - - name: Install and test LLM extensions (Unix) - if: matrix.os != 'windows-latest' - run: | - find extensions/llms -mindepth 1 -type d | while read -r dir; do - if [ -f "$dir/pyproject.toml" ]; then - echo "Installing dependencies for $dir" - ( - cd "$dir" || exit - poetry install --all-extras --with test --verbose - ) - echo "Running tests for $dir" - ( - cd "$dir" || exit - poetry run pytest tests/ - ) - fi - done - - - name: Install and test Connector extensions (Unix) - if: matrix.os != 'windows-latest' - run: | - find extensions/connectors -mindepth 1 -type d | while read -r dir; do - if [ -f "$dir/pyproject.toml" ]; then - echo "Installing dependencies for $dir" - ( - cd "$dir" || exit - poetry install --all-extras --with test --verbose - ) - echo "Running tests for $dir" - ( - cd "$dir" || exit - poetry run pytest tests/ - ) - fi - done - - - name: Install and test Enterprise extensions (Unix) - if: matrix.os != 'windows-latest' - run: | - find extensions/ee -mindepth 1 -type d | while read -r dir; do - if [ -f "$dir/pyproject.toml" ]; then - echo "Installing dependencies for $dir" - ( - cd "$dir" || exit - poetry install --all-extras --with test --verbose - ) - echo "Running tests for $dir" - ( - cd "$dir" || exit - poetry run pytest tests/ - ) - fi - done - - - name: Run extension tests (Windows) - if: matrix.os == 'windows-latest' - run: | - # Run LLM extension tests - Get-ChildItem -Path extensions/llms -Directory | ForEach-Object { - $testDir = Join-Path $_.FullName "tests" - if (Test-Path $testDir) { - Write-Host "Running tests for $($_.FullName)" - Push-Location $_.FullName - poetry install --all-extras --with test --verbose - poetry run pytest tests/ - Pop-Location - } - } - - # Run connector extension tests - Get-ChildItem -Path extensions/connectors -Directory | ForEach-Object { - $testDir = Join-Path $_.FullName "tests" - if (Test-Path $testDir) { - Write-Host "Running tests for $($_.FullName)" - Push-Location $_.FullName - poetry install --all-extras --with test --verbose - poetry run pytest tests/ - Pop-Location - } - } - - # Run enterprise extension tests - Get-ChildItem -Path extensions/ee -Recurse -Directory -Depth 2 | ForEach-Object { - $testDir = Join-Path $_.FullName "tests" - if (Test-Path $testDir) { - Write-Host "Running tests for $($_.FullName)" - Push-Location $_.FullName - poetry install --all-extras --with test --verbose - Pop-Location - } - } - - name: Run code coverage - continue-on-error: true - run: | - poetry run coverage run --source=pandasai,extensions -m pytest tests extensions/*/tests extensions/ee/*/tests --ignore=tests/integration_tests - poetry run coverage xml - - name: Report coverage - uses: codecov/codecov-action@v3 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: ./coverage.xml - flags: unittests - name: codecov-umbrella - fail_ci_if_error: false