# Comment contribuer 👍🎉 PremiĂšrement, merci de prendre le temps de lire ceci et de contribuer! 🎉👍 Les contributions de tiers nous aide Ă  amĂ©liorer et faire grandir QMK. Nous voulons rendre les pull requests et le processus de contribution utile et simple Ă  la fois pour les contributeurs et les mainteneurs. C'est pourquoi nous avons mis en places des directives pour les contributeurs afin que votre pull request puisse ĂȘtre acceptĂ© sans changement majeur. * [Aperçu du projet](#project-overview) * [Conventions de codage](#coding-conventions) * [Directives gĂ©nĂ©rales](#general-guidelines) * [Que veut dire le code de conduite pour moi?](#what-does-the-code-of-conduct-mean-for-me) ## Je ne veux pas lire tout ce pavĂ©! J'ai juste une question! Si vous voulez poser une question sur QMK, vous pouvez le faire sur le [sous-reddit OLKB](https://reddit.com/r/olkb) ou sur [Discord](https://discord.gg/Uq7gcHh). Merci de garder ceci en tĂȘte: * Cela peut prendre plusieurs heures pour que quelqu'un rĂ©ponde Ă  votre question. Merci d'ĂȘtre patient! * Tous ceux impliquĂ©s avec QMK fait don de son temps et de son Ă©nergie. Nous ne sommes pas payĂ©s pour travailler sur ou rĂ©pondre aux questions concernant QMK. * Essayez de poser vos questions de maniĂšre Ă  ce qu'elles soient le plus simple Ă  rĂ©pondre possible. Si vous n'ĂȘtes pas sĂ»rs de savoir comment faire, voici quelques bon guides (en anglais): * https://opensource.com/life/16/10/how-ask-technical-questions * http://www.catb.org/esr/faqs/smart-questions.html # Aperçu du projet QMK est majoritairement Ă©crit en C, avec quelques fonctions et parties spĂ©cifiques Ă©crites en C++. Il est destinĂ© aux processeurs intĂ©grĂ©s que l'on trouve dans des clavier, particuliĂšrement AVR ([LUFA](https://www.fourwalledcubicle.com/LUFA.php)) et ARM ([ChibiOS](https://www.chibios.org)). Si vous maĂźtrisez dĂ©jĂ  la programmation sur Arduino, vous trouverez beaucoup de concepts et de limitations familiers. Une expĂ©rience prĂ©alable avec les Arduino n'est pas nĂ©cessaire Ă  contribuer avec succĂšs Ă  QMK. # OĂč trouver de l'aide? Si vous avez besoin d'aide, vous pouvez [ouvrir une issue](https://github.com/qmk/qmk_firmware/issues) ou [un chat sur Discord](https://discord.gg/Uq7gcHh). # Comment contribuer? Vous n'avez encore jamais contribuĂ© Ă  un projet open source? Vous vous demandez comment les contributions dans QMK fonctionnent? Voici un aperçu rapide! 0. Enregistrez-vous sur [GitHub](https://github.com). 1. DĂ©finissez une keymap Ă  contribuer, [trouvez une issue](https://github.com/qmk/qmk_firmware/issues) que vous souhaitez corriger, ou [une fonction](https://github.com/qmk/qmk_firmware/issues?q=is%3Aopen+is%3Aissue+label%3Afeature) que vous voulez ajouter. 2. CrĂ©ez un fork sur le dĂ©pĂŽt associĂ© avec une issue sur votre compte GitHub. Cela veut dire que vous allez avoir une copie du dĂ©pĂŽt sous `votre-login-GitHub/qmk_firmware`. 3. Clonez le dĂ©pĂŽt sur votre machine locale en utilisant `git clone https://github.com/login-github/repository-name.git`. 4. Si vous travaillez sur une nouvelle fonctionnalitĂ©, pensez Ă  ouvrir une issue pour parler avec nous du travail que vous souhaitez dĂ©marrer. 5. CrĂ©ez une nouvelle branche pour votre correctif en utilisant `git checkout -b nom-de-branche`. 6. Faites les changements nĂ©cessaires pour corriger le problĂšme ou ajouter la fonctionnalitĂ©. 7. Utilisez `git add chemin-de-fichier` pour ajouter les contenus des fichiers modifiĂ©s au "snapshot" que git utilise pour gĂ©rer l'Ă©tat du projet, appelĂ© aussi l'index. 8. Utilisez `git commit -m "InsĂ©rez une description courte des changements (en anglais)"` pour enregistrer le contenu de l'index avec un message descriptif. 9. Poussez les changements vers votre dĂ©pĂŽt sur GitHub en utilisant `git push origin nom-de-branche`. 10. CrĂ©ez un pull request sur [QMK Firmware](https://github.com/qmk/qmk_firmware/pull/new/master). 11. Donnez un titre Ă  votre pull request en utilisant une description courte des changements que vous avez fait et ajoutez le numĂ©ro de l'issue ou du bug associĂ© avec votre changement. Les commentaires de PR devraient se faire en anglais de prĂ©fĂ©rence. Par exemple, vous pouvez utiliser un titre tel que celui-lĂ : "Added more log outputting to resolve #4352". 12. Dans la description du pull request, expliquez les changements que vous avez fait et tous les problĂšmes qui existent, selon vous, sur le pull request que vous avez fait. Vous pouvez aussi utiliser la description pour poser des questions au mainteneur. Il n'est pas nĂ©cessaire que votre pull request soit parfait (aucun pull request ne l'est), le reviewer sera lĂ  pour vous aider Ă  rĂ©soudre les problĂšmes et l'amĂ©liorer! 13. Attendez que le pull request soit revu par un mainteneur. 14. Faites des changements au pull request si le mainteneur le recommande. 15. CĂ©lĂ©brez votre succĂšs une fois votre pull request fusionnĂ©! # Conventions de codage La grande majoritĂ© de notre style est plutĂŽt simple Ă  comprendre. Si vous connaissez C ou Python, vous ne devriez pas avoir trop de difficultĂ© avec notre style. * [Conventions de codage - C](coding_conventions_c.md) * [Conventions de codage - Python](coding_conventions_python.md) # Directives gĂ©nĂ©rales Nous avons un certain nombre de type de changements dans QMK, chacun nĂ©cessitant un niveau de rigueur diffĂ©rent. Nous voulons que vous gardiez les directives suivantes en tĂȘte quel que soit le changement que vous ĂȘtes en train de faire. * SĂ©parez les PR dans des unitĂ©s logiques. Par exemple, ne soumettez pas un PR qui couvre deux fonctionnalitĂ©s sĂ©parĂ©es, soumettez plutĂŽt un PR pour chaque fonctionnalitĂ©. * VĂ©rifiez les espaces blancs non nĂ©cessaires avec `git diff --check` avant de commit. * Assurez-vous que votre code compile. * Keymaps: Assurez-vous que `make keyboard:your_new_keymap` ne renvoie pas d'erreur. * Claviers: Assurez-vous que `make keyboard:all` ne renvoie pas d'erreur. * Core: Assurez-vous que `make all` ne renvoie pas d'erreur. * Assurez-vous que les messages de commit soient comprĂ©hensibles d'eux-mĂȘmes. Vous devriez Ă©crire une description simple (pas plus de 70 caractĂšres) sur la premiĂšre ligne, suivi d'une ligne vide, suivi d'un dĂ©tail de votre commit, si nĂ©cessaire. Exemple: ``` Adjust the fronzlebop for the kerpleplork The kerpleplork was intermittently failing with error code 23. The root cause was the fronzlebop setting, which causes the kerpleplork to activate every N iterations. Limited experimentation on the devices I have available shows that 7 is high enough to avoid confusing the kerpleplork, but I'd like to get some feedback from people with ARM devices to be sure. ``` ## Documentation La documentation est l'une des maniĂšres les plus simples de dĂ©marrer la contribution sur QMK. Il est simple de trouver des endroits oĂč la documentation est fausse ou incomplĂšte, et il est tout aussi simple de la corriger! Nous avons aussi grandement besoin de quelqu'un pour Ă©diter notre documentation, donc si vous avez des compĂ©tences en Ă©dition mais que vous n'ĂȘtes pas sĂ»r de savoir oĂč aller, n'hĂ©sitez pas [demandez de l'aide](#where-can-i-go-for-help)! Vous trouverez toute notre documentation dans le rĂ©pertoire `qmk_firmware/docs`, ou si vous prĂ©fĂ©rez utiliser des outils web, vous pouvez cliquer sur le bouton "Suggest An Edit" en haut de chaque page sur https://docs.qmk.fm/. Lorsque vous donnez des exemples de code dans la documentation, essayez de suivre les conventions de nommage utilisĂ©es ailleurs dans la documentation. Par exemple, standardisez les enums en utilisant `my_layers` ou `my_keycodes` afin de garder une consistance: ```c enum my_layers { _FIRST_LAYER, _SECOND_LAYER }; enum my_keycodes { FIRST_LAYER = SAFE_RANGE, SECOND_LAYER }; ``` ## Keymaps La plupart des contributeurs dĂ©butants dĂ©marrent avec leurs keymaps personnelles. Nous essayons de garder les standards pour les keymaps pluĂŽt simple (les keymaps reflĂštent, aprĂšs tout, la personnalitĂ© de leurs crĂ©ateurs) mais nous demandons que vous suiviez les directives suivantes afin que d'autres puissent dĂ©couvrir et apprendre de votre keymap. * Ecrivez un fichier `readme.md` en utilisant [la template](documentation_templates.md). * Tous les PR de keymaps doivent ĂȘtre "squashĂ©s", donc si la maniĂšre dont vos commits sont squashĂ©s vous est important, vous devez le faire vous-mĂȘme. * Ne regroupez pas des fonctionnalitĂ©s avec votre PR de keymap. Envoyez d'abord votre fonctionnalitĂ©, puis crĂ©ez un second PR pour la keymap. * N'incluez pas de fichier `Makefile` dans votre dossier de keymap (ils ne sont plus utilisĂ©s) * Mettez Ă  jour les copyrights dans les en-tĂȘtes de fichiers (cherchez `%YOUR_NAME%`) ## Claviers Les claviers sont la raison d'ĂȘtre de QMK. Certains claviers sont maintenus par la communautĂ©, alors que d'autre sont maintenus par les gens responsables de la crĂ©ation du clavier. Le fichier `readme.md` devrait vous informer de qui maintient le clavier. Si vous avez des questions concernant un clavier en particulier, vous pouvez [Ouvrir une issue](https://github.com/qmk/qmk_firmware/issues) et tagger le mainteneur dans votre question. Nous vous demandons aussi que vous suiviez ces directives: * Ecrivez un fichier `readme.md` en utilisant [le template](documentation_templates.md). * Gardez un nombre de commits raisonnable, ou nous squasherons votre PR. * Ne regroupez pas des fonctionnalitĂ©s avec le PR pour votre clavier. Envoyez d'abord votre fonctionnalitĂ©, puis crĂ©ez un second PR pour le clavier. * Appelez les fichiers `.c`/`.h` du nom du dossier parent, par exemple `/keyboards///.[ch]` * N'incluez pas de fichier `Makefile` dans votre dossier de keymap (ils ne sont plus utilisĂ©s) * Mettez Ă  jour les copyrights dans les en-tĂȘtes de fichiers (cherchez `%YOUR_NAME%`) ## Quantum/TMK Core Faites attention d'ĂȘtre sĂ»r d'implĂ©menter votre nouvelle fonctionnalitĂ© de la meilleure maniĂšre qu'il soit avant d'investir beaucoup de travail Ă  son dĂ©veloppement. Vous pouvez apprendre les bases de QMK en lisant [Comprendre QMK](understanding_qmk.md), qui vous donnera une idĂ©e du flux du programme QMK. A partir de lĂ , parlez nous afin de dĂ©finir la meilleure façon d'implĂ©menter votre idĂ©e. Il y a deux façons principale de le faire: * [Chat sur Discord](https://discord.gg/Uq7gcHh) * [Ouvrir une Issue](https://github.com/qmk/qmk_firmware/issues/new) Les PR de nouvelles fonctionnalitĂ©s de de correction de bug affectent tous les claviers. Nous sommes aussi dans un processus de restructuration de QMK. Pour cette raison, il est absolument nĂ©cessaire que tout changement important ou significatif soit discutĂ© avant que l'implĂ©mentation soit faite. Si vous ouvrez un PR sans nous avoir parlĂ©, prĂ©parez-vous Ă  faire des refontes significatives si vos changements ne sont pas compatibles avec ce que nous avons planifiĂ©. Voici quelques choses Ă  garder en tĂȘte lorsque vous travaillez sur une fonctionnalitĂ© ou un bug fix. * **DĂ©sactivĂ© par dĂ©faut** - la mĂ©moire est plutĂŽt limitĂ©e sur la plupart des puces que QMK supporte, et il est important que les keymaps courantes ne soient pas cassĂ©es. S'il vous plaĂźt faites que vos features doivent ĂȘtre **activĂ©es** plutĂŽt que dĂ©sactivĂ©es. Si vous pensez qu'elle devrait ĂȘtre activĂ©e par dĂ©faut, ou que cela rĂ©duit la taille du code, parlez-nous-en. * **Compilez localement avant de soumettre** - Cela devrait aller sans dire, mais votre code doit compiler! Vous devriez toujours faire gaffe Ă  ce que vos changements compilent avant d'ouvrir une pull request. * **Faites attention aux rĂ©visions et diffĂ©rentes bases de puces** - beaucoup de claviers ont des rĂ©visions qui permettent des changements de configuration mineurs, voir des bases de chip diffĂ©rentes. Essayez de faire que votre fonctionnalitĂ© soit supportĂ©e Ă  la fois sur ARM et AVR, ou dĂ©sactivez-lĂ  automatiquement sur les plateformes non supportĂ©es. * **Expliquez votre fonctionnalitĂ©** - Documentez-lĂ  dans `docs/`, soit dans un nouveau fichier, ou dans une partie d'un fichier existant. Si vous ne la documentez pas, personne ne pourra bĂ©nĂ©ficier de votre dur labeur. Nous vous demandons aussi de suivre ces directives: * Gardez un nombre de commits raisonnable, ou nous squasherons votre PR. * Ne regroupez pas des claviers ou des keymaps avec des changements core. Soumettez vos changements core en premier. * Ecrivez des [Tests Unitaires](unit_testing.md) pour votre fonctionnalitĂ©. * Suivez le style du fichier que vous modifiez. Si le style n'est pas clair ou qu'il y a un mĂ©lange de fichiers, vous devriez vous conformer aux [conventions de codage](#coding-conventions) au dessus. ## Refactoriser Afin de maintenir une vision claire sur comment les choses sont architectuĂ©es dans QMK, nous essayons de planifier des refactorisations en profondeur et qu'un collaborateur fasse le changement. Si vous avez une idĂ©e de refactorisation, ou une suggestion, [ouvrez une issue] [open an issue](https://github.com/qmk/qmk_firmware/issues), nous adorons discuter de comment amĂ©liorer QMK. # Que veut dire le code de conduite pour moi? Note [Code De Conduite](https://github.com/qmk/qmk_firmware/blob/master/CODE_OF_CONDUCT.md) veut dire que vous avez la responsabilitĂ© de traiter tout le monde dans le projet avec respect et courtoisie, peu importe leur identitĂ©. Si vous ĂȘtes victime d'une attitude ou de commentaires inappropriĂ©s, tels que dĂ©crit dans notre Code de Conduite, nous sommes lĂ  pour vous et nous ferons de notre mieux pour nous assurer que le fautif soit rĂ©primandĂ©, tel que dĂ©crit dans notre code.