Skip to content

Commit bb255b3

Browse files
authored
Merge pull request #4 from aboigues/claude/session-011CUYKfARGf267YkobN17MP
claude/session-011CUYKfARGf267YkobN17MP
2 parents 896a624 + d55a6bf commit bb255b3

File tree

2 files changed

+246
-0
lines changed

2 files changed

+246
-0
lines changed

.github/workflows/README.md

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,101 @@
11
# GitHub Actions Workflows
22

3+
Ce répertoire contient les workflows GitHub Actions pour assurer la qualité et la sécurité du projet drupal-mania.
4+
5+
## Vue d'ensemble
6+
7+
| Workflow | Description | Déclenchement |
8+
|----------|-------------|---------------|
9+
| **Trivy Security Scan** | Scan de sécurité des images Docker | Hebdomadaire + Push/PR |
10+
| **Docker Compose Test** | Test du bon fonctionnement du stack | Push/PR |
11+
12+
---
13+
14+
## Docker Compose Test
15+
16+
### Description
17+
18+
Ce workflow teste automatiquement que le stack Docker Compose (PostgreSQL + Drupal) démarre et fonctionne correctement.
19+
20+
### Tests effectués
21+
22+
1.**Création des répertoires** : Vérifie que tous les volumes requis peuvent être créés
23+
2.**Démarrage des services** : Lance `docker-compose up -d`
24+
3.**Health check PostgreSQL** : Attend jusqu'à 60 secondes que PostgreSQL soit sain
25+
4.**Disponibilité Drupal** : Vérifie que Drupal répond (timeout 120s)
26+
5.**Test HTTP** : Valide la réponse HTTP (codes 200, 301, 302 acceptés)
27+
6.**Connexion PostgreSQL** : Teste la connectivité à la base de données
28+
7.**Logs de debug** : Affiche les logs en cas d'échec
29+
8.**Nettoyage** : Supprime les containers et volumes après les tests
30+
31+
### Déclencheurs
32+
33+
Le test s'exécute automatiquement dans les cas suivants :
34+
35+
1. **Push** : Sur les branches `main` et `claude/**`
36+
2. **Pull Request** : Vers la branche `main`
37+
3. **Manuel** : Via le bouton "Run workflow" dans l'interface GitHub Actions
38+
39+
### Variables d'environnement de test
40+
41+
Le workflow utilise des valeurs de test spécifiques :
42+
43+
```env
44+
POSTGRES_DB=drupal_test
45+
POSTGRES_USER=drupal_test
46+
POSTGRES_PASSWORD=test_password_123
47+
DRUPAL_PORT=8080
48+
```
49+
50+
### Accéder aux résultats
51+
52+
1. Aller dans l'onglet **Actions** du repository
53+
2. Sélectionner le workflow "Docker Compose Test"
54+
3. Cliquer sur un run spécifique pour voir les détails
55+
4. Le résumé est disponible dans l'onglet "Summary"
56+
57+
### Que faire en cas d'échec ?
58+
59+
Si le test échoue, voici les étapes de diagnostic :
60+
61+
1. **Consulter les logs** : Ils sont automatiquement affichés en cas d'échec
62+
2. **Vérifier le docker-compose.yml** : S'assurer que la configuration est valide
63+
3. **Tester localement** :
64+
```bash
65+
docker compose up -d
66+
docker compose ps
67+
docker compose logs
68+
```
69+
4. **Vérifier les volumes** : S'assurer que les répertoires data/ sont accessibles
70+
5. **Vérifier les ports** : Le port 8080 ne doit pas être déjà utilisé
71+
72+
### Exemples de commandes locales
73+
74+
Pour reproduire les tests localement :
75+
76+
```bash
77+
# Démarrer les services
78+
docker compose up -d
79+
80+
# Vérifier le statut
81+
docker compose ps
82+
83+
# Tester PostgreSQL
84+
docker compose exec postgres psql -U drupal -d drupal -c "SELECT version();"
85+
86+
# Tester Drupal
87+
curl -I http://localhost:8080
88+
89+
# Voir les logs
90+
docker compose logs drupal
91+
docker compose logs postgres
92+
93+
# Nettoyer
94+
docker compose down -v
95+
```
96+
97+
---
98+
399
## Trivy Security Scan
4100

5101
### Description
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
name: Docker Compose Test
2+
3+
on:
4+
# Test automatique sur les PRs et pushes
5+
push:
6+
branches:
7+
- main
8+
- 'claude/**'
9+
10+
pull_request:
11+
branches:
12+
- main
13+
14+
# Permet de lancer manuellement le test
15+
workflow_dispatch:
16+
17+
permissions:
18+
contents: read
19+
20+
jobs:
21+
docker-compose-test:
22+
name: Test Docker Compose Setup
23+
runs-on: ubuntu-latest
24+
25+
steps:
26+
- name: Checkout code
27+
uses: actions/checkout@v4
28+
29+
- name: Create required directories
30+
run: |
31+
mkdir -p data/postgres
32+
mkdir -p data/drupal/modules
33+
mkdir -p data/drupal/themes
34+
mkdir -p data/drupal/sites
35+
mkdir -p data/drupal/profiles
36+
37+
- name: Create .env file
38+
run: |
39+
cat > .env <<EOF
40+
POSTGRES_DB=drupal_test
41+
POSTGRES_USER=drupal_test
42+
POSTGRES_PASSWORD=test_password_123
43+
DRUPAL_PORT=8080
44+
EOF
45+
46+
- name: Start Docker Compose services
47+
run: |
48+
docker compose up -d
49+
echo "✅ Docker Compose services started"
50+
51+
- name: Wait for PostgreSQL to be healthy
52+
run: |
53+
echo "⏳ Waiting for PostgreSQL to be ready..."
54+
timeout=60
55+
elapsed=0
56+
57+
while [ $elapsed -lt $timeout ]; do
58+
if docker compose ps postgres | grep -q "healthy"; then
59+
echo "✅ PostgreSQL is healthy"
60+
exit 0
61+
fi
62+
echo "Waiting... ($elapsed/$timeout seconds)"
63+
sleep 5
64+
elapsed=$((elapsed + 5))
65+
done
66+
67+
echo "❌ PostgreSQL health check timeout"
68+
docker compose logs postgres
69+
exit 1
70+
71+
- name: Wait for Drupal to be ready
72+
run: |
73+
echo "⏳ Waiting for Drupal to be ready..."
74+
timeout=120
75+
elapsed=0
76+
77+
while [ $elapsed -lt $timeout ]; do
78+
if curl -f http://localhost:8080 > /dev/null 2>&1; then
79+
echo "✅ Drupal is responding"
80+
exit 0
81+
fi
82+
echo "Waiting... ($elapsed/$timeout seconds)"
83+
sleep 5
84+
elapsed=$((elapsed + 5))
85+
done
86+
87+
echo "❌ Drupal not responding in time"
88+
docker compose logs drupal
89+
exit 1
90+
91+
- name: Check Drupal HTTP response
92+
run: |
93+
echo "🔍 Testing Drupal HTTP endpoint..."
94+
response=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080)
95+
echo "HTTP Response Code: $response"
96+
97+
if [ "$response" = "200" ] || [ "$response" = "302" ] || [ "$response" = "301" ]; then
98+
echo "✅ Drupal is accessible (HTTP $response)"
99+
else
100+
echo "❌ Unexpected HTTP response: $response"
101+
exit 1
102+
fi
103+
104+
- name: Verify PostgreSQL connection
105+
run: |
106+
echo "🔍 Testing PostgreSQL connection..."
107+
docker compose exec -T postgres psql -U drupal_test -d drupal_test -c "SELECT version();"
108+
echo "✅ PostgreSQL connection successful"
109+
110+
- name: Check Docker containers status
111+
if: always()
112+
run: |
113+
echo "📊 Docker Compose Status:"
114+
docker compose ps
115+
echo ""
116+
echo "📦 Container Details:"
117+
docker compose ps -a
118+
119+
- name: Display service logs on failure
120+
if: failure()
121+
run: |
122+
echo "📋 PostgreSQL Logs:"
123+
docker compose logs postgres
124+
echo ""
125+
echo "📋 Drupal Logs:"
126+
docker compose logs drupal
127+
128+
- name: Stop Docker Compose services
129+
if: always()
130+
run: |
131+
docker compose down -v
132+
echo "🧹 Docker Compose services stopped and volumes removed"
133+
134+
- name: Generate test summary
135+
if: always()
136+
run: |
137+
echo "# 🐳 Docker Compose Test Summary" >> $GITHUB_STEP_SUMMARY
138+
echo "" >> $GITHUB_STEP_SUMMARY
139+
echo "Test completed at: $(date -u)" >> $GITHUB_STEP_SUMMARY
140+
echo "" >> $GITHUB_STEP_SUMMARY
141+
echo "## Services Tested" >> $GITHUB_STEP_SUMMARY
142+
echo "- 🐘 PostgreSQL 15-alpine" >> $GITHUB_STEP_SUMMARY
143+
echo "- 🌐 Drupal 10-apache" >> $GITHUB_STEP_SUMMARY
144+
echo "" >> $GITHUB_STEP_SUMMARY
145+
146+
if [ "${{ job.status }}" = "success" ]; then
147+
echo "✅ All tests passed successfully!" >> $GITHUB_STEP_SUMMARY
148+
else
149+
echo "❌ Some tests failed. Check the logs above for details." >> $GITHUB_STEP_SUMMARY
150+
fi

0 commit comments

Comments
 (0)