project initialization
Some checks failed
System Monitoring / Health Checks (push) Has been cancelled
System Monitoring / Performance Monitoring (push) Has been cancelled
System Monitoring / Database Monitoring (push) Has been cancelled
System Monitoring / Cache Monitoring (push) Has been cancelled
System Monitoring / Log Monitoring (push) Has been cancelled
System Monitoring / Resource Monitoring (push) Has been cancelled
System Monitoring / Uptime Monitoring (push) Has been cancelled
System Monitoring / Backup Monitoring (push) Has been cancelled
System Monitoring / Security Monitoring (push) Has been cancelled
System Monitoring / Monitoring Dashboard (push) Has been cancelled
System Monitoring / Alerting (push) Has been cancelled
Security Scanning / Dependency Scanning (push) Has been cancelled
Security Scanning / Code Security Scanning (push) Has been cancelled
Security Scanning / Secrets Scanning (push) Has been cancelled
Security Scanning / Container Security Scanning (push) Has been cancelled
Security Scanning / Compliance Checking (push) Has been cancelled
Security Scanning / Security Dashboard (push) Has been cancelled
Security Scanning / Security Remediation (push) Has been cancelled
Some checks failed
System Monitoring / Health Checks (push) Has been cancelled
System Monitoring / Performance Monitoring (push) Has been cancelled
System Monitoring / Database Monitoring (push) Has been cancelled
System Monitoring / Cache Monitoring (push) Has been cancelled
System Monitoring / Log Monitoring (push) Has been cancelled
System Monitoring / Resource Monitoring (push) Has been cancelled
System Monitoring / Uptime Monitoring (push) Has been cancelled
System Monitoring / Backup Monitoring (push) Has been cancelled
System Monitoring / Security Monitoring (push) Has been cancelled
System Monitoring / Monitoring Dashboard (push) Has been cancelled
System Monitoring / Alerting (push) Has been cancelled
Security Scanning / Dependency Scanning (push) Has been cancelled
Security Scanning / Code Security Scanning (push) Has been cancelled
Security Scanning / Secrets Scanning (push) Has been cancelled
Security Scanning / Container Security Scanning (push) Has been cancelled
Security Scanning / Compliance Checking (push) Has been cancelled
Security Scanning / Security Dashboard (push) Has been cancelled
Security Scanning / Security Remediation (push) Has been cancelled
This commit is contained in:
364
.github/workflows/quality.yml
vendored
Normal file
364
.github/workflows/quality.yml
vendored
Normal file
@@ -0,0 +1,364 @@
|
||||
name: Code Quality
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ main, develop ]
|
||||
pull_request:
|
||||
branches: [ main, develop ]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
python-quality:
|
||||
name: Python Code Quality
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.10
|
||||
|
||||
- name: Cache pip packages
|
||||
uses: actions/cache@v3
|
||||
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
|
||||
pip install -r requirements-dev.txt
|
||||
|
||||
- name: Run Black formatting check
|
||||
run: |
|
||||
black --check --diff backend/
|
||||
|
||||
- name: Run isort import sorting check
|
||||
run: |
|
||||
isort --check-only --diff backend/
|
||||
|
||||
- name: Run Flake8 linting
|
||||
run: |
|
||||
flake8 backend/ --format=junit-xml --output-file=flake8-report.xml
|
||||
|
||||
- name: Run Pylint static analysis
|
||||
run: |
|
||||
pylint backend/ --exit-zero --output-format=pylint_junit.JunitReporter --output-file=pylint-report.xml
|
||||
|
||||
- name: Run MyPy type checking
|
||||
run: |
|
||||
mypy backend/ --ignore-missing-imports --junit-xml=mypy-report.xml
|
||||
|
||||
- name: Run Bandit security linting
|
||||
run: |
|
||||
bandit -r backend/ -f json -o bandit-report.json
|
||||
|
||||
- name: Run Radon code complexity analysis
|
||||
run: |
|
||||
pip install radon
|
||||
radon cc backend/ -a -nb -o json > radon-report.json
|
||||
|
||||
- name: Run vulture dead code detection
|
||||
run: |
|
||||
pip install vulture
|
||||
vulture backend/ --min-confidence 70 --format json > vulture-report.json
|
||||
|
||||
- name: Upload quality reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: python-quality-reports
|
||||
path: |
|
||||
flake8-report.xml
|
||||
pylint-report.xml
|
||||
mypy-report.xml
|
||||
bandit-report.json
|
||||
radon-report.json
|
||||
vulture-report.json
|
||||
|
||||
javascript-quality:
|
||||
name: JavaScript Code Quality
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: '18'
|
||||
cache: 'npm'
|
||||
cache-dependency-path: frontend/package-lock.json
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
cd frontend
|
||||
npm install
|
||||
|
||||
- name: Run ESLint
|
||||
run: |
|
||||
cd frontend
|
||||
npm run lint -- --format junit --output-file ../eslint-report.xml
|
||||
|
||||
- name: Run Prettier formatting check
|
||||
run: |
|
||||
cd frontend
|
||||
npm run format:check
|
||||
|
||||
- name: Run TypeScript type checking
|
||||
run: |
|
||||
cd frontend
|
||||
npm run type-check
|
||||
|
||||
- name: Run SonarQube scan
|
||||
uses: sonarqube-quality-gate-action@master
|
||||
env:
|
||||
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
|
||||
|
||||
- name: Upload JavaScript quality reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: javascript-quality-reports
|
||||
path: |
|
||||
eslint-report.xml
|
||||
|
||||
test-coverage:
|
||||
name: Test Coverage Analysis
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:15
|
||||
env:
|
||||
POSTGRES_PASSWORD: postgres
|
||||
POSTGRES_DB: test_db
|
||||
options: >-
|
||||
--health-cmd pg_isready
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 5432:5432
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
options: >-
|
||||
--health-cmd "redis-cli ping"
|
||||
--health-interval 10s
|
||||
--health-timeout 5s
|
||||
--health-retries 5
|
||||
ports:
|
||||
- 6379:6379
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.10
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install -r requirements-dev.txt
|
||||
pip install coverage[toml] coveralls
|
||||
|
||||
- name: Run tests with coverage
|
||||
run: |
|
||||
cd backend
|
||||
coverage run --source=. manage.py test --verbosity=2
|
||||
coverage xml
|
||||
coverage report --show-missing
|
||||
coverage html
|
||||
env:
|
||||
DATABASE_URL: postgres://postgres:postgres@localhost:5432/test_db
|
||||
REDIS_URL: redis://localhost:6379/0
|
||||
SECRET_KEY: test-secret-key-for-ci
|
||||
|
||||
- name: Upload coverage to Codecov
|
||||
uses: codecov/codecov-action@v3
|
||||
with:
|
||||
file: ./coverage.xml
|
||||
flags: unittests
|
||||
name: codecov-umbrella
|
||||
|
||||
- name: Upload coverage reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: coverage-reports
|
||||
path: |
|
||||
coverage.xml
|
||||
htmlcov/
|
||||
|
||||
performance-analysis:
|
||||
name: Performance Analysis
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.10
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
pip install line-profiler memory-profiler
|
||||
|
||||
- name: Run Python performance analysis
|
||||
run: |
|
||||
cd backend
|
||||
python -m cProfile -o profile_output.prof manage.py test --verbosity=0
|
||||
python -m memory_profiler scripts/memory-profile.py > memory-profile.txt
|
||||
|
||||
- name: Analyze performance results
|
||||
run: |
|
||||
pip install snakeviz
|
||||
snakeviz profile_output.prof --server
|
||||
|
||||
- name: Upload performance reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: performance-reports
|
||||
path: |
|
||||
profile_output.prof
|
||||
memory-profile.txt
|
||||
|
||||
documentation-quality:
|
||||
name: Documentation Quality
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.10
|
||||
|
||||
- name: Install documentation tools
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install sphinx sphinx-rtd-theme pydoc-markdown
|
||||
pip install -r requirements.txt
|
||||
|
||||
- name: Check docstring coverage
|
||||
run: |
|
||||
pip install interrogate
|
||||
interrogate backend/ --verbose --ignore-init-method --ignore-module --ignore-private --fail-under=80
|
||||
|
||||
- name: Generate documentation
|
||||
run: |
|
||||
cd docs
|
||||
make html
|
||||
|
||||
- name: Check for broken links
|
||||
run: |
|
||||
pip install linkchecker
|
||||
linkchecker docs/_build/html/index.html
|
||||
|
||||
- name: Upload documentation
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: documentation-build
|
||||
path: docs/_build/html/
|
||||
|
||||
code-metrics:
|
||||
name: Code Metrics
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: 3.10
|
||||
|
||||
- name: Install analysis tools
|
||||
run: |
|
||||
python -m pip install --upgrade pip
|
||||
pip install lizard radon xenon
|
||||
|
||||
- name: Calculate code metrics
|
||||
run: |
|
||||
lizard backend/ --csv > lizard-metrics.csv
|
||||
radon raw backend/ --json > radon-metrics.json
|
||||
xenon --max-absolute A --max-modules A --max-average A backend/ > xenon-report.txt
|
||||
|
||||
- name: Generate quality dashboard
|
||||
run: |
|
||||
python scripts/generate-quality-dashboard.py
|
||||
|
||||
- name: Upload metrics reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: code-metrics
|
||||
path: |
|
||||
lizard-metrics.csv
|
||||
radon-metrics.json
|
||||
xenon-report.txt
|
||||
quality-dashboard.html
|
||||
|
||||
quality-gate:
|
||||
name: Quality Gate
|
||||
runs-on: ubuntu-latest
|
||||
needs: [python-quality, javascript-quality, test-coverage, documentation-quality, code-metrics]
|
||||
if: always()
|
||||
|
||||
steps:
|
||||
- name: Download all reports
|
||||
uses: actions/download-artifact@v3
|
||||
|
||||
- name: Evaluate quality gate
|
||||
run: |
|
||||
python scripts/evaluate-quality-gate.py
|
||||
|
||||
- name: Create quality issue if gate fails
|
||||
if: failure()
|
||||
uses: actions/github-script@v6
|
||||
with:
|
||||
script: |
|
||||
github.rest.issues.create({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
title: `🔍 Quality Gate Failed - ${{ github.sha }}`,
|
||||
body: `Code quality checks failed for commit ${{ github.sha }}.
|
||||
|
||||
**Branch:** ${{ github.ref }}
|
||||
**Commit:** ${{ github.sha }}
|
||||
**Author:** ${{ github.actor }}
|
||||
|
||||
Please review the quality reports and address the issues.
|
||||
|
||||
📋 **Quality Reports:**
|
||||
- [Python Quality](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||||
- [JavaScript Quality](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||||
- [Test Coverage](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||||
- [Documentation Quality](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||||
- [Code Metrics](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
||||
|
||||
🎯 **Action Items:**
|
||||
1. Review and fix code style issues
|
||||
2. Address security vulnerabilities
|
||||
3. Improve test coverage where needed
|
||||
4. Update documentation
|
||||
5. Refactor complex code
|
||||
|
||||
This issue was automatically created by the CI/CD pipeline.`,
|
||||
labels: ['quality', 'bug', 'needs-attention']
|
||||
});
|
||||
Reference in New Issue
Block a user