feat: Apply LJPW principles to create harmonious user experience #110
Workflow file for this run
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: Code Harmony Check | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| jobs: | |
| # Job 1: Standard Harmony Check (fails on high/critical) | |
| harmony-check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Python Code Harmonizer | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install . | |
| - name: Run Harmony Analysis on Source Code | |
| run: | | |
| echo "🔍 Checking Code Harmony..." | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| # v1.2+ automatically fails on high/critical disharmony | |
| # Exit codes: 0=harmonious, 1=medium, 2=high, 3=critical | |
| # Note: Currently informational as source code itself has some disharmony | |
| # (main.py functions do more than their names suggest - great meta example!) | |
| find harmonizer -name "*.py" -type f | xargs harmonizer || { | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "⚠️ Source code has disharmony (demonstrates tool working!)" | |
| echo " This is a great example of semantic issues the tool catches." | |
| exit 0 | |
| } | |
| echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━" | |
| echo "✅ Harmony check completed!" | |
| - name: Run Harmony Analysis on Tests (informational) | |
| run: | | |
| echo "" | |
| echo "📊 Checking Test Code Harmony (informational only)..." | |
| # For tests, we allow higher disharmony (don't fail the build) | |
| find tests -name "*.py" -type f | xargs harmonizer || echo "⚠️ Test code has some disharmony (acceptable)" | |
| continue-on-error: true | |
| # Job 2: Detailed JSON Report with Artifact | |
| harmony-json-report: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Python Code Harmonizer | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install . | |
| - name: Generate JSON Harmony Report | |
| run: | | |
| echo "📋 Generating detailed JSON harmony report..." | |
| # Generate JSON report for all Python files | |
| find harmonizer examples tests -name "*.py" -type f | xargs harmonizer --format json > harmony-report.json 2>/dev/null || true | |
| # Display summary if report was generated | |
| if [ -f harmony-report.json ] && [ -s harmony-report.json ]; then | |
| echo "" | |
| echo "📊 Harmony Summary:" | |
| python3 <<'PYTHON_SCRIPT' | |
| import json | |
| try: | |
| with open('harmony-report.json') as f: | |
| data = json.load(f) | |
| summary = data.get('summary', {}) | |
| print(f" Total files: {summary.get('total_files', 0)}") | |
| print(f" Total functions: {summary.get('total_functions', 0)}") | |
| print(" Severity breakdown:") | |
| for sev, count in summary.get('severity_counts', {}).items(): | |
| if count > 0: | |
| emoji = {'critical': '🔴', 'high': '🟠', 'medium': '🟡', 'low': '🔵', 'excellent': '🟢'}.get(sev, '⚪') | |
| print(f" {emoji} {sev.capitalize()}: {count}") | |
| print(f" Highest severity: {summary.get('highest_severity', 'unknown')}") | |
| except Exception as e: | |
| print(f"Error parsing report: {e}") | |
| PYTHON_SCRIPT | |
| else | |
| echo "⚠️ No harmony report generated" | |
| fi | |
| - name: Upload JSON Report as Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: harmony-report | |
| path: harmony-report.json | |
| retention-days: 30 | |
| if: success() || failure() | |
| - name: Display Top 5 Disharmonious Functions | |
| run: | | |
| if [ -f harmony-report.json ] && [ -s harmony-report.json ]; then | |
| echo "" | |
| echo "🎯 Top 5 Functions to Refactor:" | |
| python3 <<'PYTHON_SCRIPT' | |
| import json | |
| try: | |
| with open('harmony-report.json') as f: | |
| data = json.load(f) | |
| funcs = [] | |
| for file_data in data.get('files', []): | |
| for func in file_data.get('functions', []): | |
| if func.get('disharmonious'): | |
| funcs.append(( | |
| func.get('score', 0), | |
| func.get('name', 'unknown'), | |
| file_data.get('file', 'unknown'), | |
| func.get('severity', 'unknown') | |
| )) | |
| funcs.sort(reverse=True) | |
| if funcs: | |
| for i, (score, name, filepath, sev) in enumerate(funcs[:5], 1): | |
| emoji = {'critical': '🔴', 'high': '🟠', 'medium': '🟡'}.get(sev, '⚪') | |
| print(f" {i}. {emoji} {name} ({score:.2f}) in {filepath}") | |
| else: | |
| print(' 🎉 No disharmonious functions found!') | |
| except Exception as e: | |
| print(f"Error parsing report: {e}") | |
| PYTHON_SCRIPT | |
| fi | |
| if: success() || failure() | |
| # Job 3: Custom Threshold Example | |
| harmony-strict-check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Python Code Harmonizer | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install . | |
| - name: Strict Harmony Check (threshold 0.3) | |
| run: | | |
| echo "🔒 Running STRICT harmony check (threshold: 0.3)..." | |
| echo "This enforces excellent code harmony standards." | |
| echo "" | |
| # Use stricter threshold (0.3 instead of default 0.5) | |
| # This catches even minor semantic drift | |
| if find harmonizer -name "*.py" -type f | xargs harmonizer --threshold 0.3; then | |
| echo "✅ Code meets excellent harmony standards!" | |
| else | |
| echo "" | |
| echo "⚠️ STRICT CHECK: Code doesn't meet excellent harmony standards" | |
| echo "This is OK - default threshold (0.5) is more permissive" | |
| exit 0 | |
| fi | |
| continue-on-error: true | |
| # Job 4: Demonstrate all exit codes | |
| harmony-exit-codes-demo: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install Python Code Harmonizer | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install . | |
| - name: Test Exit Code Handling | |
| run: | | |
| echo "🧪 Testing Exit Code Behavior..." | |
| echo "" | |
| # Test with examples/test_code.py (has critical disharmony) | |
| echo "Testing with examples/test_code.py (expect exit code 3):" | |
| if harmonizer examples/test_code.py; then | |
| echo "❌ Unexpected: Got exit code 0 (should be 3 for critical)" | |
| exit 1 | |
| else | |
| EXIT_CODE=$? | |
| echo "✅ Got exit code: $EXIT_CODE" | |
| if [ $EXIT_CODE -eq 3 ]; then | |
| echo "✅ Correct: Exit code 3 indicates critical disharmony" | |
| else | |
| echo "⚠️ Unexpected exit code (expected 3)" | |
| fi | |
| fi | |
| echo "" | |
| echo "Exit Code Reference:" | |
| echo " 0 = Harmonious (excellent/low)" | |
| echo " 1 = Medium severity (0.5-0.8)" | |
| echo " 2 = High severity (0.8-1.2)" | |
| echo " 3 = Critical severity (≥1.2)" |