Ce guide explique comment intégrer PHPQA centralisé dans vos projets PHP (Library, Bundle ou Application).
PHPQA centralisé permet de :
- ✅ Utiliser les mêmes tâches Castor dans tous vos projets
- ✅ Utiliser les mêmes workflows GitHub Actions
- ✅ Avoir une configuration minimale par projet
- ✅ Maintenir la configuration QA en un seul endroit
Assurez-vous que votre projet est à proximité du dépôt phpqa :
~/Projects/
├── phpqa/ # Ce dépôt
├── votre-library/ # Votre projet
├── votre-bundle/ # Votre projet
└── votre-app/ # Votre projet
Créez .phpqa-config.php à la racine de votre projet :
<?php
return [
'type' => 'library', // ou 'bundle', 'application'
'php_version' => '8.4',
'source_dirs' => ['src', 'tests'],
'check_licenses' => true,
'infection_enabled' => true,
'deptrac_enabled' => true,
'js_enabled' => false,
];📝 Note : Ce fichier est optionnel. Sans configuration, des valeurs par défaut sensées seront utilisées.
<?php
return [
'type' => 'library',
'check_licenses' => true,
'infection_enabled' => true,
'deptrac_enabled' => true,
];<?php
return [
'type' => 'application',
'check_licenses' => false,
'infection_enabled' => false,
'js_enabled' => true,
'console_path' => 'bin/console',
];Créez castor.php à la racine de votre projet :
<?php
declare(strict_types=1);
use function Castor\import;
// Import centralized PHPQA tasks
import(__DIR__ . '/../phpqa/.castor/phpqa.php');<?php
declare(strict_types=1);
use Castor\Attribute\AsTask;
use function Castor\import;
use function Castor\run;
// Import centralized PHPQA tasks
import(__DIR__ . '/../phpqa/.castor/phpqa.php');
// Add application-specific tasks
#[AsTask(description: 'Start the application')]
function start(): void
{
run(['docker', 'compose', 'up', '-d']);
}
#[AsTask(description: 'Stop the application')]
function stop(): void
{
run(['docker', 'compose', 'down']);
}Créez .github/workflows/ci.yml :
name: 📁 PHP CI
on:
push:
branches: ['*.x']
tags: ['*']
pull_request: ~
workflow_dispatch: ~
jobs:
ci:
uses: spomky-labs/phpqa/.github/workflows/reusable-ci.yml@main
with:
project_type: 'library'
php_versions: '["8.2", "8.3", "8.4"]'
experimental_php_versions: '["8.5"]'
enable_infection: true
enable_deptrac: true
enable_license_check: truename: 📁 PHP CI
on:
push:
branches: ['main', 'develop']
tags: ['*']
pull_request: ~
workflow_dispatch: ~
jobs:
ci:
uses: spomky-labs/phpqa/.github/workflows/reusable-ci.yml@main
with:
project_type: 'application'
php_versions: '["8.4"]'
enable_infection: false
enable_license_check: false
enable_js_tests: trueToutes les commandes sont dans le namespace qa: :
# Tests et couverture
castor qa:phpunit
# Analyse statique
castor qa:phpstan
castor qa:phpstan-baseline
# Style de code
castor qa:ecs
castor qa:ecs-fix
# Refactoring
castor qa:rector
castor qa:rector-fix
# Architecture
castor qa:deptrac
# Validation
castor qa:lint
castor qa:validate
castor qa:check-licenses
# Mutation testing
castor qa:infect
# Tests JavaScript (si activé)
castor qa:js
# Préparation PR
castor qa:prepare-pr
# Exécuter toutes les vérifications
castor qa:all
# Utilitaires
castor qa:install # Installer les dépendances
castor qa:update-image # Mettre à jour l'image Docker PHPQASi votre projet est de type application, vous avez aussi :
castor app:console [commande] # Exécuter une commande Symfonycastor list| Option | Type | Défaut | Description |
|---|---|---|---|
type |
string | 'library' |
Type de projet : library, bundle, application |
php_version |
string | Version courante | Version PHP pour Docker |
source_dirs |
array | ['src', 'tests'] |
Répertoires à analyser |
check_licenses |
bool | true |
Activer la vérification des licences |
allowed_licenses |
array | MIT, Apache-2.0... | Licences autorisées |
infection_enabled |
bool | true |
Activer Infection |
deptrac_enabled |
bool | true |
Activer Deptrac |
js_enabled |
bool | false |
Activer les tests JS |
docker_enabled |
bool | true |
Utiliser Docker |
console_path |
string | 'bin/console' |
Chemin vers la console Symfony |
| Paramètre | Type | Défaut | Description |
|---|---|---|---|
project_type |
string | 'library' |
Type de projet |
php_versions |
JSON array | ["8.2", "8.3", "8.4"] |
Versions PHP à tester |
experimental_php_versions |
JSON array | ["8.5"] |
Versions PHP expérimentales |
default_php_version |
string | '8.4' |
Version PHP pour l'analyse |
enable_lowest_deps |
bool | true |
Test avec dépendances minimales |
enable_infection |
bool | true |
Activer Infection |
enable_deptrac |
bool | true |
Activer Deptrac |
enable_license_check |
bool | true |
Vérification des licences |
enable_js_tests |
bool | false |
Tests JavaScript |
enable_exported_files_check |
bool | true |
Vérification des fichiers exportés |
exported_files |
string | Liste de fichiers | Fichiers attendus dans l'export |
mv castor.php castor.php.oldExaminez castor.php.old et identifiez les tâches spécifiques à votre projet (celles qui ne sont pas liées à PHPQA).
Créez un nouveau castor.php qui importe PHPQA et ajoute vos tâches spécifiques :
<?php
declare(strict_types=1);
use function Castor\import;
// Import centralized PHPQA tasks
import(__DIR__ . '/../phpqa/.castor/phpqa.php');
// Add your project-specific tasks here
// (copied from castor.php.old)# Lister les commandes disponibles
castor list
# Tester une commande
castor qa:phpstanRemplacez votre .github/workflows/ci.yml par le workflow réutilisable :
jobs:
ci:
uses: spomky-labs/phpqa/.github/workflows/reusable-ci.yml@main
with:
# Vos paramètresDes exemples complets sont disponibles dans le dossier examples/ :
examples/.phpqa-config-library.php- Configuration pour une libraryexamples/.phpqa-config-application.php- Configuration pour une applicationexamples/castor-library.php- castor.php minimal pour libraryexamples/castor-application.php- castor.php pour applicationexamples/ci-library.yml- Workflow GitHub Actions pour libraryexamples/ci-application.yml- Workflow GitHub Actions pour application
- Une seule source de vérité pour toutes les tâches QA
- Mise à jour facilitée : un seul endroit à modifier
- Cohérence entre tous vos projets
- Configuration minimale par projet
- Pas de duplication de code
- Maintenance réduite
- Configuration optionnelle avec valeurs par défaut sensées
- Possibilité d'ajouter des tâches spécifiques au projet
- Support de différents types de projets (library, bundle, application)
- Facile d'ajouter de nouveaux outils
- Les projets existants bénéficient automatiquement des améliorations
- Workflows GitHub Actions réutilisables
Installez Castor :
# Via Composer
composer global require castor/castor
# Ou téléchargez le binaire
# https://github.com/jolicode/castor/releasesVérifiez que le chemin dans import() est correct :
// Le chemin doit pointer vers le dossier phpqa
import(__DIR__ . '/../phpqa/.castor/phpqa.php');Mettez à jour l'image Docker :
castor qa:update-imageAssurez-vous que :
- Le workflow est bien publié sur GitHub
- L'organisation/utilisateur est correct :
spomky-labs/phpqa - La branche est correcte :
@main
Pour toute question ou problème :
- Consultez ce guide
- Vérifiez les exemples dans
examples/ - Ouvrez une issue sur le dépôt phpqa