🧹 Clean up temporary shell scripts from troubleshooting #25
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |