Skip to content

Commit beb6b3a

Browse files
authored
Merge pull request #3033 from kwizer15/feat/phpstan
Add phpstan into workflow
2 parents a455771 + 4babd33 commit beb6b3a

File tree

4 files changed

+726
-0
lines changed

4 files changed

+726
-0
lines changed

.github/workflows/phpstan.yaml

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
name: PHPStan
2+
3+
on:
4+
push:
5+
branches: [ alpha ]
6+
pull_request:
7+
branches: [ alpha ]
8+
9+
jobs:
10+
phpstan:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
15+
- name: Setup PHP 7.4 for dependencies
16+
uses: shivammathur/setup-php@v2
17+
with:
18+
php-version: 7.4
19+
20+
- name: Install Dependencies
21+
run: composer update --ignore-platform-reqs
22+
23+
- name: Setup PHP 8.2 for PHPStan
24+
uses: shivammathur/setup-php@v2
25+
with:
26+
php-version: 8.2
27+
28+
- name: Restore PHPStan cache
29+
id: cache-phpstan
30+
uses: actions/cache/restore@v3
31+
with:
32+
path: phpstan.phar
33+
key: phpstan-1
34+
35+
- name: Download PHPStan
36+
if: steps.cache-phpstan.outputs.cache-hit != 'true'
37+
run: wget https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar
38+
39+
- name: Run PHPStan
40+
run: php phpstan.phar analyse --configuration phpstan.neon
41+
42+
update-baseline:
43+
needs: phpstan
44+
if: github.event_name == 'push' && github.ref == 'refs/heads/alpha'
45+
runs-on: ubuntu-latest
46+
steps:
47+
- uses: actions/checkout@v4
48+
with:
49+
fetch-depth: 0
50+
51+
- name: Delete existing branch if exists
52+
run: |
53+
if git ls-remote --heads origin update-phpstan-baseline | grep update-phpstan-baseline; then
54+
git push origin --delete update-phpstan-baseline
55+
fi
56+
57+
- name: Setup PHP 7.4 for dependencies
58+
uses: shivammathur/setup-php@v2
59+
with:
60+
php-version: 7.4
61+
62+
- name: Install Dependencies
63+
run: composer update --ignore-platform-reqs
64+
65+
- name: Setup PHP 8.2 for PHPStan
66+
uses: shivammathur/setup-php@v2
67+
with:
68+
php-version: 8.2
69+
70+
- name: Download PHPStan
71+
run: wget https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar
72+
73+
- name: Generate new baseline
74+
id: generate-baseline
75+
run: |
76+
cp phpstan-baseline.neon phpstan-baseline.neon.old
77+
php phpstan.phar analyse --configuration phpstan.neon --generate-baseline
78+
if ! diff -q phpstan-baseline.neon phpstan-baseline.neon.old > /dev/null; then
79+
echo "baseline_changed=true" >> $GITHUB_OUTPUT
80+
fi
81+
82+
- name: Create Pull Request
83+
if: steps.generate-baseline.outputs.baseline_changed == 'true'
84+
uses: peter-evans/create-pull-request@v5
85+
with:
86+
commit-message: Update PHPStan baseline
87+
title: '[CI] Update PHPStan baseline'
88+
body: |
89+
Mise à jour automatique du baseline PHPStan suite à la correction d'erreurs.
90+
91+
Cette PR a été générée automatiquement par le workflow CI/CD.
92+
branch: update-phpstan-baseline
93+
base: alpha
94+
delete-branch: true
95+
reviewers: |
96+
zoic21
97+
Hotfirenet
98+
tmartinez69009
99+
Salvialf
100+
Sekiro-kost
101+
reineabs
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Guide PHPStan pour Jeedom
2+
3+
## Installation locale
4+
5+
1. Télécharger PHPStan :
6+
```bash
7+
wget https://github.com/phpstan/phpstan/releases/latest/download/phpstan.phar
8+
```
9+
10+
2. Mettre à jour les dépendances :
11+
```bash
12+
composer update --ignore-platform-reqs
13+
```
14+
15+
## Configuration
16+
17+
Le fichier `phpstan.neon` à la racine du projet contient la configuration suivante :
18+
19+
```yaml
20+
parameters:
21+
level: 1
22+
paths:
23+
- core
24+
- desktop
25+
- install
26+
- mobile
27+
excludePaths:
28+
- vendor/*
29+
tmpDir: .phpstan.cache
30+
baseline: phpstan-baseline.neon
31+
reportUnmatchedIgnoredErrors: false
32+
33+
includes:
34+
- phpstan-baseline.neon
35+
```
36+
37+
Notes importantes :
38+
- Niveau d'analyse : 1 / 10 (0 = minimum, 10 = maximum)
39+
- Le baseline permet d'ignorer les erreurs existantes
40+
- Les erreurs corrigées sont automatiquement retirées des erreurs détectées
41+
42+
## Utilisation quotidienne
43+
44+
### Lancer l'analyse
45+
```bash
46+
php phpstan.phar analyse --configuration phpstan.neon
47+
```
48+
49+
### Types d'erreurs courantes et solutions
50+
51+
1. **Variable might not be defined** :
52+
```php
53+
// Erreur
54+
function maFonction() {
55+
if($condition) {
56+
$variable = 'valeur';
57+
}
58+
echo $variable; // Erreur : variable non définie si condition fausse
59+
}
60+
61+
// Solution
62+
function maFonction() {
63+
$variable = null; // Initialisation par défaut
64+
if($condition) {
65+
$variable = 'valeur';
66+
}
67+
echo $variable;
68+
}
69+
```
70+
71+
2. **Method X not found in class Y** :
72+
```php
73+
// Erreur
74+
$object->methodQuiNexistePas();
75+
76+
// Solution
77+
// Vérifier si la méthode existe dans la classe
78+
// Ou utiliser une interface/classe abstraite pour définir le contrat
79+
```
80+
81+
3. **Cannot call method X on mixed** :
82+
```php
83+
// Erreur
84+
$result = getData(); // getData() retourne mixed
85+
$result->method(); // Erreur : impossible d'appeler une méthode sur mixed
86+
87+
// Solution
88+
if (is_object($result)) {
89+
$result->method();
90+
}
91+
```
92+
93+
## Cas particuliers
94+
95+
### Ignorer une erreur spécifique
96+
Si une erreur ne peut pas être corrigée ou doit être ignorée, ajoutez un commentaire PHPStan :
97+
```php
98+
/** @phpstan-ignore-next-line */
99+
$resultat = codeProblematiqueQuiNeDoitPasEtreModifie();
100+
```
101+
102+
### Générer un nouveau baseline
103+
Si de nombreuses erreurs existantes doivent être ignorées :
104+
```bash
105+
php phpstan.phar analyse --configuration phpstan.neon --generate-baseline
106+
```
107+
108+
## Intégration continue
109+
110+
### Vérification du code
111+
112+
Le workflow GitHub Actions vérifie automatiquement le code à chaque push et pull request sur la branche alpha. En cas d'échec :
113+
114+
1. Consultez les logs de l'action pour voir les erreurs
115+
2. Reproduisez l'analyse en local
116+
3. Corrigez les erreurs ou mettez à jour le baseline si nécessaire
117+
118+
### Mise à jour automatique du baseline
119+
120+
Un processus automatique a été mis en place pour maintenir le baseline à jour :
121+
122+
1. Après chaque merge sur alpha, le système vérifie si des erreurs du baseline peuvent être supprimées
123+
2. Si des erreurs ont été corrigées et peuvent être retirées du baseline :
124+
- Une nouvelle branche `update-phpstan-baseline` est créée
125+
- Une Pull Request est automatiquement ouverte
126+
- La PR contient uniquement la mise à jour du fichier `phpstan-baseline.neon`
127+
3. Cette PR peut être revue et mergée comme toute autre PR
128+
129+
👉 Note : Il n'est pas nécessaire de mettre à jour le baseline manuellement, le système automatique s'en charge lorsque des erreurs sont corrigées.
130+
131+
## Bonnes pratiques
132+
133+
- Exécutez PHPStan localement avant de commiter
134+
- Corrigez les erreurs plutôt que de les ignorer quand c'est possible
135+
- Pour les nouvelles classes/méthodes, essayez de ne pas générer de nouvelles erreurs
136+
- Commentez le code clairement quand vous devez ignorer une erreur
137+
- Laissez le système automatique gérer la mise à jour du baseline
138+
- Revoyez les PRs de mise à jour du baseline pour vérifier que les erreurs retirées ont bien été corrigées intentionnellement
139+
140+
---
141+
142+
Besoin d'aide supplémentaire ? Consultez la [documentation officielle de PHPStan](https://phpstan.org/user-guide/getting-started).

0 commit comments

Comments
 (0)