Référence
Ressources
Contribution

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 :

  1. Vérifier que le bug n'est pas déjà signalé
  2. Tester sur la dernière version
  3. 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
 
## Logs

Logs 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.git

2. 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-bug

Convention nommage branches :

  • feature/ : Nouvelles fonctionnalités
  • fix/ : Corrections bugs
  • docs/ : Documentation
  • refactor/ : Refactoring
  • test/ : 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 command

Types de commits :

  • feat : Nouvelle fonctionnalité
  • fix : Correction bug
  • docs : Documentation
  • style : Formatage code
  • refactor : Refactoring
  • test : Tests
  • chore : 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-check

Structure 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-fonctionnalite

Créer Pull Request sur GitHub :

  1. Aller sur votre fork
  2. Cliquer "Compare & pull request"
  3. 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
  1. Soumettre PR

6. Review & Merge

Processus review :

  1. Automated checks (CI/CD)
  2. Code review par mainteneur
  3. Modifications si nécessaire
  4. Approbation
  5. 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 : utiliser getMockBuilder()->disableOriginalConstructor() (le bootstrap s'en charge)
  • Sauvegarder/restaurer $_ENV dans setUp()/tearDown() pour les tests de configuration
  • Nommer les tests : test<MethodName><Scenario> (ex: testGetDriverForTypeUnknownThrows)

Ressources

Documentation

Outils

  • PHPUnit : Tests unitaires — config phpunit.xml.dist, suites unit et integration
  • 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 :

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)