|
@@ -360,7 +360,85 @@ Et j'ai rajouté les fichiers produits dans mon `.gitignore` pour éviter de les
|
|
|
|
|
|
##### Produire un dossier distribuable
|
|
|
|
|
|
-Et nettoyage.
|
|
|
+Pour l'instant, chaque fichier dérivé `*.gen.html` est généré dans le même dossier que son fichier source `*.gen.*` associé. Cela peut être pratique pour comparer la source et son équivalent généré, mais cela ne convient pas pour un déploiement. Le besoin est donc de créer un dossier contenant tous les fichiers à déployer, et seulement les fichiers à déployer.
|
|
|
+
|
|
|
+```makefile
|
|
|
+.PHONY: install
|
|
|
+install: $(DIST_DIR)
|
|
|
+ $(info Distributed folder generated)
|
|
|
+
|
|
|
+$(DIST_DIR): $(DIST_FILES)
|
|
|
+
|
|
|
+$(DIST_DIR)/%.html: src/%.gen.html
|
|
|
+ mkdir --parents $(dir $@)
|
|
|
+ cp $< $@
|
|
|
+```
|
|
|
+
|
|
|
+Ces recettes accomplissent deux objectifs :
|
|
|
+
|
|
|
+- Copier les fichiers générés dans un dossier ;
|
|
|
+- Enlever la particule `gen` du nom du fichier.
|
|
|
+
|
|
|
+Il reste à construire la liste `DIST_FILES` des fichiers à distribuer.
|
|
|
+
|
|
|
+```makefile
|
|
|
+DIST_DIR := dist
|
|
|
+
|
|
|
+DIST_GEN_FILES := $(GEN_CONTENT_FILES:src/%.gen.html=$(DIST_DIR)/%.html)
|
|
|
+```
|
|
|
+
|
|
|
+Ce qui donne lorsque que l'on invoque `make dist` :
|
|
|
+- `src/index.gen.html` -> `dist/index.html`
|
|
|
+- `src/cv/content.gen.html` -> `dist/cv/content.html`
|
|
|
+- `src/projets/pandoc_site/content.gen.html` -> `dist/projets/pandoc_site/content.html`
|
|
|
+
|
|
|
+
|
|
|
+Le dossier en question sera `dist` par défaut, mais pourra être surchargé pour déployer sur un serveur web local de test par exemple.
|
|
|
+
|
|
|
+```sh
|
|
|
+DIST_DIR=/var/www/html make -e dist
|
|
|
+```
|
|
|
+
|
|
|
+Notez l'usage de l'option `-e` de *make* pour prendre en compte variables d'environnement afin de surcharger la valeur par défaut présente dans le fichier.
|
|
|
+
|
|
|
+Il ne faut pas oublier que parmi les fichiers à déployer figurent aussi des ressources autres que tu contenu HTML : les fichiers de style *CSS*, les images ou bien les éventuels scripts *JS*.
|
|
|
+
|
|
|
+Pour inclure l'ensemble de ces fichiers, on les déclare en tant que ressources à distribuer :
|
|
|
+
|
|
|
+```makefile
|
|
|
+INCLUDED_FILES := $(shell find src/include -type f)
|
|
|
+EMBEDDED_FILES := $(shell find src -name '*.png' -or -name '*.svg' -or -name '*.pdf')
|
|
|
+DIST_INC_FILES := $(INCLUDED_FILES:src/%=$(DIST_DIR)/%)
|
|
|
+DIST_EMB_FILES := $(EMBEDDED_FILES:src/%=$(DIST_DIR)/%)
|
|
|
+DIST_FILES := $(DIST_GEN_FILES) $(DIST_INC_FILES) $(DIST_EMB_FILES)
|
|
|
+```
|
|
|
+
|
|
|
+Dans mon cas, les ressources partagées comme les scripts *JS* et styles *CSS* sont regroupées dans le dossier `src/include` et listées dans `INCLUDED_FILES`. Alors que les fichiers image peuvent être présents dans le dossier contenant la page dans laquelle ils sont inclus ; la recherche est donc basée sur l'extension des fichiers désirés car ils peuvent être répartis dans tous les dossiers. Ces derniers sont listés dans `EMBEDDED_FILES`.
|
|
|
+
|
|
|
+La variable `DIST_FILES` contient au final la totalité de tous les fichiers distribuables.
|
|
|
+
|
|
|
+Pour que `make` puisse copier ces fichiers sans modification, on rajoute une règle générique :
|
|
|
+
|
|
|
+```makefile
|
|
|
+$(DIST_DIR)/%: src/%
|
|
|
+ mkdir --parents $(dir $@)
|
|
|
+ cp $< $@
|
|
|
+```
|
|
|
+
|
|
|
+Et pour terminer, une recette, que certain·es pourraient trouver un peu dangereuse à cause du risque de perte de données, dont l'objectif est de nettoyer ce dossier de distribution :
|
|
|
+
|
|
|
+```makefile
|
|
|
+.PHONY: clean-dist
|
|
|
+clean-dist:
|
|
|
+ rm -rf $(DIST_DIR)/*
|
|
|
+```
|
|
|
+
|
|
|
+Et enfin, une recette pour tout nettoyer, à la fois les fichiers générés `*.gen.html` et le dossier de distribution :
|
|
|
+
|
|
|
+```makefile
|
|
|
+.PHONY: clean-all
|
|
|
+clean-all: clean clean-dist
|
|
|
+```
|
|
|
|
|
|
##### Automatiser le déploiement distant
|
|
|
|