You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
swarms/.github/workflows/test-main-features.yml

151 lines
4.6 KiB

name: Test Main Features
on:
push:
paths:
- 'tests/test_main_features.py'
- 'swarms/**'
- 'requirements.txt'
- 'pyproject.toml'
branches: [ "master" ]
pull_request:
paths:
- 'tests/test_main_features.py'
- 'swarms/**'
- 'requirements.txt'
- 'pyproject.toml'
branches: [ "master" ]
workflow_dispatch: # Allow manual triggering
jobs:
test-main-features:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Python 3.10
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Cache pip dependencies
uses: actions/cache@v4
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Configure Poetry
run: |
poetry config virtualenvs.create true
poetry config virtualenvs.in-project true
- name: Install dependencies
run: |
poetry install --with test --no-dev
- name: Set up environment variables
run: |
echo "OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}" >> $GITHUB_ENV
echo "ANTHROPIC_API_KEY=${{ secrets.ANTHROPIC_API_KEY }}" >> $GITHUB_ENV
echo "GOOGLE_API_KEY=${{ secrets.GOOGLE_API_KEY }}" >> $GITHUB_ENV
echo "COHERE_API_KEY=${{ secrets.COHERE_API_KEY }}" >> $GITHUB_ENV
echo "HUGGINGFACE_API_KEY=${{ secrets.HUGGINGFACE_API_KEY }}" >> $GITHUB_ENV
echo "REPLICATE_API_KEY=${{ secrets.REPLICATE_API_KEY }}" >> $GITHUB_ENV
echo "TOGETHER_API_KEY=${{ secrets.TOGETHER_API_KEY }}" >> $GITHUB_ENV
- name: Run Main Features Tests
run: |
cd /Users/swarms_wd/Desktop/research/swarms
poetry run python tests/test_main_features.py
- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: test_runs/
retention-days: 7
- name: Comment on PR with test results
if: github.event_name == 'pull_request' && always()
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const path = require('path');
try {
// Look for test result files
const testRunsDir = 'test_runs';
if (fs.existsSync(testRunsDir)) {
const files = fs.readdirSync(testRunsDir);
const latestReport = files
.filter(f => f.endsWith('.md'))
.sort()
.pop();
if (latestReport) {
const reportPath = path.join(testRunsDir, latestReport);
const reportContent = fs.readFileSync(reportPath, 'utf8');
// Extract summary from markdown
const summaryMatch = reportContent.match(/## Summary\n\n(.*?)\n\n## Detailed Results/s);
const summary = summaryMatch ? summaryMatch[1] : 'Test results available in artifacts';
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: `## Main Features Test Results\n\n${summary}\n\n📊 Full test report available in artifacts.`
});
}
}
} catch (error) {
console.log('Could not read test results:', error.message);
}
test-coverage:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request'
needs: test-main-features
steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Set up Python 3.10
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python3 -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install dependencies
run: |
poetry install --with test
- name: Run coverage analysis
run: |
poetry run pytest tests/test_main_features.py --cov=swarms --cov-report=xml --cov-report=html
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
file: ./coverage.xml
flags: main-features
name: main-features-coverage
fail_ci_if_error: false