Guide de Contribution Merci de votre intérêt pour contribuer à CSWeb Community Platform !
Code de Conduite En participant à ce projet, vous vous engagez à respecter notre code de conduite :
- Être respectueux envers tous les contributeurs
- Communiquer de manière constructive
- Accueillir la diversité et l'inclusion
- Aider les nouveaux contributeurs
Types de Contributions
Signaler un Bug
Avant de créer une issue :
- Vérifier que le bug n'est pas déjà signalé
- Tester sur la dernière version
- Collecter les informations nécessaires
Créer une issue avec :
## Description
Description claire du problème
## Steps to Reproduce
1. Étape 1
2. Étape 2
3. Résultat observé
## Expected Behavior
Résultat attendu
## Environment
- OS: Ubuntu 20.04
- Docker: 20.10.21
- CSWeb Version: 2.0.0
## LogsLogs pertinents
Proposer une Fonctionnalité
Créer une issue "Feature Request" avec :
- Description de la fonctionnalité
- Problème résolu / Use case
- Solution proposée
- Alternatives considérées
Améliorer la Documentation
Contributions bienvenues :
- Corriger typos/erreurs
- Ajouter exemples
- Traduire pages (EN, ES, PT)
- Créer tutoriels vidéo
Écrire des Tests
- Tests unitaires (PHPUnit)
- Tests d'intégration
- Tests E2E
- Tests de performance
Améliorer le Code
- Refactoring
- Optimisations performance
- Corrections sécurité
- Nouvelles fonctionnalités
Processus de Contribution
1. Fork & Clone
# Fork sur GitHub
# Puis clone
git clone https://github.com/VOTRE_USERNAME/csweb-community.git
cd csweb-community
# Ajouter upstream
git remote add upstream https://github.com/BOUNADRAME/csweb-community.git2. Créer une Branche
# Sync avec upstream
git checkout master
git pull upstream master
# Créer branche
git checkout -b feature/ma-fonctionnalite
# ou
git checkout -b fix/mon-bugConvention nommage branches :
feature/: Nouvelles fonctionnalitésfix/: Corrections bugsdocs/: Documentationrefactor/: Refactoringtest/: Tests
3. Développer
Guidelines :
- Suivre les conventions de code (PSR-12 pour PHP)
- Écrire tests pour nouveau code
- Commenter code complexe
- Mettre à jour documentation
- Commits atomiques et descriptifs
Convention commits :
# Format
<type>(<scope>): <description>
# Exemples
feat(breakout): Add parallel processing with threads
fix(oauth): Correct token refresh timing
docs(readme): Update installation instructions
refactor(api): Simplify error handling
test(cli): Add tests for process-cases commandTypes de commits :
feat: Nouvelle fonctionnalitéfix: Correction bugdocs: Documentationstyle: Formatage coderefactor: Refactoringtest: Testschore: Maintenance
4. Tester
# Tests unitaires (local)
composer test
# ou directement
vendor/bin/phpunit --testsuite unit
# Tests unitaires avec couverture
composer test:coverage
# Analyse statique (PHPStan niveau 1)
composer phpstan
# ou directement
vendor/bin/phpstan analyse --no-progress
# Vérifier le formatage (PHP-CS-Fixer, dry-run)
composer cs-check
# ou directement
vendor/bin/php-cs-fixer fix --dry-run --diff
# Corriger automatiquement le formatage
composer cs-fix
# Via Docker
docker compose exec csweb composer test
docker compose exec csweb composer phpstan
docker compose exec csweb composer cs-checkStructure des tests :
tests/
bootstrap.php # Bootstrap custom (stub PdoHelper pour PHP 8.4)
Unit/ # Tests unitaires (sans dépendance BDD)
CSPro/
VectorClockTest.php
CSProResponseTest.php
CSProMySQLFormatterTest.php
FileManagerTest.php
Data/
BreakoutSchedulerTest.php
Service/
DatabaseDriverDetectorTest.php
BreakoutDatabaseConfigTest.php
HttpHelperErrorResponseTest.php
Integration/ # Tests d'intégration (avec BDD)Note PHP 8.4 : Le fichier tests/bootstrap.php fournit un stub pour PdoHelper
afin de contourner l'incompatibilité aura/sql ^4.0 avec PHP 8.4 (PDO::connect() statique).
Les tests unitaires fonctionnent sans base de données.
5. Push & Pull Request
# Commit changements
git add .
git commit -m "feat(breakout): Add parallel processing"
# Push vers votre fork
git push origin feature/ma-fonctionnaliteCréer Pull Request sur GitHub :
- Aller sur votre fork
- Cliquer "Compare & pull request"
- Remplir template PR :
## Description
Description claire des changements
## Type de Changement
- [ ] Bug fix
- [ ] Nouvelle fonctionnalité
- [ ] Breaking change
- [ ] Documentation
## Tests
- [ ] Tests unitaires ajoutés
- [ ] Tests d'intégration ajoutés
- [ ] Tests manuels effectués
## Checklist
- [ ] Code suit les conventions
- [ ] Documentation mise à jour
- [ ] Aucun warning PHPStan
- [ ] Tests passent- Soumettre PR
6. Review & Merge
Processus review :
- Automated checks (CI/CD)
- Code review par mainteneur
- Modifications si nécessaire
- Approbation
- Merge vers master
Guidelines Techniques
Code PHP
PSR-12 Compliance :
<?php namespace App\Service;
use App\Entity\Dictionary;
class BreakoutService
{
private DatabaseService $database;
public function __construct(DatabaseService $database)
{
$this->database = $database;
}
/**
* Process cases for specific dictionary
*/
public function processCases(Dictionary $dictionary, int $threads = 1): void
{
// Implementation
}
}Documentation MDX
Structure :
# Page Title
Brief introduction.
## Section 1
Content...
## Section 2
Content...
---
**Footer**Tests PHPUnit
Configuration : phpunit.xml.dist à la racine du projet (PHPUnit 9.6, 2 suites : unit et integration).
Namespace : Tests\Unit\ pour les tests unitaires, Tests\Integration\ pour les tests d'intégration.
Exemple :
<?php
namespace Tests\Unit\Service;
use AppBundle\Service\BreakoutDatabaseConfig;
use PHPUnit\Framework\TestCase;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class BreakoutDatabaseConfigTest extends TestCase
{
public function testDefaultDatabaseTypeIsPostgresql(): void
{
$params = $this->createMock(ParameterBagInterface::class);
$logger = $this->createMock(LoggerInterface::class);
$config = new BreakoutDatabaseConfig($params, $logger);
$this->assertSame('postgresql', $config->getDefaultDatabaseType());
}
}Bonnes pratiques :
- Utiliser
createMock()pour les dépendances (LoggerInterface, ParameterBagInterface) - Pour
PdoHelper: utilisergetMockBuilder()->disableOriginalConstructor()(le bootstrap s'en charge) - Sauvegarder/restaurer
$_ENVdanssetUp()/tearDown()pour les tests de configuration - Nommer les tests :
test<MethodName><Scenario>(ex:testGetDriverForTypeUnknownThrows)
Ressources
Documentation
- Documentation Nextra : Docs complètes
- CONTRIBUTING.md (opens in a new tab) : Guide complet
Outils
- PHPUnit : Tests unitaires — config
phpunit.xml.dist, suitesunitetintegration - PHPStan : Analyse statique niveau 1 — config
phpstan.neon.dist - PHP-CS-Fixer : Formatage code automatique (PSR-12) — config
.php-cs-fixer.dist.php - Docker : Environnement développement
Communication
- Discord : Lien dans README
- GitHub Issues : Questions techniques
- Email : Voir profil GitHub
Contributeurs Voir la liste complète des contributeurs :
Licence En contribuant, vous acceptez que vos contributions soient sous licence MIT.
CSWeb Community Platform - Contributing Guide Mainteneur : Bouna DRAME | Portfolio (opens in a new tab)