seo-generator-server/.github/workflows/systematic-tests.yml

275 lines
8.4 KiB
YAML

# ========================================
# GITHUB ACTIONS - TESTS SYSTÉMATIQUES
# Pipeline CI/CD avec validation IA automatique
# ========================================
name: 🧪 Tests Systématiques avec Validation IA
on:
push:
branches: [ main, master, develop ]
pull_request:
branches: [ main, master ]
schedule:
# Tests automatiques quotidiens à 2h00 UTC
- cron: '0 2 * * *'
workflow_dispatch:
inputs:
test_mode:
description: 'Mode de test'
required: true
default: 'quick'
type: choice
options:
- quick
- full
- generate-only
ai_validation:
description: 'Activer validation IA'
required: false
default: true
type: boolean
env:
NODE_VERSION: '18'
TIMEOUT_MINUTES: 30
jobs:
# ========================================
# JOB 1: GÉNÉRATION AUTOMATIQUE DES TESTS
# ========================================
generate-tests:
name: 📝 Génération Tests Automatiques
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: 🟢 Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: 📦 Install dependencies
run: npm ci
- name: 🔧 Generate tests
run: npm run test:generate
env:
NODE_ENV: test
- name: 📤 Upload generated tests
uses: actions/upload-artifact@v4
with:
name: generated-tests
path: tests/systematic/generated/
retention-days: 7
- name: 📊 Test generation report
run: |
echo "## 📝 Rapport Génération Tests" >> $GITHUB_STEP_SUMMARY
echo "- Timestamp: $(date)" >> $GITHUB_STEP_SUMMARY
echo "- Fichiers générés: $(ls tests/systematic/generated/*.test.js 2>/dev/null | wc -l)" >> $GITHUB_STEP_SUMMARY
# ========================================
# JOB 2: EXÉCUTION TESTS SYSTÉMATIQUES
# ========================================
run-systematic-tests:
name: 🧪 Tests Systématiques
runs-on: ubuntu-latest
needs: generate-tests
timeout-minutes: ${{ fromJson(env.TIMEOUT_MINUTES) }}
strategy:
matrix:
test-suite:
- smoke
- llm
- content
- integration
fail-fast: false
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: 🟢 Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: 📦 Install dependencies
run: npm ci
- name: 📤 Download generated tests
uses: actions/download-artifact@v4
with:
name: generated-tests
path: tests/systematic/generated/
- name: 🧪 Run test suite
run: npm run test:${{ matrix.test-suite }}
env:
NODE_ENV: test
TEST_TIMEOUT: 120000
- name: 📊 Test results
if: always()
run: |
echo "## 🧪 Résultats Tests ${{ matrix.test-suite }}" >> $GITHUB_STEP_SUMMARY
echo "- Suite: ${{ matrix.test-suite }}" >> $GITHUB_STEP_SUMMARY
echo "- Status: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY
# ========================================
# JOB 3: VALIDATION IA DU CONTENU
# ========================================
ai-content-validation:
name: 🤖 Validation IA
runs-on: ubuntu-latest
needs: [generate-tests, run-systematic-tests]
if: ${{ github.event.inputs.ai_validation != 'false' }}
timeout-minutes: 20
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: 🟢 Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: 📦 Install dependencies
run: npm ci
- name: 🤖 Test AI validation
run: npm run test:ai-validation
env:
NODE_ENV: test
# Clés API pour validation IA (secrets GitHub)
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: 🎯 Run full systematic suite
run: |
if [ "${{ github.event.inputs.test_mode }}" = "full" ]; then
npm run test:systematic
else
npm run test:systematic:quick
fi
env:
NODE_ENV: test
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
- name: 📤 Upload test reports
if: always()
uses: actions/upload-artifact@v4
with:
name: systematic-test-reports
path: tests/reports/
retention-days: 30
- name: 📊 AI Validation Summary
if: always()
run: |
echo "## 🤖 Rapport Validation IA" >> $GITHUB_STEP_SUMMARY
echo "- Mode: ${{ github.event.inputs.test_mode || 'quick' }}" >> $GITHUB_STEP_SUMMARY
echo "- Timestamp: $(date)" >> $GITHUB_STEP_SUMMARY
# Extraction des scores si rapports disponibles
if [ -f "tests/reports/systematic-test-report-*.json" ]; then
echo "- Rapports générés: ✅" >> $GITHUB_STEP_SUMMARY
else
echo "- Rapports générés: ❌" >> $GITHUB_STEP_SUMMARY
fi
# ========================================
# JOB 4: RAPPORT CONSOLIDÉ
# ========================================
consolidated-report:
name: 📊 Rapport Consolidé
runs-on: ubuntu-latest
needs: [generate-tests, run-systematic-tests, ai-content-validation]
if: always()
steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
- name: 📤 Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts/
- name: 📊 Generate consolidated report
run: |
echo "# 🧪 Rapport Tests Systématiques Consolidé" > report.md
echo "" >> report.md
echo "**Exécution:** $(date)" >> report.md
echo "**Workflow:** ${{ github.workflow }}" >> report.md
echo "**Commit:** ${{ github.sha }}" >> report.md
echo "" >> report.md
echo "## 📝 Génération Tests" >> report.md
echo "- Status: ${{ needs.generate-tests.result }}" >> report.md
echo "## 🧪 Tests Systématiques" >> report.md
echo "- Status: ${{ needs.run-systematic-tests.result }}" >> report.md
echo "## 🤖 Validation IA" >> report.md
echo "- Status: ${{ needs.ai-content-validation.result }}" >> report.md
# Ajout au summary GitHub
cat report.md >> $GITHUB_STEP_SUMMARY
- name: 📤 Upload consolidated report
uses: actions/upload-artifact@v4
with:
name: consolidated-report
path: report.md
# ========================================
# JOB 5: NETTOYAGE ET NOTIFICATION
# ========================================
cleanup-and-notify:
name: 🧹 Nettoyage
runs-on: ubuntu-latest
needs: [consolidated-report]
if: always()
steps:
- name: 🧹 Cleanup old artifacts
uses: actions/github-script@v7
with:
script: |
const artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: context.runId,
});
console.log(`Trouvé ${artifacts.data.artifacts.length} artifacts`);
- name: ✅ Workflow completed
run: |
echo "## ✅ Workflow Terminé" >> $GITHUB_STEP_SUMMARY
echo "- Durée totale: ${{ github.event.created_at }}" >> $GITHUB_STEP_SUMMARY
echo "- Status global: ${{ job.status }}" >> $GITHUB_STEP_SUMMARY
# ========================================
# CONFIGURATION SPÉCIFIQUE
# ========================================
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
actions: read
checks: write