--- myst: html_meta: keywords: sphinx,compilation,local --- # Compilation en local de la FAQ Pour voir les effets des modifications qu'ils ont apportées aux fichiers sources `.md` de la FAQ, les contributeurs doivent *a priori* : 1. attendre la fin du processus d'intégration/développement continu (lancé automatiquement sur notre instance GitLab lorsqu'ils les "poussent" sur le dépôt du projet) ; 2. aller (à nouveau) consulter en ligne sur le site https://faq.gutenberg-asso.fr/ les pages .`html` correspondantes (ré)générées. Ces contributeurs peuvent (devraient?) préférer compiler la FAQ en local sur leur machine car cela présente au moins trois avantages : - ils peuvent ainsi ne publier qu'après contrôle en local des effets de leurs modifications ; - pour un unique fichier modifié, la compilation ne dure que quelques secondes ce qui permet un contrôle rapide ; - le "log" de la compilation permet d'avoir connaissance de certains problèmes (éventuellement créés par les modifications venant d'être apportées). Pour pouvoir compiler en local la FAQ, il y a au moins deux méthodes : 1. *pas* via une image Docker ; 2. via une image Docker. :::{attention} Nous avons testé ces méthodes avec le système d'exploitation GNU/Linux et les détaillons donc dans ce cadre. Les mêmes instructions sont valables à quelques modifications éventuelles près pour macOS. ::: :::{todo} Transposer pour Windows les détails (donnés pour GNU/Linux) des méthodes permettant de compiler la FAQ en local. ::: ## Méthode n'utilisant pas d'image Docker Cette méthode nécessite : - l'installation de logiciels en local sur la machine du contributeur, et ceci principalement dans un environnement `Python` virtuel via `pip install` ; - le clonage du dépôt `git` de la FAQ qui est hébergé sur [l'instance GitLab de GUTenberg](https://gitlab.gutenberg-asso.fr/) ; - l'emploi de commandes (`make`, `git`) lancées dans un terminal, avec l'environnment virtuel `Python` activé, afin de tester en local puis de contribuer vos changements. ### Étapes à suivre la première fois 1. Si ce n'est déjà fait, installez `git`. 2. Si ce n'est déjà fait, installez `python` et `python3-venv`. 3. Clonez le dépôt de la FAQ. Ceci peut être fait de deux façons (voir [Édition en clonant le dépôt](#edition-en-clonant) pour une description plus détaillée) : - soit avec `ssh`, ce qui suppose un compte ouvert *et une clé publique enregistrée* sur notre instance GitLab : ```bash git clone ssh://git@gitlab.gutenberg-asso.fr:31022/gutenberg/faq-gut.git ``` - soit avec `https`, ce qui n'est pratique sur le long terme que si le mécanisme du [`credential.helper`](https://git-scm.com/book/sv/v2/Git-Tools-Credential-Storage) de `git` est mis en oeuvre afin de ne pas avoir à redonner son nom d'utilisateur GitLab et le mot de passe associé à chaque "push" : ```bash git clone https://gitlab.gutenberg-asso.fr/gutenberg/faq-gut.git ``` 4. Créez un environnement virtuel `python`, par exemple nommé `.venv` et placé dans un sous-dossier (caché) du dossier de la FAQ : ```bash python3 -m venv .venv ``` 5. Activez l'environnement virtuel `.venv` : ```bash source .venv/bin/activate ``` L'activation de l'environnement virtuel modifie le *prompt* de votre ligne de commande en le faisant précéder du nom choisi pour cet environnement virtuel. 6. Installez certains modules `python` nécessaires à la compilation de la FAQ (dont bien sûr [`Sphinx-doc`](https://www.sphinx-doc.org)) : ```bash python3 -m pip install -U pip python3 -m pip install \ Sphinx \ Pillow \ sphinx_comments \ sphinx_design \ sphinxext.opengraph \ myst_parser \ linkify-it-py \ sphinx_tippy \ sphinx_sitemap \ pydata_sphinx_theme \ sphinx_copybutton \ sphinx_togglebutton \ sphinx_examples \ sphinx_last_updated_by_git ``` 7. Installez `pygments-acetexlexer` (module `python` enrichissant le surligneur syntaxique `Pygments`) : ```bash python3 -m pip install git+https://gitlab.gutenberg-asso.fr/dbitouze/pygments-acetexlexer.git@main ``` 8. Dans le dossier de la FAQ (où vous devriez vous trouver avec l'environnement virtuel `.venv` actif), lancez la compilation de cette dernière : ```bash make html ``` Pour cette première fois, la compilation sera complète et donc un peu longue. :::{note} En principe, vous devriez obtenir le même effet avec la commande suivante : ```bash sphinx-build -j auto source build/html -d build/doctrees ``` Mais il n'y a pas de raison de l'utiliser plutôt que `make html`. ::: Vous verrez éventuellement apparaître un certain nombre de *warnings* signalant, comme lors d'une compilation LaTeX, de potentiels problèmes, dont certains peuvent être ignorés. 9. Lorsque cette compilation est achevée, vous pouvez consulter dans un navigateur Web la FAQ construite localement sur votre machine. Il suffit pour ce faire de lancer la commande (ici pour le navigateur Firefox) : ```bash firefox build/html/index.html & ``` puis de naviguer dans la FAQ comme vous le feriez en ligne. :::{note} Sur macOS, utilisez `open build/html/index.html`. ::: ### Faire des modifications et les intégrer au dépôt Il est très important de veiller à bien réactiver l'environnement virtuel `.venv` avant toute tentative de compilation de la FAQ en local, si vous avez depuis la dernière fois fermé votre session ou votre terminal pour les commandes en ligne. Une fois rendu à nouveau dans le dossier de la FAQ, lancez, si l'environnement virtuel n'est pas déjà actif, la commande : ```bash source .venv/bin/activate ``` Puis, exécutez `git pull` pour intégrer les modifications distantes et `make html` pour mettre à jour les fichiers `html` (ces fichiers bien sûr ne sont pas intégrés au contrôle de version `git`, seuls ceux du répertoire `source`, et quelques autres d'une nature technique, le sont). Vous pouvez alors commencer à apporter des modifications à un ou plusieurs fichiers sources `.md` du dossier `source`. Pour vous entraîner "à blanc", vous pouvez modifier le fichier `source/8_contribuer/bac-a-sable.md`, si vous craignez de casser quelque chose. Testez vos modifications par `make html`. Seuls les fichiers `html` impactés par les modifications seront reconstruits et le processus devrait a priori être rapide. Lorsque vos modifications vous conviennent, vous pouvez en faire un "commit" avec les commandes usuelles du type `git commit -a`. Si au contraire vous voulez vous en débarrasser faites `git stash` puis éventuellement `git stash drop`. Si vous avez déjà fait des commits en local et que leur organisation ne convient pas vous pouvez exécuter `git reset origin/main` pour conserver les fichiers modifiés mais annuler les commits associés. Ou `git reset --hard origin/main` pour tout oublier et annuler totalement vos modifications. Une fois vos commits satisfaisants il suffira de `git push` pour les "pousser" sur le dépôt de la FAQ. Vos modifications apparaîtront en ligne au plus tard quelques minutes après. :::{hint} Plus précisément, deux possibilités avec le `git push` : - la procédure aboutit, - ou le dépôt de la FAQ a été modifié entre-temps, et le "push" ne peut aboutir. Dans ce dernier cas : - `git fetch` pour récupérer les modifications distantes dans `origin/main`, - puis `git rebase origin/main` pour que votre branche `main` locale soit un descendant de la branche `main` du dépôt. - `git push` pourra alors (enfin !) mettre à jour le dépôt avec vos propres modifications. Dans certains cas l'étape `git rebase` après le `git fetch` aura donné lieu à des conflits car des modifications distantes seront rentrées en collision avec celles apportées par vos soins. La résolution de ces conflits est la routine pour les utilisateurs expérimentés de `git`, mais il faut donc une certaine expérience avec `git` pour fonctionner suivant ces mécanismes. Les commandes comme `git merge` créent un historique plus embrouillé et moins linéaire et il est donc toujours préférable de procéder par `git rebase origin/main` depuis votre branche `main` ayant des commits supplémentaires, puis `git push`. ::: ## Méthode utilisant une image Docker :::{todo} Compléter la méthode utilisant une image Docker pour compiler la FAQ en local. :::