Contribuer sur GitHub¶
Ce guide s’adresse aux personnes qui veulent participer au développement de Flower mais qui n’ont pas l’habitude de contribuer à des projets GitHub.
If you’re familiar with how contributing on GitHub works, you can directly checkout our getting started guide for contributors.
Mise en place du référentiel¶
- Créer un compte GitHub et configurer Git
Git is a distributed version control tool. This allows for an entire codebase’s history to be stored and every developer’s machine. It is a software that will need to be installed on your local machine, you can follow this guide to set it up.
GitHub, lui-même, est une plateforme d’hébergement de code pour le contrôle des versions et la collaboration. Il permet à chacun de collaborer et de travailler de n’importe où sur des dépôts à distance.
Si ce n’est pas déjà fait, tu devras créer un compte sur GitHub.
L’idée derrière le flux de travail générique de Git et GitHub se résume à ceci : tu télécharges le code d’un dépôt distant sur GitHub, tu apportes des modifications localement et tu en gardes une trace à l’aide de Git, puis tu télécharges ton nouvel historique à nouveau sur GitHub.
- Fourche le dépôt de Flower
A fork is a personal copy of a GitHub repository. To create one for Flower, you must navigate to https://github.com/adap/flower (while connected to your GitHub account) and click the
Fork
button situated on the top right of the page.Tu peux changer le nom si tu le souhaites, mais ce n’est pas nécessaire car cette version de Flower sera la tienne et se trouvera dans ton propre compte (c’est-à-dire dans ta propre liste de dépôts). Une fois créée, tu devrais voir dans le coin supérieur gauche que tu es en train de regarder ta propre version de Flower.
- Clonage de ton dépôt forké
L’étape suivante consiste à télécharger le dépôt forké sur ta machine pour pouvoir y apporter des modifications. Sur la page de ton dépôt forké, tu dois d’abord cliquer sur le bouton
Code
à droite, ce qui te permettra de copier le lien HTTPS du dépôt.Une fois que tu as copié le <URL>, tu peux ouvrir un terminal sur ta machine, naviguer jusqu’à l’endroit où tu veux télécharger le référentiel et taper :
$ git clone <URL>
This will create a
flower/
(or the name of your fork if you renamed it) folder in the current working directory.
- Ajouter l’origine
Tu peux ensuite aller dans le dossier du référentiel :
$ cd flower
Et ici, nous devrons ajouter une origine à notre dépôt.L’origine est le <URL> du dépôt fork distant.Pour l’obtenir, nous pouvons faire comme indiqué précédemment en allant sur notre dépôt fork sur notre compte GitHub et en copiant le lien.
Une fois que le <URL> est copié, nous pouvons taper la commande suivante dans notre terminal :
$ git remote add origin <URL>
- Ajouter en amont
Now we will add an upstream address to our repository. Still in the same directory, we must run the following command:
$ git remote add upstream https://github.com/adap/flower.git
Le schéma suivant explique visuellement ce que nous avons fait dans les étapes précédentes :
L’amont est l’adresse distante GitHub du dépôt parent (dans ce cas Flower), c’est-à-dire celui auquel nous voulons éventuellement contribuer et dont nous avons donc besoin d’un historique à jour. L’origine est simplement l’adresse distante GitHub du dépôt forké que nous avons créé, c’est-à-dire la copie (fork) dans notre propre compte.
Pour nous assurer que notre version locale du fork est à jour avec les dernières modifications du dépôt Flower, nous pouvons exécuter la commande suivante :
$ git pull upstream main
Mise en place de l’environnement de codage¶
This can be achieved by following this getting started guide for contributors (note that you won’t need to clone the repository). Once you are able to write code and test it, you can finally start making changes!
Apporter des changements¶
Avant de faire des changements, assure-toi que tu es à jour avec ton référentiel :
$ git pull origin main
Et avec le référentiel de Flower :
$ git pull upstream main
- Créer une nouvelle branche
Pour rendre l’historique plus propre et plus facile à travailler, c’est une bonne pratique de créer une nouvelle branche pour chaque fonctionnalité/projet qui doit être mis en œuvre.
Pour ce faire, il suffit d’exécuter la commande suivante dans le répertoire du référentiel :
$ git switch -c <branch_name>
- Apporter des modifications
Écris du bon code et crée de merveilleuses modifications à l’aide de ton éditeur préféré !
- Teste et mets en forme ton code
N’oublie pas de tester et de formater ton code ! Sinon, ton code ne pourra pas être fusionné dans le dépôt Flower, et ce, afin que la base de code reste cohérente et facile à comprendre.
Pour ce faire, nous avons écrit quelques scripts que tu peux exécuter :
$ ./dev/format.sh # to format your code $ ./dev/test.sh # to test that your code can be accepted $ ./baselines/dev/format.sh # same as above but for code added to baselines $ ./baselines/dev/test.sh # same as above but for code added to baselines
- Changements de scène
Avant de créer un commit qui mettra à jour ton historique, tu dois spécifier à Git les fichiers qu’il doit prendre en compte.
Cela peut se faire avec :
$ git add <path_of_file_to_stage_for_commit>
To check which files have been modified compared to the last version (last commit) and to see which files are staged for commit, you can use the
git status
command.
- Commit changes
Once you have added all the files you wanted to commit using
git add
, you can finally create your commit using this command:$ git commit -m "<commit_message>"
The <commit_message> is there to explain to others what the commit does. It should be written in an imperative style and be concise. An example would be
git commit -m "Add images to README"
.
- Pousser les changements vers la fourche
Une fois que nous avons validé nos modifications, nous avons effectivement mis à jour notre historique local, mais GitHub n’a aucun moyen de le savoir à moins que nous ne poussions nos modifications vers l’adresse distante de notre origine :
$ git push -u origin <branch_name>
Une fois que c’est fait, tu verras sur GitHub que ton repo forké a été mis à jour avec les modifications que tu as apportées.
Créer et fusionner une pull request (PR)¶
- Créer le PR
Une fois que tu as poussé les modifications, sur la page web GitHub de ton dépôt, tu devrais voir le message suivant :
Otherwise you can always find this option in the
Branches
page.Once you click the
Compare & pull request
button, you should see something similar to this:En haut, tu as une explication de quelle branche sera fusionnée à quel endroit :
Dans cet exemple, tu peux voir que la demande consiste à fusionner la branche
doc-fixes
de mon dépôt forké à la branchemain
du dépôt Flower.The title should be changed to adhere to the PR title format guidelines, otherwise it won’t be possible to merge the PR. So in this case, a correct title might be
docs(framework:skip) Fix typos
.La zone de saisie au milieu est là pour que tu décrives ce que fait ton PR et que tu le relies aux questions existantes. Nous avons placé des commentaires (qui ne seront pas rendus une fois le PR ouvert) pour te guider tout au long du processus.
It is important to follow the instructions described in comments.
En bas de l’écran, tu trouveras le bouton permettant d’ouvrir le PR, ce qui informera les réviseurs qu’un nouveau PR a été ouvert et qu’ils doivent le consulter pour le fusionner ou demander des modifications.
Si ton RP n’est pas encore prêt à être examiné, et que tu ne veux avertir personne, tu as la possibilité de créer un brouillon de demande de traction :
- Faire de nouveaux changements
Une fois que le PR a été ouvert (en tant que brouillon ou non), tu peux toujours y pousser de nouveaux commits de la même manière qu’auparavant, en apportant des modifications à la branche associée au PR.
- Review the PR
Une fois que le PR a été ouvert ou que le projet de PR a été marqué comme étant prêt, une révision des propriétaires de code sera automatiquement demandée :
Les propriétaires du code vont alors se pencher sur le code, poser des questions, demander des modifications ou valider le RP.
La fusion sera bloquée s’il y a des changements demandés en cours.
Pour les résoudre, il suffit de pousser les changements nécessaires vers la branche associée au PR :
Et résous la conversation :
Une fois que toutes les conversations ont été résolues, tu peux redemander un examen.
- Une fois que le PR est fusionné
Si tous les tests automatiques ont réussi et que les réviseurs n’ont plus de modifications à demander, ils peuvent approuver le PR et le fusionner.
Une fois qu’elle est fusionnée, tu peux supprimer la branche sur GitHub (un bouton devrait apparaître pour le faire) et aussi la supprimer localement en faisant :
$ git switch main $ git branch -D <branch_name>
Ensuite, tu dois mettre à jour ton dépôt forké en faisant :
$ git pull upstream main # to update the local repository $ git push origin main # to push the changes to the remote repository
Exemple de première contribution¶
Problème¶
For our documentation, we’ve started to use the Diàtaxis framework.
Our « How to » guides should have titles that continue the sentence « How to … », for example, « How to upgrade to Flower 1.0 ».
La plupart de nos guides ne suivent pas encore ce nouveau format, et changer leur titre est (malheureusement) plus compliqué qu’on ne le pense.
This issue is about changing the title of a doc from present continuous to present simple.
Let’s take the example of « Saving Progress » which we changed to « Save Progress ». Does this pass our check?
Before: « How to saving progress » ❌
After: « How to save progress » ✅
Solution¶
This is a tiny change, but it’ll allow us to test your end-to-end setup. After cloning and setting up the Flower repo, here’s what you should do:
Find the source file in
doc/source
Make the change in the
.rst
file (beware, the dashes under the title should be the same length as the title itself)Build the docs and check the result
Renommer le fichier¶
Tu as peut-être remarqué que le nom du fichier reflète toujours l’ancienne formulation. Si nous changeons simplement le fichier, nous brisons tous les liens existants vers celui-ci - il est très important d’éviter cela, car briser des liens peut nuire à notre classement dans les moteurs de recherche.
Here’s how to change the file name:
Change the file name to
save-progress.rst
Add a redirect rule to
doc/source/conf.py
This will cause a redirect from saving-progress.html
to save-progress.html
, old
links will continue to work.
Applique les changements dans le fichier d’index¶
For the lateral navigation bar to work properly, it is very important to update the
index.rst
file as well. This is where we define the whole arborescence of the
navbar.
Find and modify the file name in
index.rst
Open PR¶
Commit the changes (commit messages are always imperative: « Do something », in this case « Change … »)
Transmets les changements à ta fourchette
Open a PR (as shown above) with title
docs(framework) Update how-to guide title
Attends qu’elle soit approuvée !
Félicitations 🥳 Tu es désormais officiellement une contributrice de Flower !
Prochaines étapes¶
Une fois que tu auras fait ton premier RP, et que tu voudras contribuer davantage, ne manque pas de consulter les sites suivants :
Good first contributions, where you should particularly look into the
baselines
contributions.
Annexe¶
PR title format¶
We enforce the following PR title format:
<type>(<project>) <subject>
(or <type>(<project>:skip) <subject>
to ignore the PR in the changelog)
Where <type>
needs to be in {ci, fix, feat, docs, refactor, break}
,
<project>
should be in {framework, baselines, datasets, examples, or '*' when
modifying multiple projects which requires the ':skip' flag to be used}
, and
<subject>
starts with a capitalised verb in the imperative mood.
Valid examples:
feat(framework) Add flwr build CLI command
refactor(examples:skip) Improve quickstart-pytorch logging
ci(*:skip) Enforce PR title format
Invalid examples:
feat(framework): Add flwr build CLI command
(extra:
)feat(*) Add flwr build CLI command
(missingskip
flag along with*
)feat(skip) Add flwr build CLI command
(missing<project>
)feat(framework) add flwr build CLI command
(non capitalised verb)feat(framework) Add flwr build CLI command.
(dot at the end)Add flwr build CLI command.
(missing<type>(<project>)
)