Skip to content

🧹 Clean up temporary shell scripts from troubleshooting #25

🧹 Clean up temporary shell scripts from troubleshooting

🧹 Clean up temporary shell scripts from troubleshooting #25

Workflow file for this run

name: API Test Automation CI/CD
'on':
push:
branches: [ main, develop, 'fix/*', 'feature/*' ]
pull_request:
branches: [ main ]
schedule:
# Run tests daily at 6 AM UTC
- cron: '0 6 * * *'
workflow_dispatch:
permissions:
contents: read
pages: write
id-token: write
actions: read
checks: write
env:
PYTHON_VERSION_DEFAULT: "3.11"
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- 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 dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Lint with flake8
run: |
pip install flake8
# Stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# Exit-zero treats all errors as warnings
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Run smoke tests
run: |
python -m pytest tests/ -m smoke -v --tb=short
- name: Run all tests with coverage
run: |
pip install pytest-cov
python -m pytest tests/ -v --cov=utils --cov=tests --cov-report=xml --cov-report=html
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
with:
files: ./coverage.xml
flags: unittests
name: codecov-umbrella
token: ${{ secrets.CODECOV_TOKEN }}
fail_ci_if_error: false
- name: Generate Allure results
if: always()
run: |
python -m pytest tests/ --alluredir=allure-results --tb=short || true
- name: Install Allure CLI
if: always()
run: |
sudo apt-get update -qq
sudo apt-get install -y default-jre-headless
curl -o allure-2.27.0.tgz -Ls https://github.com/allure-framework/allure2/releases/download/2.27.0/allure-2.27.0.tgz
sudo tar -zxvf allure-2.27.0.tgz -C /opt/
sudo ln -sf /opt/allure-2.27.0/bin/allure /usr/bin/allure
allure --version
- name: Generate Allure HTML report
if: always()
run: |
allure generate allure-results --clean -o allure-report || echo "Allure report generation failed"
- name: Upload Allure results
if: always()
uses: actions/upload-artifact@v4
with:
name: allure-results-${{ matrix.python-version }}
path: allure-results/
retention-days: 30
if-no-files-found: warn
- name: Upload Allure HTML report
if: always()
uses: actions/upload-artifact@v4
with:
name: allure-report-${{ matrix.python-version }}
path: allure-report/
retention-days: 30
if-no-files-found: warn
- name: Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: test-reports-${{ matrix.python-version }}
path: reports/
retention-days: 30
if-no-files-found: warn
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install bandit safety
- name: Run Bandit security scan
run: bandit -r . -f json -o bandit-report.json || true
- name: Run Safety check
run: safety check --output json --save-json safety-report.json || true
- name: Upload security reports
uses: actions/upload-artifact@v4
with:
name: security-reports
path: |
bandit-report.json
safety-report.json
retention-days: 30
if-no-files-found: warn
performance-test:
runs-on: ubuntu-latest
if: github.event_name == 'schedule' || contains(github.event.head_commit.message, '[perf]')
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Run performance tests
run: |
python -m pytest tests/ -m performance -v --tb=short
- name: Upload performance results
uses: actions/upload-artifact@v4
with:
name: performance-results
path: reports/
retention-days: 30
if-no-files-found: warn
deploy-docs:
runs-on: ubuntu-latest
needs: test
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ env.PYTHON_VERSION_DEFAULT }}
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install allure-pytest
- name: Install Allure CLI
run: |
sudo apt-get update -qq
sudo apt-get install -y default-jre-headless
curl -o allure-2.27.0.tgz -Ls https://github.com/allure-framework/allure2/releases/download/2.27.0/allure-2.27.0.tgz
sudo tar -zxvf allure-2.27.0.tgz -C /opt/
sudo ln -sf /opt/allure-2.27.0/bin/allure /usr/bin/allure
allure --version
- name: Generate test documentation
run: |
python -m pytest tests/ --alluredir=allure-results || true
# Generate Allure report
allure generate allure-results -o allure-report --clean || echo "Allure report generation failed"
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./allure-report
destination_dir: test-reports
notify:
runs-on: ubuntu-latest
needs: [test, security-scan]
if: failure()
steps:
- name: Notify on failure
run: |
echo "Tests failed! Check the logs for details."
# Add Slack/Teams notification here if needed