Commit | Line | Data |
---|---|---|
bf5c74e7 JL |
1 | @node Contribuer |
2 | @chapter Contribuer | |
3 | ||
4 | Ce projet est un effort coopératif et nous avons besoin de votre aide pour | |
5 | le faire grandir ! Contactez-nous sur @email{guix-devel@@gnu.org} et | |
3cacfa9e LC |
6 | @code{#guix} sur le réseau IRC Freenode. Nous accueillons les idées, les |
7 | rapports de bogues, les correctifs et tout ce qui pourrait aider le projet. | |
8 | Nous apprécions particulièrement toute aide sur la création de paquets | |
9 | (@pxref{Consignes d'empaquetage}). | |
bf5c74e7 JL |
10 | |
11 | @cindex code de conduite, des contributeurs | |
12 | @cindex convention de contribution | |
13 | Nous souhaitons fournir un environnement chaleureux, amical et sans | |
14 | harcèlement pour que tout le monde puisse contribuer au mieux de ses | |
3cacfa9e LC |
15 | capacités. Pour cela notre projet a une « Convention de contribution » |
16 | adaptée de @url{http://contributor-covenant.org/}. Vous pouvez trouver une | |
bf5c74e7 JL |
17 | version locale dans le fichier @file{CODE-OF-CONDUCT} dans l'arborescence |
18 | des sources. | |
19 | ||
20 | Les contributeurs n'ont pas besoin d'utiliser leur nom légal dans leurs | |
21 | correctifs et leurs communications en ligne ; ils peuvent utiliser n'importe | |
22 | quel nom ou pseudonyme de leur choix. | |
23 | ||
24 | @menu | |
3cacfa9e | 25 | * Construire depuis Git:: toujours le plus récent. |
bf5c74e7 JL |
26 | * Lancer Guix avant qu'il ne soit installé:: Astuces pour les hackers. |
27 | * La configuration parfaite:: Les bons outils. | |
28 | * Style de code:: Hygiène du contributeur. | |
29 | * Envoyer des correctifs:: Partager votre travail. | |
30 | @end menu | |
31 | ||
32 | @node Construire depuis Git | |
33 | @section Construire depuis Git | |
34 | ||
35 | Si vous souhaitez travailler sur Guix lui-même, il est recommandé d'utiliser | |
36 | la dernière version du dépôt Git : | |
37 | ||
38 | @example | |
39 | git clone https://git.savannah.gnu.org/git/guix.git | |
40 | @end example | |
41 | ||
42 | Lors de la construction de Guix depuis un extrait, les paquets suivants sont | |
43 | requis en plus de ceux mentionnés dans les instructions d'installation | |
44 | (@pxref{Prérequis}). | |
45 | ||
46 | @itemize | |
47 | @item @url{http://gnu.org/software/autoconf/, GNU Autoconf}; | |
48 | @item @url{http://gnu.org/software/automake/, GNU Automake}; | |
49 | @item @url{http://gnu.org/software/gettext/, GNU Gettext}; | |
50 | @item @url{http://gnu.org/software/texinfo/, GNU Texinfo}; | |
51 | @item @url{http://www.graphviz.org/, Graphviz}; | |
52 | @item @url{http://www.gnu.org/software/help2man/, GNU Help2man (facultatif)}. | |
53 | @end itemize | |
54 | ||
55 | La manière la plus simple de configurer un environnement de développement | |
56 | pour Guix est, bien sûr, d'utiliser Guix ! La commande suivante démarre un | |
57 | nouveau shell où toutes les dépendances et les variables d'environnements | |
58 | appropriées sont configurés pour travailler sur Guix : | |
59 | ||
60 | @example | |
61 | guix environment guix | |
62 | @end example | |
63 | ||
64 | @xref{Invoquer guix environment}, pour plus d'information sur cette | |
3cacfa9e | 65 | commande. On peut ajouter des dépendances supplémentaires avec |
bf5c74e7 JL |
66 | @option{--ad-hoc} : |
67 | ||
68 | @example | |
69 | guix environment guix --ad-hoc help2man git strace | |
70 | @end example | |
71 | ||
72 | Lancez @command{./bootstrap} pour générer l'infrastructure du système de | |
3cacfa9e | 73 | construction avec Autoconf et Automake. Si vous avez une erreur comme : |
bf5c74e7 JL |
74 | |
75 | @example | |
76 | configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES | |
77 | @end example | |
78 | ||
79 | @noindent | |
80 | cela signifie probablement qu'Autoconf n'a pas pu trouver @file{pkg.m4} qui | |
3cacfa9e LC |
81 | est fournit par pkg-config. Assurez-vous que @file{pkg.m4} est disponible. |
82 | C'est aussi vrai pour l'ensemble de macros de @file{guile.m4} fournies par | |
83 | Guile. Par exemple, si vous avez installé Automake dans @file{/usr/local}, | |
84 | il ne cherchera pas les fichiers @file{.m4} dans @file{/usr/share}. Dans ce | |
85 | case vous devez invoquer la commande suivante : | |
bf5c74e7 JL |
86 | |
87 | @example | |
88 | export ACLOCAL_PATH=/usr/share/aclocal | |
89 | @end example | |
90 | ||
91 | @xref{Macro Search Path,,, automake, The GNU Automake Manual}, pour plus | |
92 | d'information. | |
93 | ||
3cacfa9e | 94 | Ensuite, lancez @command{./configure} comme d'habitude. Assurez-vous de |
bf5c74e7 JL |
95 | passer @code{--localstatedir=@var{directory}} où @var{directory} est la |
96 | valeur @code{localstatedir} utilisée par votre installation actuelle | |
97 | (@pxref{Le dépôt} pour plus d'informations à ce propos). | |
98 | ||
99 | Finalement, vous devez invoquer @code{make check} pour lancer les tests | |
3cacfa9e | 100 | (@pxref{Lancer la suite de tests}). Si quelque chose échoue, jetez un œil |
bf5c74e7 JL |
101 | aux instructions d'installation (@pxref{Installation}) ou envoyez un message |
102 | à la list @email{guix-devel@@gnu.org}. | |
103 | ||
104 | ||
105 | @node Lancer Guix avant qu'il ne soit installé | |
106 | @section Lancer Guix avant qu'il ne soit installé | |
107 | ||
108 | Pour garder un environnement de travail sain, il est utile de tester les | |
3cacfa9e | 109 | changement localement sans les installer pour de vrai. Pour pouvoir |
bf5c74e7 JL |
110 | distinguer votre rôle « d'utilisateur final » de celui parfois haut en |
111 | couleur de « développeur ». | |
112 | ||
adfb167f JL |
113 | Pour cela, tous les outils en ligne de commande sont utilisables même sans |
114 | avoir lancé @code{make install}. Pour cela, vous devez d'abord avoir un | |
115 | environnement avec toutes les dépendances disponibles (@pxref{Construire depuis Git}), puis préfixer chaque commande par @command{./pre-inst-env} (le script | |
116 | @file{pre-inst-env} se trouve dans le répertoire de plus haut niveau de | |
117 | l'arborescence des sources de Guix ; il est généré par | |
118 | @command{./configure}) comme cela@footnote{L'option @option{-E} de | |
119 | @command{sudo} garantie que @code{GUILE_LOAD_PATH} est bien paramétré pour | |
120 | @command{guix-daemon} et pour que les outils qu'il utilise puissent trouver | |
121 | les modules Guile dont ils ont besoin.} : | |
bf5c74e7 JL |
122 | |
123 | @example | |
124 | $ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild | |
125 | $ ./pre-inst-env guix build hello | |
126 | @end example | |
127 | ||
128 | @noindent | |
129 | De même, pour une session Guile qui utilise les modules Guix : | |
130 | ||
131 | @example | |
132 | $ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))' | |
133 | ||
134 | ;;; ("x86_64-linux") | |
135 | @end example | |
136 | ||
137 | @noindent | |
138 | @cindex REPL | |
139 | @cindex read-eval-print loop | |
140 | @dots{} et pour un REPL (@pxref{Using Guile Interactively,,, guile, Guile | |
141 | Reference Manual}) | |
142 | ||
143 | @example | |
144 | $ ./pre-inst-env guile | |
145 | scheme@@(guile-user)> ,use(guix) | |
146 | scheme@@(guile-user)> ,use(gnu) | |
147 | scheme@@(guile-user)> (define snakes | |
148 | (fold-packages | |
149 | (lambda (package lst) | |
150 | (if (string-prefix? "python" | |
151 | (package-name package)) | |
152 | (cons package lst) | |
153 | lst)) | |
154 | '())) | |
155 | scheme@@(guile-user)> (length snakes) | |
156 | $1 = 361 | |
157 | @end example | |
158 | ||
159 | Le script @command{pre-inst-env} paramètre toutes les variables | |
160 | d'environnement nécessaires, dont @env{PATH} et @env{GUILE_LOAD_PATH}. | |
161 | ||
162 | Remarquez que @command{./pre-inst-env guix pull} ne met @emph{pas} à jour | |
2cf2c778 JL |
163 | l'arborescence des sources locale ; cela met seulement à jour le lien |
164 | symbolique de @file{~/.config/guix/current} (@pxref{Invoquer guix pull}). | |
3cacfa9e | 165 | Lancez @command{git pull} à la place si vous voulez mettre à jour votre |
2cf2c778 | 166 | arborescence des source locale. |
bf5c74e7 JL |
167 | |
168 | ||
169 | @node La configuration parfaite | |
170 | @section La configuration parfaite | |
171 | ||
172 | La configuration parfaite pour travailler sur Guix est simplement la | |
173 | configuration parfaite pour travailler en Guile (@pxref{Using Guile in | |
3cacfa9e | 174 | Emacs,,, guile, Guile Reference Manual}). Tout d'abord, vous avez besoin de |
bf5c74e7 JL |
175 | mieux qu'un éditeur de texte, vous avez besoin de |
176 | @url{http://www.gnu.org/software/emacs, Emacs}, amélioré par le superbe | |
177 | @url{http://nongnu.org/geiser/, Geiser}. | |
178 | ||
179 | Geiser permet le développement interactif et incrémental depuis Emacs : la | |
180 | compilation du code et son évaluation depuis les buffers, l'accès à la | |
181 | documentation en ligne (docstrings), la complétion sensible au contexte, | |
182 | @kbd{M-.} pour sauter à la définition d'un objet, un REPL pour tester votre | |
3cacfa9e LC |
183 | code, et bien plus (@pxref{Introduction,,, geiser, Geiser User Manual}). |
184 | Pour travailler confortablement sur Guix, assurez-vous de modifier le chemin | |
185 | de chargement de Guile pour qu'il trouve les fichiers source de votre dépôt | |
186 | : | |
bf5c74e7 JL |
187 | |
188 | @lisp | |
189 | ;; @r{Si l'extrait est dans ~/src/guix.} | |
190 | (with-eval-after-load 'geiser-guile | |
191 | (add-to-list 'geiser-guile-load-path "~/src/guix")) | |
192 | @end lisp | |
193 | ||
3cacfa9e LC |
194 | Pour effectivement éditer le code, Emacs a déjà un très bon mode Scheme. |
195 | Mais en plus de ça, vous ne devez pas rater | |
196 | @url{http://www.emacswiki.org/emacs/ParEdit, Paredit}. Il fournit des | |
197 | fonctionnalités pour opérer directement sur l'arbre de syntaxe, comme | |
198 | relever une s-expression ou l'envelopper, absorber ou rejeter la | |
199 | s-expression suivante, etc. | |
bf5c74e7 JL |
200 | |
201 | @cindex extraits de code | |
202 | @cindex modèles | |
203 | @cindex réduire la quantité de code commun | |
204 | Nous fournissons aussi des modèles pour les messages de commit git communs | |
3cacfa9e | 205 | et les définitions de paquets dans le répertoire @file{etc/snippets}. Ces |
bf5c74e7 JL |
206 | modèles s'utilisent avec @url{http://joaotavora.github.io/yasnippet/, |
207 | YASnippet} pour développer des chaînes courtes de déclenchement en extraits | |
3cacfa9e | 208 | de texte interactifs. Vous pouvez ajouter le répertoire des modèles dans la |
bf5c74e7 JL |
209 | variables @var{yas-snippet-dirs} d'Emacs. |
210 | ||
211 | @lisp | |
212 | ;; @r{Si l'extrait est dans ~/src/guix.} | |
213 | (with-eval-after-load 'yasnippet | |
214 | (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets")) | |
215 | @end lisp | |
216 | ||
adfb167f JL |
217 | Les extraits de messages de commit dépendent de @url{https://magit.vc/, |
218 | Magit} pour afficher les fichiers sélectionnés. Lors de la modification | |
219 | d'un message de commit, tapez @code{add} suivi de @kbd{TAB} pour insérer un | |
220 | modèle de message de commit pour ajouter un paquet ; tapez @code{update} | |
221 | suivi de @kbd{TAB} pour insérer un modèle pour la mise à jour d'un paquet ; | |
222 | tapez @code{https} suivi de @kbd{TAB} pour insérer un modèle pour le | |
223 | changement à HTTPS de l'URI de la page d'accueil. | |
bf5c74e7 JL |
224 | |
225 | L'extrait principal pour @code{scheme-mode} est lancé en tapant | |
3cacfa9e LC |
226 | @code{package…} suivi par @kbd{TAB}. Cet extrait insère aussi la chaîne de |
227 | déclenchement @code{origin…}, qui peut aussi être étendue. L'extrait | |
bf5c74e7 JL |
228 | @code{origin} lui-même peut aussi insérer des chaînes de déclenchement qui |
229 | finissent sur @code{…}, qui peuvent aussi être étendues. | |
230 | ||
231 | ||
232 | @node Style de code | |
233 | @section Style de code | |
234 | ||
235 | En général notre code suit le Standard de Code GNU (@pxref{Top,,, standards, | |
3cacfa9e | 236 | GNU Coding Standards}). Cependant, il ne parle pas beaucoup de Scheme, donc |
bf5c74e7 JL |
237 | voici quelques règles supplémentaires. |
238 | ||
239 | @menu | |
240 | * Paradigme de programmation:: Comment composer vos éléments. | |
241 | * Modules:: Où stocker votre code ? | |
242 | * Types de données et reconnaissance de motif:: Implémenter des | |
243 | structures de données. | |
244 | * Formatage du code:: Conventions d'écriture. | |
245 | @end menu | |
246 | ||
247 | @node Paradigme de programmation | |
248 | @subsection Paradigme de programmation | |
249 | ||
3cacfa9e | 250 | Le code Scheme dans Guix est écrit dans un style purement fonctionnel. Le |
bf5c74e7 JL |
251 | code qui s'occupe des entrées-sorties est une exception ainsi que les |
252 | procédures qui implémentent des concepts bas-niveau comme la procédure | |
253 | @code{memoize}. | |
254 | ||
255 | @node Modules | |
256 | @subsection Modules | |
257 | ||
258 | Les modules Guile qui sont sensés être utilisés du côté de la construction | |
3cacfa9e LC |
259 | doivent se trouver dans l'espace de nom @code{(guix build @dots{})}. Ils ne |
260 | doivent pas se référer à d'autres modules Guix ou GNU@. Cependant il est | |
bf5c74e7 JL |
261 | correct pour un module « côté hôte » de dépendre d'un module coté |
262 | construction. | |
263 | ||
264 | Les modules qui s'occupent du système GNU général devraient se trouver dans | |
265 | l'espace de nom @code{(gnu @dots{})} plutôt que @code{(guix @dots{})}. | |
266 | ||
267 | @node Types de données et reconnaissance de motif | |
268 | @subsection Types de données et reconnaissance de motif | |
269 | ||
270 | La tendance en Lisp classique est d'utiliser des listes pour tout | |
271 | représenter et de naviguer dedans « à la main ( avec @code{car}, @code{cdr}, | |
3cacfa9e | 272 | @code{cadr} et compagnie. Il y a plusieurs problèmes avec ce style, |
bf5c74e7 JL |
273 | notamment le fait qu'il soit dur à lire, source d'erreur et un obstacle aux |
274 | rapports d'erreur bien typés. | |
275 | ||
276 | Le code de Guix devrait définir des types de données appropriées (par | |
3cacfa9e LC |
277 | exemple, avec @code{define-record-type*}) plutôt que d'abuser des listes. |
278 | En plus, il devrait utiliser la recherche de motifs, via le module Guile | |
bf5c74e7 JL |
279 | @code{(ice-9 match)}, surtout pour rechercher dans des listes. |
280 | ||
281 | @node Formatage du code | |
282 | @subsection Formatage du code | |
283 | ||
284 | @cindex formater le code | |
285 | @cindex style de code | |
286 | Lorsque nous écrivons du code Scheme, nous suivons la sagesse commune aux | |
3cacfa9e | 287 | programmeurs Scheme. En général, nous suivons les |
bf5c74e7 | 288 | @url{http://mumble.net/~campbell/scheme/style.txt, règles de style de |
3cacfa9e LC |
289 | Riastradh}. Ce document décrit aussi les conventions utilisées dans le code |
290 | de Guile. Il est bien pensé et bien écrit, alors n'hésitez pas à le lire. | |
bf5c74e7 JL |
291 | |
292 | Certaines formes spéciales introduites dans Guix comme la macro | |
3cacfa9e | 293 | @code{substitute*} ont des règles d'indentation spécifiques. Elles sont |
bf5c74e7 | 294 | définies dans le fichier @file{.dir-locals.el} qu'Emacs utilise |
3cacfa9e | 295 | automatiquement. Remarquez aussi qu'Emacs-Guix fournit le mode |
bf5c74e7 JL |
296 | @code{guix-devel-mode} qui indente et colore le code Guix correctement |
297 | (@pxref{Development,,, emacs-guix, The Emacs-Guix Reference Manual}). | |
298 | ||
299 | @cindex indentation, du code | |
300 | @cindex formatage, du code | |
301 | Si vous n'utilisez pas Emacs, assurez-vous que votre éditeur connaisse ces | |
3cacfa9e | 302 | règles. Pour indenter automatiquement une définition de paquet, vous pouvez |
bf5c74e7 JL |
303 | aussi lancer : |
304 | ||
305 | @example | |
306 | ./etc/indent-code.el gnu/packages/@var{file}.scm @var{package} | |
307 | @end example | |
308 | ||
309 | @noindent | |
310 | Cela indente automatiquement la définition de @var{package} dans | |
3cacfa9e | 311 | @file{gnu/packages/@var{file}.scm} en lançant Emacs en mode commande. Pour |
bf5c74e7 JL |
312 | indenter un fichier complet, n'indiquez pas de second argument : |
313 | ||
314 | @example | |
315 | ./etc/indent-code.el gnu/services/@var{file}.scm | |
316 | @end example | |
317 | ||
3cacfa9e LC |
318 | @cindex Vim, édition de code Scheme |
319 | Si vous éditez du code avec Vim, nous recommandons de lancer @code{:set | |
320 | autoindent} pour que votre code soit automatiquement indenté au moment où | |
321 | vous l'entrez. En plus, | |
322 | @uref{https://www.vim.org/scripts/script.php?script_id=3998, | |
323 | @code{paredit.vim}} peut vous aider à gérer toutes ces parenthèses. | |
324 | ||
bf5c74e7 | 325 | Nous demandons que toutes les procédure de premier niveau contiennent une |
3cacfa9e LC |
326 | chaîne de documentation. Ce pré-requis peut être relâché pour les |
327 | procédures privées simples dans l'espace de nom @code{(guix build @dots{})} | |
328 | cependant. | |
bf5c74e7 JL |
329 | |
330 | Les procédures ne devraient pas avoir plus de quatre paramètres | |
331 | positionnés. Utilisez des paramètres par mot-clefs pour les procédures qui | |
332 | prennent plus de quatre paramètres. | |
333 | ||
334 | ||
335 | @node Envoyer des correctifs | |
336 | @section Envoyer des correctifs | |
337 | ||
3cacfa9e LC |
338 | Le développement se fait avec le système de contrôle de version Git. Ainsi, |
339 | l'accès au dépôt n'est pas strictement nécessaire. Nous accueillons les | |
bf5c74e7 JL |
340 | contributions sous forme de correctifs produits par @code{git format-patch} |
341 | envoyés sur la liste de diffusion @email{guix-patches@@gnu.org}. | |
342 | ||
343 | Cette liste de diffusion est gérée par une instance Debbugs accessible à | |
344 | l'adresse @uref{https://bugs.gnu.org/guix-patches}, qui nous permet de | |
3cacfa9e | 345 | suivre les soumissions. Chaque message envoyé à cette liste se voit |
bf5c74e7 JL |
346 | attribuer un numéro de suivi ; les gens peuvent ensuite répondre à cette |
347 | soumission en envoyant un courriel à @code{@var{NNN}@@debbugs.gnu.org}, où | |
348 | @var{NNN} est le numéro de suivi (@pxref{Envoyer une série de correctifs}). | |
349 | ||
350 | Veuillez écrire les messages de commit dans le format ChangeLog | |
351 | (@pxref{Change Logs,,, standards, GNU Coding Standards}) ; vous pouvez | |
352 | regarder l'historique des commits pour trouver des exemples. | |
353 | ||
354 | Avant de soumettre un correctif qui ajoute ou modifie la définition d'un | |
355 | paquet, veuillez vérifier cette check-list : | |
356 | ||
357 | @enumerate | |
358 | @item | |
359 | Si les auteurs du paquet logiciel fournissent une signature cryptographique | |
3cacfa9e LC |
360 | pour l'archive, faîtes un effort pour vérifier l'authenticité de l'archive. |
361 | Pour un fichier de signature GPG détaché, cela se fait avec la commande | |
362 | @code{gpg --verify}. | |
bf5c74e7 JL |
363 | |
364 | @item | |
365 | Prenez un peu de temps pour fournir un synopsis et une description adéquats | |
3cacfa9e | 366 | pour le paquet. Voir @xref{Synopsis et descriptions} pour quelques lignes |
bf5c74e7 JL |
367 | directrices. |
368 | ||
369 | @item | |
370 | Lancez @code{guix lint @var{paquet}}, où @var{paquet} est le nom du nouveau | |
371 | paquet ou du paquet modifié, et corrigez les erreurs qu'il rapporte | |
372 | (@pxref{Invoquer guix lint}). | |
373 | ||
374 | @item | |
375 | Assurez-vous que le paquet se construise sur votre plate-forme avec | |
376 | @code{guix build @var{paquet}}. | |
377 | ||
378 | @item | |
379 | @cindex construction groupée | |
380 | Assurez-vous que le paquet n'utilise pas de copie groupée d'un logiciel déjà | |
381 | disponible dans un paquet séparé. | |
382 | ||
383 | Parfois, les paquets incluent des copie du code source de leurs dépendances | |
3cacfa9e | 384 | pour le confort de leurs utilisateurs. Cependant, en tant que distribution, |
bf5c74e7 | 385 | nous voulons nous assurer que ces paquets utilisent bien les copient que |
3cacfa9e | 386 | nous avons déjà dans la distribution si elles existent. Cela améliore |
bf5c74e7 JL |
387 | l'utilisation des ressources (la dépendance n'est construite et stockée |
388 | qu'une seule fois) et permet à la distribution de faire des changements | |
389 | transversaux comme appliquer des correctifs de sécurité pour un paquet donné | |
390 | depuis un unique emplacement et qu'ils affectent tout le système, ce | |
391 | qu'empêchent les copies groupées. | |
392 | ||
393 | @item | |
3cacfa9e LC |
394 | Regardez le profile rapporté par @command{guix size} (@pxref{Invoquer guix size}). Cela vous permettra de remarquer des références à d'autres paquets |
395 | qui ont été retenus. Il peut aussi aider à déterminer s'il faut découper le | |
bf5c74e7 JL |
396 | paquet (@pxref{Des paquets avec plusieurs résultats}) et quelle dépendance |
397 | facultative utiliser. | |
398 | ||
399 | @item | |
400 | Pour les changements important, vérifiez que les paquets qui en dépendent | |
401 | (s'ils existent) ne sont pas affectés par le changement ; @code{guix refresh | |
402 | --list-dependant @var{paquet}} vous aidera (@pxref{Invoquer guix refresh}). | |
403 | ||
404 | @c =========================================================================== | |
405 | @c | |
406 | @c This file was generated with po4a. Translate the source file. | |
407 | @c | |
408 | @c =========================================================================== | |
409 | @c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>. | |
410 | @cindex stratégie de branche | |
411 | @cindex stratégie de planification des reconstructions | |
412 | Suivant le nombre de paquets dépendants et donc le nombre de reconstruction | |
413 | induites, les commits vont vers des branches différentes, suivant ces | |
414 | principes : | |
415 | ||
416 | @table @asis | |
417 | @item 300 paquets dépendants ou moins | |
418 | branche @code{master} (changements non-disruptifs). | |
419 | ||
420 | @item entre 300 et 1 200 paquets dépendants | |
3cacfa9e LC |
421 | branche @code{staging} (changemets non-disruptifs). Cette branche devrait |
422 | être fusionnées dans @code{master} tous les 3 semaines. Les changements par | |
bf5c74e7 JL |
423 | thèmes (par exemple une mise à jour de la pile GNOME) peuvent aller dans une |
424 | branche spécifique (disons, @code{gnome-updates}). | |
425 | ||
426 | @item plus de 1 200 paquets dépendants | |
427 | branche @code{core-updates} (peut inclure des changements majeurs et | |
3cacfa9e | 428 | potentiellement disruptifs). Cette branche devrait être fusionnée dans |
bf5c74e7 JL |
429 | @code{master} tous les 2,5 mois environ. |
430 | @end table | |
431 | ||
2cf2c778 JL |
432 | Toutes ces branches sont @uref{https://hydra.gnu.org/project/gnu, gérées par |
433 | notre ferme de construction} et fusionnées dans @code{master} une fois que | |
434 | tout a été construit correctement. Cela nous permet de corriger des | |
435 | problèmes avant qu'ils n'atteignent les utilisateurs et réduit la fenêtre | |
436 | pendant laquelle les binaires pré-construits ne sont pas disponibles. | |
437 | ||
438 | @c TODO: It would be good with badges on the website that tracks these | |
439 | @c branches. Or maybe even a status page. | |
440 | Généralement les autres branches que @code{master} sont considérées comme | |
441 | @emph{gelées} s'il y a eu une évaluation récente ou qu'il y a une branche | |
442 | @code{-next} correspondante. Demandez sur la liste de diffusion ou sur IRC | |
443 | si vous n'êtes pas sûr de savoir où pousser votre correctif. | |
bf5c74e7 JL |
444 | |
445 | @item | |
446 | @cindex déterminisme, du processus de construction | |
447 | @cindex construction reproductibles, vérification | |
3cacfa9e | 448 | Vérifiez si le processus de construction du paquet est déterministe. Cela |
bf5c74e7 JL |
449 | signifie typiquement vérifier qu'une construction indépendante du paquet |
450 | renvoie exactement le même résultat que vous avez obtenu, bit à bit. | |
451 | ||
452 | Une manière simple de le faire est de reconstruire le paquet plusieurs fois | |
453 | à la suite sur votre machine (@pxref{Invoquer guix build}) : | |
454 | ||
455 | @example | |
456 | guix build --rounds=2 mon-paquet | |
457 | @end example | |
458 | ||
459 | Cela est suffisant pour trouver une classe de non-déterminisme commune, | |
460 | comme l'horodatage ou des sorties générées aléatoirement dans le résultat de | |
461 | la construction. | |
462 | ||
463 | Une autre option consiste à utiliser @command{guix challenge} | |
3cacfa9e | 464 | (@pxref{Invoquer guix challenge}). Vous pouvez lancer la commande une fois |
bf5c74e7 | 465 | que les paquets ont été commités et construits par @code{hydra.gnu.org} pour |
3cacfa9e LC |
466 | vérifier s'il obtient le même résultat que vous. Mieux encore : trouvez une |
467 | autre machine qui peut le construire et lancez @command{guix publish}. Puis | |
bf5c74e7 JL |
468 | la machine distante est sûrement différente de la vôtre, cela peut trouver |
469 | des problèmes de non-déterminisme liés au matériel — par exemple utiliser | |
470 | une extension du jeu d'instruction — ou du noyau du système d'exploitation — | |
471 | par exemple se reposer sur @code{uname} ou les fichiers de @file{/proc}. | |
472 | ||
473 | @item | |
474 | Lorsque vous écrivez de la documentation, utilisez une formulation au genre | |
475 | neutre lorsque vous vous référez à des personnes, comme le | |
476 | @uref{https://fr.wikipedia.org/wiki/They_singulier, ``they''@comma{} | |
477 | ``their''@comma{} ``them'' singulier} (en anglais). | |
478 | ||
479 | @item | |
480 | Vérifiez que votre correctif contienne seulement un ensemble de changements | |
3cacfa9e LC |
481 | liés. Grouper des changements non liés ensemble rend la revue plus |
482 | difficile et plus lente. | |
bf5c74e7 JL |
483 | |
484 | Ajouter plusieurs paquet ou une mise à jour d'un paquet avec des corrections | |
485 | dans ce paquet sont des exemples de changements sans rapport. | |
486 | ||
487 | @item | |
488 | Suivez nos règles de formatage de code, éventuellement en lançant le script | |
489 | @command{et/indent-code.el} pour le faire automatiquement (@pxref{Formatage | |
490 | du code}). | |
491 | ||
adfb167f JL |
492 | @item |
493 | Si possible, utilisez des miroirs dans l'URL des sources (@pxref{Invoquer guix download}). Utilisez des URL stable, pas des URL générées. Par | |
494 | exemple, les archives GitHub ne sont pas nécessairement identiques d'une | |
495 | génération à la suivante, donc il vaut mieux dans ce cas cloner le dépôt. | |
496 | N'utilisez pas le champ @command{name} dans l'URL : ce n'est pas très utile | |
497 | et si le nom change, l'URL sera probablement erronée. | |
498 | ||
bf5c74e7 JL |
499 | @end enumerate |
500 | ||
501 | Lorsque vous envoyez un correctif à la liste de diffusion, utilisez | |
3cacfa9e | 502 | @samp{[PATCH] @dots{}} comme sujet. Vous pouvez utiliser votre client de |
bf5c74e7 | 503 | courriel ou la commande @command{git send-email} (@pxref{Envoyer une série |
3cacfa9e LC |
504 | de correctifs}). Nous préférons recevoir des correctifs en texte brut, soit |
505 | en ligne, soit en pièce-jointe MIME@. Nous vous conseillons de faire | |
bf5c74e7 JL |
506 | attention si votre client de courriel change par exemple les retours à la |
507 | ligne ou l'indentation, ce qui peut casser les correctifs. | |
508 | ||
509 | Lorsqu'un bogue est résolu, veuillez fermer le fil en envoyant un courriel à | |
510 | @email{@var{NNN}-done@@debbugs.gnu.org}. | |
511 | ||
512 | @unnumberedsubsec Envoyer une série de correctifs | |
513 | @anchor{Envoyer une série de correctifs} | |
514 | @cindex série de correctifs | |
515 | @cindex @code{git send-email} | |
516 | @cindex @code{git-send-email} | |
517 | ||
518 | @c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html | |
3cacfa9e | 519 | Lorsque vous envoyez une série de correctifs (p.@@:: ex.@: avec @code{git |
bf5c74e7 JL |
520 | send-email}), envoyez d'abord une premier message à |
521 | @email{guix-patches@@gnu.org} puis envoyez le reste des correctifs à | |
522 | @email{@var{NNN}@@debbugs.gnu.org} pour vous assurer qu'ils seront groupés | |
3cacfa9e | 523 | ensemble. Voyez @uref{https://debbugs.gnu.org/Advanced.html, la |
bf5c74e7 | 524 | documentation de Debbugs} pour plus d'informations. |