Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
58c1936
chore: update requirements
Jbguerin13 May 9, 2025
5f3d48e
refactor: clean db
Jbguerin13 May 16, 2025
a2660da
refactor: lettings app
Jbguerin13 May 16, 2025
051a32c
refactor: profiles app
Jbguerin13 May 16, 2025
048abb9
refactor: templates
Jbguerin13 May 16, 2025
f5b2c25
refactor: main app
Jbguerin13 May 16, 2025
a1f688b
Merge pull request #1 from Jbguerin13/refactor-architecture
Jbguerin13 May 16, 2025
d84c8c7
feat: error 404 and 500 templates
Jbguerin13 May 23, 2025
4bde8e1
Merge pull request #2 from Jbguerin13/error_templates
Jbguerin13 May 23, 2025
1827680
docs:add docstings
Jbguerin13 May 23, 2025
cf670d1
chore: clean code
Jbguerin13 May 23, 2025
bf36d58
Merge pull request #3 from Jbguerin13/feat-doctsring
Jbguerin13 May 23, 2025
e55deac
chore: clean code
Jbguerin13 May 26, 2025
f00ba1c
Merge pull request #4 from Jbguerin13/flake-clean-code
Jbguerin13 May 26, 2025
483a9bc
feat: coverage-tests
Jbguerin13 May 30, 2025
1e3c823
Merge pull request #5 from Jbguerin13/add-test
Jbguerin13 May 30, 2025
96ab915
feat: pluralisation
Jbguerin13 May 30, 2025
2c943d9
Merge pull request #6 from Jbguerin13/pluralisation
Jbguerin13 May 30, 2025
6e85e04
chore:clean code flake8
Jbguerin13 May 31, 2025
26dba0f
Merge pull request #7 from Jbguerin13/flake8
Jbguerin13 May 31, 2025
f002ed7
feat:init sentry
Jbguerin13 May 31, 2025
3345d61
Merge pull request #8 from Jbguerin13/init-sentry
Jbguerin13 May 31, 2025
280aa88
feat:setup docker
Jbguerin13 Jul 3, 2025
fb69cd7
Merge pull request #9 from Jbguerin13/ci-cd
Jbguerin13 Jul 3, 2025
e387a4a
fix: docker port
Jbguerin13 Jul 10, 2025
2a067aa
Merge pull request #10 from Jbguerin13/docker-fix
Jbguerin13 Jul 10, 2025
93b89ab
feat: init read the docs
Jbguerin13 Jul 11, 2025
15f8303
Merge pull request #11 from Jbguerin13/init-rtd
Jbguerin13 Jul 11, 2025
198d58f
feat:read the docs test
Jbguerin13 Jul 21, 2025
24c6ec4
Merge pull request #12 from Jbguerin13/files-rtd
Jbguerin13 Jul 21, 2025
f45a8db
chore:clean code
Jbguerin13 Jul 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added .coverage
Binary file not shown.
68 changes: 68 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# Git
.git
.gitignore

# Python
__pycache__
*.pyc
*.pyo
*.pyd
.Python
env
pip-log.txt
pip-delete-this-directory.txt
.tox
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.log
.git
.mypy_cache
.pytest_cache
.hypothesis

# Django
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Environnements virtuels
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# IDE
.vscode/
.idea/
*.swp
*.swo
*~

# OS
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Tests
htmlcov/
.coverage
.pytest_cache/

# Documentation
README.md
docs/

# CI/CD
.github/
132 changes: 132 additions & 0 deletions .github/workflows/ci-cd.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
# Nom de la pipeline CI/CD
name: CI/CD Pipeline

# Définition des événements qui déclenchent la pipeline
on:
# Se déclenche à chaque push sur la branche main
push:
branches: [ main ]
# Se déclenche à chaque pull request vers la branche main
pull_request:
branches: [ main ]

# Variables d'environnement globales
env:
# Nom de l'image Docker (utilise le nom d'utilisateur DockerHub stocké dans les secrets)
DOCKER_IMAGE: ${{ secrets.DOCKER_USERNAME }}/oc-lettings-site
# Tag de l'image basé sur le SHA du commit
DOCKER_TAG: ${{ github.sha }}

jobs:
# Job de test : vérifie la qualité du code et la couverture des tests
test:
runs-on: ubuntu-latest
steps:
# Récupération du code source
- uses: actions/checkout@v3

# Configuration de l'environnement Python
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

# Installation des dépendances nécessaires
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
pip install pytest pytest-cov flake8

# Vérification de la qualité du code avec Flake8
- name: Run Flake8
run: |
# Première vérification : erreurs critiques (échoue si erreurs trouvées)
# E9: Erreurs de syntaxe
# F63: Problèmes de comparaison
# F7: Problèmes de déclaration
# F82: Problèmes de référence non définie
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# Deuxième vérification : style du code (n'échoue pas)
# - Complexité maximale de 10
# - Longueur de ligne maximale de 127 caractères
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

# Exécution des tests avec mesure de la couverture
- name: Run tests with coverage
run: |
pytest --cov=. --cov-report=xml

# Vérification que la couverture de tests est supérieure à 80%
- name: Check coverage threshold
run: |
coverage=$(python -c "import xml.etree.ElementTree as ET; tree = ET.parse('coverage.xml'); root = tree.getroot(); print(float(root.attrib['line-rate']) * 100)")
if (( $(echo "$coverage < 80" | bc -l) )); then
echo "Coverage is below 80%"
exit 1
fi

# Job de test Docker : vérifie que l'image Docker fonctionne
test-docker:
runs-on: ubuntu-latest
needs: test
steps:
- uses: actions/checkout@v3

# Test de build de l'image Docker
- name: Build Docker image
run: docker build -t oc-lettings-site .

# Test que l'image peut démarrer
- name: Test Docker image startup
run: |
docker run -d --name test-container oc-lettings-site
sleep 10
docker logs test-container
docker stop test-container
docker rm test-container

# Job de build et push : crée et publie l'image Docker
build-and-push:
# S'exécute uniquement si les tests sont passés
needs: [test, test-docker]
runs-on: ubuntu-latest
# S'exécute uniquement sur les pushes vers main
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3

# Authentification sur DockerHub
- name: Login to DockerHub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

# Construction et publication de l'image Docker
- name: Build and push Docker image
uses: docker/build-push-action@v4
with:
context: .
push: true
# Tag l'image avec le SHA du commit et 'latest'
tags: ${{ env.DOCKER_IMAGE }}:${{ env.DOCKER_TAG }},${{ env.DOCKER_IMAGE }}:latest
# Cache pour optimiser les builds
cache-from: type=gha
cache-to: type=gha,mode=max

# Job de déploiement : déploie l'application sur Render
deploy:
# S'exécute uniquement si le build est réussi
needs: build-and-push
runs-on: ubuntu-latest
# S'exécute uniquement sur les pushes vers main
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
steps:
# Déploiement sur Render
- name: Deploy to Render
uses: render-actions/deploy@v1
with:
render-token: ${{ secrets.RENDER_TOKEN }}
service-id: ${{ secrets.RENDER_SERVICE_ID }}
environment: production
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
**/__pycache__
*.pyc
venv
.DS_Store
.env
23 changes: 23 additions & 0 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Read the Docs configuration file
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details

# Required
version: 2

# Set the OS, Python version, and other tools you might need
build:
os: ubuntu-24.04
tools:
python: "3.13"

# Build documentation in the "docs/" directory with Sphinx
sphinx:
configuration: docs/conf.py

# Optionally, but recommended,
# declare the Python requirements required to build your documentation
# See https://docs.readthedocs.io/en/stable/guides/reproducible-builds.html
python:
install:
- requirements: docs/requirements.txt

126 changes: 126 additions & 0 deletions DEPLOYMENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Guide de Déploiement - OC Lettings Site

## Prérequis

- Docker et Docker Compose installés
- Compte DockerHub
- Compte Render (pour le déploiement)
- Variables d'environnement configurées

## Configuration des Variables d'Environnement

### GitHub Secrets (pour la CI/CD)

Configurez ces secrets dans votre repository GitHub :

- `DOCKER_USERNAME` : Votre nom d'utilisateur DockerHub
- `DOCKER_PASSWORD` : Votre token d'accès DockerHub
- `RENDER_TOKEN` : Votre token d'API Render
- `RENDER_SERVICE_ID` : L'ID de votre service Render

### Variables d'Environnement pour la Production

- `SECRET_KEY` : Clé secrète Django (générée automatiquement si non définie)
- `DEBUG` : `False` pour la production
- `ALLOWED_HOSTS` : Liste des domaines autorisés (séparés par des virgules)
- `DATABASE_URL` : URL de la base de données (optionnel, SQLite par défaut)
- `SENTRY_DSN` : URL Sentry pour le monitoring (optionnel)

## Test Local avec Docker

### 1. Build de l'image Docker

```bash
docker build -t oc-lettings-site .
```

### 2. Test avec Docker Compose

```bash
# Démarrer l'application
docker-compose up web

# Exécuter les tests
docker-compose run test
```

### 3. Test direct de l'image

```bash
# Démarrer le conteneur
docker run -p 8000:8000 oc-lettings-site

# Accéder à l'application
open http://localhost:8000
```

## Pipeline CI/CD

La pipeline GitHub Actions s'exécute automatiquement sur chaque push vers `main` :

1. **Tests** : Vérification de la qualité du code et couverture des tests (>80%)
2. **Test Docker** : Vérification que l'image Docker fonctionne
3. **Build & Push** : Construction et publication de l'image sur DockerHub
4. **Déploiement** : Déploiement automatique sur Render

## Déploiement sur Render

### Configuration du Service

1. Créez un nouveau service Web sur Render
2. Connectez votre repository GitHub
3. Configurez les variables d'environnement :
- `DOCKER_IMAGE` : `votre-username/oc-lettings-site`
- `SECRET_KEY` : Clé secrète Django
- `DEBUG` : `False`
- `ALLOWED_HOSTS` : Votre domaine Render

### Désactivation du Déploiement Automatique

⚠️ **Important** : Désactivez le déploiement automatique sur Render car la CI/CD GitHub Actions gère le déploiement.

## Structure des Fichiers

```
├── Dockerfile # Configuration Docker
├── docker-compose.yml # Configuration Docker Compose
├── start.sh # Script de démarrage
├── requirements.txt # Dépendances Python
├── .dockerignore # Fichiers exclus de Docker
├── oc_lettings_site/
│ ├── settings.py # Configuration développement
│ └── settings_production.py # Configuration production
└── .github/workflows/
└── ci-cd.yml # Pipeline CI/CD
```

## Sécurité

- Utilisateur non-root dans le conteneur
- Variables d'environnement pour les secrets
- Configuration de sécurité Django pour la production
- Headers de sécurité configurés

## Monitoring

- Logs structurés avec Django
- Intégration Sentry (optionnelle)
- Métriques de couverture de tests

## Troubleshooting

### Problèmes Courants

1. **Erreur de permissions** : Vérifiez que `start.sh` est exécutable
2. **Fichiers statiques manquants** : Vérifiez la configuration WhiteNoise
3. **Base de données** : Vérifiez les variables d'environnement DATABASE_URL

### Logs

```bash
# Voir les logs du conteneur
docker logs <container-id>

# Logs en temps réel
docker logs -f <container-id>
```
Loading