Skip to content

Commit 7b28029

Browse files
authored
Merge pull request #1185 from dnum-mi/1184-docs-guide-contributeur-improvements
docs(guide): améliore et renomme le guide du contributeur
2 parents 18908d4 + 85462a2 commit 7b28029

File tree

6 files changed

+294
-126
lines changed

6 files changed

+294
-126
lines changed

.vitepress/config.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ const guideItems = [
6969
},
7070
{
7171
text: 'Guide du contributeur',
72-
link: '/guide/guide-developpeur.md',
72+
link: '/guide/guide-contributeur.md',
7373
},
7474
]
7575

@@ -488,7 +488,7 @@ export default defineConfig({
488488
text: 'Guides',
489489
items: [
490490
{ text: 'Guide de l’utilisateur', link: '/guide/pour-commencer' },
491-
{ text: 'Guide du contributeur', link: '/guide/guide-developpeur' },
491+
{ text: 'Guide du contributeur', link: '/guide/guide-contributeur' },
492492
],
493493
},
494494
{

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ et **la fusion doit être demandée dans `develop`.**
3939

4040
### Détails
4141

42-
Cf [le site officiel](https://vue-ds.fr/guide/guide-developpeur)
42+
Cf [le site officiel](https://vue-ds.fr/guide/guide-contributeur)
4343

4444
## Projets utilisant VueDsfr
4545

docs/guide/guide-contributeur.md

Lines changed: 289 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,289 @@
1+
# Guide du contributeur
2+
3+
## Comment contribuer
4+
5+
::: info NOTE
6+
7+
Ceci est le **guide du contributeur** pour contribuer au projet de cette bibliothèque.
8+
Si vous cherchez à **utiliser** cette bibliothèque, veuillez vous référer au
9+
[Guide d'utilisation](./pour-commencer.md).
10+
11+
:::
12+
13+
### TL;DR
14+
15+
- Tous les textes doivent être en français (commits, discussions GitHub, commentaires...) ;
16+
- chaque commit doit expliquer son contexte et/ou sa raison d’être en premier
17+
- chaque commit doit respecter les **[Commits Conventionnels](https://www.conventionalcommits.org/fr/v1.0.0/)** ;
18+
- une PR doit être faite avec une branche **à jour avec la branche `develop` en `rebase` (et sans `merge`) avant demande de fusion** ;
19+
- et **la fusion doit être demandée dans `develop`** ;
20+
- le nom de la branche doit être préfixé par le numéro de l’issue GitHub correspondante.
21+
22+
Un commit qui répond à l’ajout d’une fonctionnalité doit contenir (à la fin, généralement) le mot-clé `closes` suivi de l’issue GitHub correspondante.
23+
24+
Exemple entier :
25+
26+
sur la branche **`1170-radio-button-set-rich`**, ajouter un commit comme suit :
27+
28+
```text
29+
feat(DsfrRadioButtonSet): ✨ ajoute la propriété rich pour les boutons radio enrichis
30+
31+
- Permet d'utiliser des boutons radio "riches" avec du contenu enrichi dans `DsfrRadioButtonSet`
32+
- Améliore les possibilités de mise en forme des options de boutons radio
33+
- Répond au besoin d'avoir des boutons radio avec du contenu plus riche que du simple texte
34+
35+
- Ajout de la propriété optionnelle `rich?: boolean` dans `DsfrRadioButtonSetProps`
36+
- Transmission de la prop `rich` au composant `DsfrRadioButton` enfant
37+
38+
closes #1170
39+
```
40+
41+
Un commit qui répond à l’ajout d’une fonctionnalité doit contenir (à la fin, généralement) le mot-clé `closes` suivi de l’issue GitHub correspondante.
42+
43+
Exemple :
44+
45+
sur la branche **`1170-radio-button-prop-types`**, ajouter un commit :
46+
47+
```text
48+
fix(DsfrRadioButton): 🐛 corrige le type des props
49+
50+
- `DsfrRadioButtonProps`
51+
- Améliore les possibilités de mise en forme des options de boutons radio
52+
- Répond au besoin d'avoir des boutons radio avec du contenu plus riche que du simple texte
53+
54+
- Ajout de la propriété optionnelle `rich?: boolean` dans `DsfrRadioButtonSetProps`
55+
- Transmission de la prop `rich` au composant `DsfrRadioButton` enfant
56+
57+
fixes #1080
58+
```
59+
60+
::: tip Astuce
61+
62+
Demander à copilot de créer le commit.
63+
64+
En effet, le projet contient des instructions qui sont normalement automatiquement par copilot et qui écriront des messages de commit formattés selon les conventions du projet.
65+
66+
:::
67+
68+
### Langue et communication
69+
70+
Il s’agit d’un projet franco-français dédié aux sites officiels français. Ce dépôt ne sera donc lu que par des français.
71+
72+
Ainsi, **tout le contenu de ce projet doit être rédigé en français**, y compris :
73+
74+
- Messages de commits
75+
- Commentaires dans le code
76+
- Documentation
77+
- Échanges sur GitHub (issues, pull requests, discussions)
78+
- Noms de fichiers lorsque c'est pertinent
79+
80+
**Seules exceptions autorisées et même recommandées :**
81+
82+
- **Noms de branches** : en anglais pour qu'ils soient plus courts et standardisés (ex: `180-button-component`, `123-accessibility-issue-on-dsfr-tab`)
83+
- **Noms de variables et fonctions** : en anglais selon les conventions de développement (ex: `handleClick`, `isVisible`, `userConfig`)
84+
85+
Cette approche permet de maintenir la cohérence du projet tout en respectant les bonnes pratiques de développement internationales.
86+
87+
### Cloner le projet
88+
89+
```shell
90+
git clone https://github.com/dnum-mi/vue-dsfr
91+
```
92+
93+
### Pré-requis
94+
95+
- pnpm : version 10.2.1
96+
- Node.js : version 22 minimum
97+
98+
#### Installation des pré-requis (testé sous Ubuntu 24.04)
99+
100+
##### Installation de Node.js
101+
102+
###### Ubuntu
103+
104+
Suivez la procédure suivante en lançant les commandes détaillées ci-dessous :
105+
106+
1. Mise à jour des dépôts :
107+
108+
```shell
109+
wget -qO- https://deb.nodesource.com/setup_22.x | sudo -E bash -
110+
```
111+
112+
2. Installer `Node.js` :
113+
114+
```shell
115+
sudo apt install -y nodejs
116+
```
117+
118+
##### Windows
119+
120+
Suivre les indications du [site officiel](https://nodejs.org/fr/download)
121+
122+
##### macOS
123+
124+
Suivre les indications du [site officiel](https://nodejs.org/fr/download)
125+
126+
##### Installation par `volta`
127+
128+
Optionnel et fortement recommandé, installer `volta` pour gérer les version de Node.js :
129+
130+
1. Avec la commande curl :
131+
132+
```shell
133+
curl https://get.volta.sh | bash
134+
```
135+
136+
2. Fermer et rouvrir un terminal, ou bien taper la commande suivante dans tous les terminaux déjà ouverts :
137+
138+
```shell
139+
source ~/.bashrc
140+
```
141+
142+
3. Vérifier la version de Volta installée :
143+
144+
```shell
145+
volta --version
146+
```
147+
148+
4. La bonne version de node sera utilisée automatiquement (indiquée dans la propriété `volta.node` du `package.json`)
149+
150+
Dans le dossier `vue-dsfr`, si vous lancez la commande suivante :
151+
152+
```shell
153+
node --version
154+
```
155+
156+
Vous devriez voir 22.x.x
157+
158+
##### Installation de pnpm
159+
160+
Une fois Node.js installé, installez pnpm avec Corepack (méthode recommandée) :
161+
162+
```shell
163+
# Activer Corepack
164+
corepack enable
165+
166+
# Utiliser la version spécifiée dans package.json
167+
corepack use [email protected]
168+
169+
# Ou installer pnpm globalement
170+
npm install -g pnpm
171+
```
172+
173+
### Commandes de développement
174+
175+
Une fois le projet cloné et les dépendances installées :
176+
177+
```shell
178+
# Installation des dépendances
179+
pnpm install
180+
181+
# Démarrer Storybook (développement composants)
182+
pnpm dev
183+
184+
# Démarrer l'app de démonstration
185+
pnpm demo
186+
187+
# Démarrer la documentation
188+
pnpm docs:dev
189+
190+
# Lancer les tests
191+
pnpm test
192+
193+
# Lancer le linting
194+
pnpm lint
195+
196+
# Builder le projet
197+
pnpm build
198+
```
199+
200+
### Comment contribuer au projet
201+
202+
- Cloner le projet et créer des [pull-request](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests)
203+
- Indiquer les bugs dans des [issues](https://github.com/dnum-mi/vue-dsfr/issues)
204+
- Faire des demandes dans [discussions](https://github.com/dnum-mi/vue-dsfr/discussions)
205+
- Rejoindre le [server Discord](https://discord.gg/cCS5MGWZ)
206+
207+
### À propos des pull-requests
208+
209+
Les commits doivent suivre la spécification des **[Commits Conventionnels](https://www.conventionalcommits.org/fr/v1.0.0/)** afin que
210+
l’outil de release automatique détecte les nouvelles fonctionnalités, les corrections d’anomalies, et les modifications des documentations.
211+
212+
Les branches doivent être le plus possible **à jour avec la branche `develop` en `rebase` (et sans `merge`) avant demande de fusion**,
213+
et **la fusion doit être demandée dans `develop`.**
214+
215+
### Structure du projet
216+
217+
```
218+
vue-dsfr/
219+
├── src/
220+
│ ├── components/ # Composants DSFR (DsfrButton/, DsfrCard/, etc.)
221+
│ ├── composables/ # Composables Vue (useScheme, useTabs, etc.)
222+
│ ├── utils/ # Fonctions utilitaires
223+
│ └── index.ts # Point d'entrée principal
224+
├── demo-app/ # Application de démonstration
225+
├── docs/ # Documentation VitePress
226+
├── tests/unit # Tests unitaires et utilitaires
227+
├── meta/ # Outils de build et résolveurs
228+
├── meta-dts/ # Déclarations TypeScript des fichiers du dossier `meta`
229+
└── types/ # Déclarations TypeScript
230+
```
231+
232+
### Standards de développement
233+
234+
#### TypeScript
235+
236+
- **Utiliser `<script setup lang="ts">`** pour tous les composants
237+
- **Props typées** : `defineProps<PropsInterface>()` obligatoire
238+
- **Pas de `any`** : utiliser `unknown` si nécessaire
239+
- **Types explicites** pour les interfaces publiques
240+
241+
#### Vue.js
242+
243+
- **Composition API** uniquement (`<script setup lang="ts">`)
244+
- **Ref et computed** pour la réactivité
245+
- **Composables** pour la logique partagée dans `src/composables/`
246+
- **Nommage** : composants en PascalCase, props en camelCase
247+
248+
#### Tests
249+
250+
- **Vitest** pour les tests unitaires (`*.spec.ts`)
251+
- **Colocalisation** : tests, documentation (`.md`) est stories (`.stories.ts`) à côté des composants
252+
- **Couverture** obligatoire pour les nouvelles fonctionnalités
253+
254+
#### Documentation
255+
256+
- **Storybook** : stories obligatoires pour les nouveaux composants (`*.stories.ts`)
257+
- **Fichier .md** : documentation en français pour chaque composant
258+
- **Démos** : exemples d'usage dans `docs-demo/` pour la documentation VitePress
259+
260+
### Résolution des problèmes courants
261+
262+
#### Problèmes de build
263+
264+
```shell
265+
# Nettoyer et réinstaller
266+
rm -rf node_modules pnpm-lock.yaml
267+
pnpm install
268+
269+
# Vérifier les versions
270+
node --version # >= 22.0.0
271+
pnpm --version # 10.2.1
272+
```
273+
274+
#### Tests qui échouent
275+
276+
```shell
277+
# Lancer les tests en mode watch
278+
pnpm test --watch
279+
```
280+
281+
#### Problèmes de linting
282+
283+
```shell
284+
# Fix automatique
285+
pnpm format
286+
287+
# Vérifier le format et les règles de lint
288+
pnpm lint
289+
```

0 commit comments

Comments
 (0)