<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Go-Template on Zwindler's Reflection</title><link>https://blog.zwindler.fr/tags/go-template/</link><description>Recent content in Go-Template on Zwindler's Reflection</description><generator>Hugo -- gohugo.io</generator><language>fr-fr</language><copyright>Licensed under CC BY-SA 4.0</copyright><lastBuildDate>Mon, 29 Nov 2021 08:00:00 +0000</lastBuildDate><atom:link href="https://blog.zwindler.fr/tags/go-template/index.xml" rel="self" type="application/rss+xml"/><item><title>J'ai enfin migré de Wordpress vers Hugo - partie 2</title><link>https://blog.zwindler.fr/2021/11/29/jai-enfin-migre-de-wordpress-a-hugo-partie-2/</link><pubDate>Mon, 29 Nov 2021 08:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2021/11/29/jai-enfin-migre-de-wordpress-a-hugo-partie-2/</guid><description>&lt;img src="https://blog.zwindler.fr/2021/11/wordpress-to-hugo.webp" alt="Featured image of post J'ai enfin migré de Wordpress vers Hugo - partie 2" /&gt;&lt;p&gt;Cette article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2021/11/22/jai-enfin-migre-de-wordpress-a-hugo-partie-1/" &gt;J&amp;rsquo;ai enfin migré de Wordpress vers Hugo - partie 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2021/11/29/jai-enfin-migre-de-wordpress-a-hugo-partie-2/" &gt;J&amp;rsquo;ai enfin migré de Wordpress vers Hugo - partie 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="extraire-les-données-de-wordpress"&gt;Extraire les données de WordPress
&lt;/h2&gt;&lt;p&gt;Normalement &lt;a class="link" href="https://blog.zwindler.fr/2021/11/22/jai-enfin-migre-de-wordpress-a-hugo-partie-1/" &gt;si vous avez lu la première partie&lt;/a&gt;, vous savez qu&amp;rsquo;on a un Hugo fonctionnel (mais vide). Et que dans mon cas, l&amp;rsquo;objectif était de migrer 12 ans d&amp;rsquo;historique (350 articles tout de même) de Wordpress vers notre Hugo.&lt;/p&gt;
&lt;p&gt;Vous vous en doutez, le but n&amp;rsquo;est pas de reprendre les articles uns par uns (sauf si vous n&amp;rsquo;en avez qu&amp;rsquo;une dizaine, ça doit se faire) mais bien de trouver une méthode pour exporter le contenu existant en markdown pour repartir comme si de rien n&amp;rsquo;était.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://gohugo.io/tools/migrations/#wordpress" target="_blank" rel="noopener"
&gt;La documentation officielle de Hugo donne plusieurs pistes&lt;/a&gt; pour migrer depuis Wordpress et c&amp;rsquo;est la première que j&amp;rsquo;avais utilisé en 2019 (la première fois que j&amp;rsquo;avais tenté de migrer, sans succès). J&amp;rsquo;ai re-installé l&amp;rsquo;extension &lt;code&gt;wordpress-to-hugo-exporter&lt;/code&gt; (je vous invite quand même à regarder les alternatives car il n&amp;rsquo;est pas impossible que ça ait évolué depuis).&lt;/p&gt;
&lt;h2 id="wordpress-to-hugo-exporter"&gt;wordpress-to-hugo-exporter
&lt;/h2&gt;&lt;p&gt;La première chose à faire pour installer cette extension est de vérifier que votre serveur qui héberge le WordPress dispose bien de l’extension PHP &lt;code&gt;zip.so&lt;/code&gt;.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cat /etc/php.d/40-zip.ini
; Enable ZIP extension module
extension=zip.so
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;On peut ensuite cloner le projet git du plugin directement dans le dossier plugin de WordPress&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;cd PATH_TO_WORDPRESS/wp-content/plugins/
git clone https://github.com/SchumacherFM/wordpress-to-hugo-exporter
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, il est possible de démarrer un export soit depuis l&amp;rsquo;interface, soit via un script en PHP lancé depuis le serveur en ligne de commandes. Évidemment, dans ce genre de procédures, on arrive toujours à un moment où on se tape un timeout quelque part. Dans mon cas, les données exportées (articles + medias, environ ~1.5 Go) prenaient 500 Mo de RAM et 20 minutes d&amp;rsquo;exécution.&lt;/p&gt;
&lt;p&gt;On oublie donc le clic dans l&amp;rsquo;interface (sauf à tuner votre nginx pour autoriser des requêtes clients avec un timeout &amp;gt; 60s) et on lance depuis la ligne de commande. Et bien entendu, on augmente toutes les limites possibles et imaginables, notamment celle de wordpress via le fichier wp-config.php.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-PHP" data-lang="PHP"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Set initial default constants including WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT, WP_DEBUG, SCRIPT_DEBUG, WP_CONTENT_DIR and WP_CACHE.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;wp_initial_constants&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;WP_MEMORY_LIMIT&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2048M&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;WP_MAX_MEMORY_LIMIT&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;2048M&amp;#39;&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; PATH_TO_WORDPRESS/wp-content/plugins/wordpress-to-hugo-exporter/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;php hugo-export-cli.php &lt;span class="nv"&gt;memory_limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;-1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Qui devrait se terminer, si tout se passe bien, par un :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;This is your file!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/tmp/wp-hugo.zip
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Note: on peut également exporter les commentaires, il faut modifier manuellement une ligne dans le fichier &lt;code&gt;hugo-export.php&lt;/code&gt; (voir la doc)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;A partir de là, on a une archive qui contient vos posts, vos pages et vos médias importés (grosso modo tout wp-content).&lt;/p&gt;
&lt;p&gt;L&amp;rsquo;archive a l&amp;rsquo;arborescence suivante :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un dossier &lt;strong&gt;posts&lt;/strong&gt; qui contient tous les articles (&lt;em&gt;posts&lt;/em&gt; dans la terminologie wordpress) dans un mélange de markdown + html brut (ce qui n&amp;rsquo;aura pas été correctement converti, on y reviendra)&lt;/li&gt;
&lt;li&gt;un dossier &lt;strong&gt;wp-content&lt;/strong&gt; qui contient tous les médias&lt;/li&gt;
&lt;li&gt;des dossiers pour chacune de vos &amp;ldquo;&lt;em&gt;pages&lt;/em&gt; (&amp;ldquo;à propos&amp;rdquo;, &amp;ldquo;mentions légales&amp;rdquo;, etc).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="importer-dans-hugo"&gt;Importer dans Hugo
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;arborescence de Hugo est elle un peu différente. De base, tout ce qui est markdown doit être dans &lt;strong&gt;content&lt;/strong&gt;, avec des sous dossiers en fonction du type de page (&lt;em&gt;post&lt;/em&gt; ou &lt;em&gt;page&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;La première petite &amp;ldquo;blaguounette&amp;rdquo; est que les &lt;em&gt;posts&lt;/em&gt; doivent être déposés dans le sous-dossier &lt;strong&gt;content/post&lt;/strong&gt; (sans S à la fin !!!).&lt;/p&gt;
&lt;p&gt;Chaque post commence par des métadonnées encadrées par des triples tirets &amp;ldquo;&amp;mdash;&amp;rdquo; avant et après. Ca donne quelque chose comme ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;&amp;#39;ESXi 4.0 &lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Explorons l&amp;amp;rsquo;Hidden Console Part 1&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;authors&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;zwindler&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;post&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;date&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ld"&gt;2010-04-28T08:32:20&lt;/span&gt;&lt;span class="m"&gt;+00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="m"&gt;00&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;/2010/04/28/esxi-4-0-explorons-lhidden-console-part-1/&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;featured_image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://blog.example.org/wp-content/uploads/2014/10/vmware-220x162.jpg&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Virtualisation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;ESX(i)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;Hidden Console&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;SSH&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nn"&gt;---&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;L&amp;#39;article lui même...]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ca peut différer un peu selon les thèmes je pense, mais grosso modo les markdown des &lt;em&gt;pages&lt;/em&gt; iront eux dans &lt;strong&gt;content/page&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Enfin, tout ce qui est media (dossier wp-media) va dans un dossier &lt;strong&gt;static&lt;/strong&gt;. On peut garder la même arborescence que wordpress (/année/mois/) mais rien ne nous y oblige.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;So far, so good&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="emile-et-images"&gt;Emile et Images
&lt;/h2&gt;&lt;p&gt;Enfin&amp;hellip; &lt;em&gt;so good&lt;/em&gt;, c&amp;rsquo;est vite dit&amp;hellip;&lt;/p&gt;
&lt;p&gt;Et oui parce que l&amp;rsquo;exporter n&amp;rsquo;exporte pas hyper bien un certain nombre de choses, à commencer par l&amp;rsquo;image de garde de chaque article :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;featured_image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://blog.example.org/wp-content/uploads/2014/10/vmware-220x162.jpg&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On peut remarquer plusieurs soucis avec cette variable. D&amp;rsquo;abord, la variable utilisée pour indiquer le chemin de l&amp;rsquo;image dans les métadonnées générées est &lt;code&gt;featured_image&lt;/code&gt; alors qu&amp;rsquo;Hugo attend &lt;code&gt;image&lt;/code&gt;. Petit &lt;code&gt;sed&lt;/code&gt; sur vos md pour corriger ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/featured_image/image/g&amp;#34;&lt;/span&gt; fichier.md
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Mais bien sûr, ce n&amp;rsquo;est pas fini ;-)&lt;/p&gt;
&lt;p&gt;Ensuite, on remarque qu&amp;rsquo;on a un chemin est une URL complète et non pas relative. Si vous gardez les média dans le chemin &lt;strong&gt;static/wp-content/uploads/YYYY/MM&lt;/strong&gt; ça marchera, mais je trouve ça moche.&lt;/p&gt;
&lt;p&gt;2 solutions :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;on supprime &lt;strong&gt;/wp-content/uploads&lt;/strong&gt; avec un bête &lt;code&gt;sed -i &amp;quot;s!/wp-content/uploads!!g fichier.md&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;on passe en relatif en supprimant carrément toute la première partie de l&amp;rsquo;URL &lt;strong&gt;&lt;a class="link" href="https://yourblog.example.org/wp-content/uploads" target="_blank" rel="noopener"
&gt;https://yourblog.example.org/wp-content/uploads&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si vous choisissez la 2ème solution (mon choix), faites quand même bien attention. En fonction de &lt;em&gt;comment&lt;/em&gt; vous rédigez votre expression régulière, ça pourrait affecter aussi toutes les autres images que vous auriez en lien dans vos articles. Ce n&amp;rsquo;est pas forcément une mauvaise chose (moi j&amp;rsquo;aime mieux les liens relatifs car c&amp;rsquo;est plus flexible) mais ça demande un travail supplémentaire.&lt;/p&gt;
&lt;h2 id="images-intermédiaires"&gt;Images intermédiaires
&lt;/h2&gt;&lt;p&gt;Toujours dans les images, vous remarquerez aussi que l&amp;rsquo;image &amp;ldquo;mise en avant&amp;rdquo; (dans les métadonnées) possède un suffixe de type &lt;code&gt;-111x222&lt;/code&gt; juste avant l&amp;rsquo;extension. En fait, chaque fois que vous importez une image dans wordpress, celui ci la convertie en plusieurs tailles pour accélérer le chargement des pages.&lt;/p&gt;
&lt;p&gt;Sauf que le &lt;strong&gt;wordpress-to-hugo-exporter&lt;/strong&gt; choisi une des plus petites résolution pour l&amp;rsquo;image en tête de l&amp;rsquo;article. Ca sera souvent hyper moche&amp;hellip;&lt;/p&gt;
&lt;p&gt;Là encore, j&amp;rsquo;ai donc passé un gros &lt;code&gt;sed&lt;/code&gt; pour virer tous les suffixes &lt;code&gt;-111x222&lt;/code&gt; avant l&amp;rsquo;extension, puis je n&amp;rsquo;ai copié QUE les images originales dans le dossier &lt;strong&gt;static&lt;/strong&gt; (regex non triviale) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; PATH_TO_EXPORT/wp-content/uploads
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; i in &lt;span class="sb"&gt;`&lt;/span&gt;seq &lt;span class="m"&gt;2010&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; 2021&lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; find &lt;span class="nv"&gt;$i&lt;/span&gt; -mindepth &lt;span class="m"&gt;1&lt;/span&gt; -type f -regextype posix-egrep -not -iregex &lt;span class="s2"&gt;&amp;#34;.*/.*-[0-9]{1,4}x[0-9]{1,4}.*\..*&amp;#34;&lt;/span&gt; -exec cp &lt;span class="o"&gt;{}&lt;/span&gt; PATH_TO_HUGO/static/&lt;span class="o"&gt;{}&lt;/span&gt; &lt;span class="se"&gt;\;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="nettoyer-les-caractères-spéciaux-html"&gt;Nettoyer les caractères spéciaux HTML
&lt;/h2&gt;&lt;p&gt;Si vous avez bien lu l&amp;rsquo;exemple de métadonnées exportées que j&amp;rsquo;ai donné, vous aurez peut être remarqué la présence d&amp;rsquo;un caractère spécial encodé &lt;code&gt;&amp;amp;rsquo;&lt;/code&gt; dans le titre.&lt;/p&gt;
&lt;p&gt;Dans une page HTML, ce n&amp;rsquo;est pas grave, mais Hugo lui, ne les interprète pas comme tel dans le markdown. Il faut donc leur faire la chasse et tous les convertir 🤦. Et encore, il faut faire attention, car certains de ces caractères pourraient être légitimement écris en HTML (si vous faite un tuto sur HTML, ce n&amp;rsquo;est pas impossible par exemple)&amp;hellip;&lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai pour ma part lancé un gros &lt;code&gt;sed&lt;/code&gt; (une fois de plus) sur tous mes articles mais prudence !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;rsquo;/’/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;#8211;/--/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;#8230;/.../g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;gt;/&amp;gt;/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;lt;/&amp;lt;/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;#8212;/-/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;#8217;/&amp;#39;/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sed -i &lt;span class="s2"&gt;&amp;#34;s/&amp;amp;#215;/×/g&amp;#34;&lt;/span&gt; &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Je n&amp;rsquo;ai pas osé modifier les caractères suivants, très souvent présents dans les URLs :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;amp;#038
&amp;amp;#039
&amp;amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Mais c&amp;rsquo;est quand même une bonne idée de faire une grosse recherche avec votre éditeur de texte favori pour voir s&amp;rsquo;il ne reste pas des &lt;code&gt;&amp;amp;#&lt;/code&gt; qui traînent dans votre contenu.&lt;/p&gt;
&lt;h2 id="html-désactivé"&gt;HTML désactivé
&lt;/h2&gt;&lt;p&gt;Au delà des caractères spéciaux, il arrive aussi que l&amp;rsquo;exporter est un peu de mal avec les différents types d&amp;rsquo;éditeurs que Wordpress a pu avoir au fil du temps.&lt;/p&gt;
&lt;p&gt;Typiquement, beaucoup du contenu &amp;ldquo;non texte&amp;rdquo; que j&amp;rsquo;ai ajouté au fil des années s&amp;rsquo;est retrouvé non converti par ce que j&amp;rsquo;ai rédigé s&amp;rsquo;est retrouvé exporté tel quel, en HTML brut inséré dans mon markdown.&lt;/p&gt;
&lt;p&gt;C&amp;rsquo;est hyper traître car Hugo ne renvoie aucune erreur. Il manque &amp;ldquo;juste&amp;rdquo; des bouts ! On peut les retrouver en allant voir le code source de la page, qui affiche alors les commentaires HTML suivants :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- raw HTML omitted --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;En attendant de nettoyer tout ça à grand coup de &lt;code&gt;sed&lt;/code&gt;, on peut résoudre une partie des problèmes en &amp;ldquo;réactivant le support du code HTML dans le markdown dans votre &lt;code&gt;config.yaml&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;markup&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;goldmark&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c"&gt;## Set to true if you have HTML content inside Markdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;unsafe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ca permet de sauver les meubles mais ce n&amp;rsquo;est pas suffisant&amp;hellip;&lt;/p&gt;
&lt;h2 id="markdown-hates-html"&gt;Markdown hates HTML
&lt;/h2&gt;&lt;p&gt;Même comme ça, on grosse partie du HTML sera HS&amp;hellip; Tous les tableaux (table/tr/td) et listes (ul/li) HTML sont pétés car l&amp;rsquo;exporter laisse des sauts de lignes entre les blocs, que le markdown interprète mal. Il faudra supprimer tous les sauts de lignes en trop (ou réécrire en markdown)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;table class=&amp;#34;Content&amp;#34; border=&amp;#34;0&amp;#34; width=&amp;#34;750&amp;#34;&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;#34;LargeBold&amp;#34;&amp;gt;
SEND_CUSTOM_SVC_NOTIFICATION
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;#34;MediumBold&amp;#34;&amp;gt;
Command Format:
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Sachez également que toutes les &amp;ldquo;videos embedded&amp;rdquo; Youtube disparaîtront purement et simplement, et que pour les tweets, vous aurez une version très moche du tweet, sans l&amp;rsquo;image&amp;hellip;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;blockquote&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;twitter-tweet&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;550&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;en&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-dnt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;true&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-partner&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;jetpack&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;lang&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;fr&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;dir&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;ltr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [[#SAPHANA](ht tps://tw itter.com/hashtag/SAPHANA?src=hash&lt;span class="err"&gt;&amp;amp;&lt;/span&gt;ref_src=twsrc%5Etfw)] Finies les mises à jour incompatibles avec votre plateforme, optez pour la simplicité et la tranquillité, chez SAP : on collecte, on connecte, ça marche : [t.co/2AdCCEQ97L](https://t.c o/2AdCCEQ97L) [pic.twi tter.com/yy7moMnZmC](ht tps://t.c o/yy7moMnZmC)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- SAP France (@SAPFrance)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; [October 8, 2018](ht tps://twiter.com/SAPFrance/status/1049286253533962241?ref_src=twsrc%5Etfw)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;blockquote&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;J&amp;rsquo;en avais peu heureusement, j&amp;rsquo;ai donc pris des captures d&amp;rsquo;écran et ajouté des liens.&lt;/p&gt;
&lt;h2 id="balises-de-code-pre-etc"&gt;Balises de code, pre, etc.
&lt;/h2&gt;&lt;p&gt;Une autre grosse catégorie de code &amp;ldquo;mal exporté&amp;rdquo; est le &amp;ldquo;code&amp;rdquo;. Je donne souvent des bouts de scripts ou de code ou tout simplement des commandes à passer sur des serveurs. Et au fil des années, j&amp;rsquo;ai (&amp;amp; wordpress) changé plusieurs fois la façon d&amp;rsquo;afficher du code dans mes articles.&lt;/p&gt;
&lt;p&gt;D&amp;rsquo;abord avec des balises HTML &lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt;, puis des balises &lt;code&gt;&amp;lt;code&amp;gt;&amp;lt;/code&amp;gt;&lt;/code&gt;, puis via des extensions (pour avoir la coloration syntaxique), puis via du markdown via Jetpack, puis de nouveau via les extensions&amp;hellip;&lt;/p&gt;
&lt;p&gt;Autant dire que le HTML généré par Wordpress ne ressemble à rien&amp;hellip;&lt;/p&gt;
&lt;p&gt;Il a fallut faire un gros gros boulot pour détecter toutes les balises de code ouvrantes et fermantes pour les convertir en ``` de markdown&amp;hellip;&lt;/p&gt;
&lt;p&gt;Quelques exemples que j&amp;rsquo;ai rencontré :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-HTML" data-lang="HTML"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;brush: plain; title: ; notranslate&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;brush: perl; collapse: false; title: ; wrap-lines: false; notranslate&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;EnlighterJSRAW&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-enlighter-language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;null&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;EnlighterJSRAW&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-enlighter-language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;generic&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;pre&lt;/span&gt; &lt;span class="na"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;EnlighterJSRAW&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-enlighter-language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;generic&amp;#34;&lt;/span&gt; &lt;span class="na"&gt;data-enlighter-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;... et bien d&amp;#39;autres encore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="final-words"&gt;Final words
&lt;/h2&gt;&lt;p&gt;Je m&amp;rsquo;arrête là car l&amp;rsquo;article est déjà très long, mais il y a eu d&amp;rsquo;autres petits problèmes du même style, plus sporadiques&amp;hellip;&lt;/p&gt;
&lt;p&gt;Vous voyez donc qu&amp;rsquo;exporter le blog sur Hugo n&amp;rsquo;aura pas été de tout repos, dans mon cas. Et encore ! Je n&amp;rsquo;ai pas exporté les commentaires historiques (plus de 1600) !&lt;/p&gt;
&lt;p&gt;Cependant, si vous avez un blog plus petit que celui ci, vous devriez avoir moins de mal et les conseils que je donne ici devraient vous permettre de régler rapidement 90% des problèmes.&lt;/p&gt;
&lt;p&gt;Enjoy !&lt;/p&gt;</description></item><item><title>J'ai enfin migré de Wordpress vers Hugo - partie 1</title><link>https://blog.zwindler.fr/2021/11/22/jai-enfin-migre-de-wordpress-a-hugo-partie-1/</link><pubDate>Mon, 22 Nov 2021 08:00:00 +0000</pubDate><guid>https://blog.zwindler.fr/2021/11/22/jai-enfin-migre-de-wordpress-a-hugo-partie-1/</guid><description>&lt;img src="https://blog.zwindler.fr/2021/11/wordpress-to-hugo.webp" alt="Featured image of post J'ai enfin migré de Wordpress vers Hugo - partie 1" /&gt;&lt;p&gt;Cette article fait partie d&amp;rsquo;une suite d&amp;rsquo;articles :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2021/11/22/jai-enfin-migre-de-wordpress-a-hugo-partie-1/" &gt;J&amp;rsquo;ai enfin migré de Wordpress vers Hugo - partie 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.zwindler.fr/2021/11/29/jai-enfin-migre-de-wordpress-a-hugo-partie-2/" &gt;J&amp;rsquo;ai enfin migré de Wordpress vers Hugo - partie 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plus-de-2-ans-et-demi"&gt;Plus de 2 ans et demi
&lt;/h2&gt;&lt;p&gt;Ca fait plus de 2 ans et demi que je râle que j&amp;rsquo;en ai ma claque de Wordpress.&lt;/p&gt;
&lt;p&gt;Stack LEMP à maintenir, perfs bof (j&amp;rsquo;ai du mettre un cache pour passer sous la seconde, wtf&amp;hellip;), plugins aux MAJs hasardeuses, failles de sécu, pas de support propre du markdown, éditeur à ch*** (Gutenberg, je te hais), &amp;hellip; you name it.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://blog.zwindler.fr/2021/tweet_mieuxavant.avif"
loading="lazy"
&gt;&lt;/p&gt;
&lt;p&gt;Après 12 ans de blogging, il était temps de faire l&amp;rsquo;effort et de quitter Wordpress pour quelque chose qui me convient mieux : un moteur de blog statique (rien de dynamique dans ce que je poste) en markdown (parce que de toute façon c&amp;rsquo;est comme ça que j&amp;rsquo;écris mes articles à la base). Le tout dans git pour historiser tout ça.&lt;/p&gt;
&lt;p&gt;Et j&amp;rsquo;ai choisi Hugo pour des raisons que &lt;a class="link" href="https://blog.zwindler.fr/2019/06/10/comment-migrer-de-wordpress-a-hugo/" &gt;je détaille dans l&amp;rsquo;article 2019 &amp;ldquo;Comment migrer de Wordpress à Hugo&amp;rdquo; si ça vous intéresse&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="forcément-cest-pas-si-facile"&gt;Forcément, c&amp;rsquo;est pas si facile
&lt;/h2&gt;&lt;p&gt;J&amp;rsquo;en parlais déjà dans l&amp;rsquo;article de 2019 : migrer de Wordpress à Hugo, forcément ce n&amp;rsquo;est pas si facile. D&amp;rsquo;ailleurs, j&amp;rsquo;avais même abandonné l&amp;rsquo;idée devant l&amp;rsquo;ampleur da tâche !&lt;/p&gt;
&lt;p&gt;Ce n&amp;rsquo;est pas tant la partie technique (installation de Hugo, export du blog existant) le problème. En quelques minutes, on a un blog fonctionnel, l&amp;rsquo;export prend guère plus de temps. Rajouter l&amp;rsquo;outillage pour automatiser certaines tâches prend un peu de temps mais rien d&amp;rsquo;incroyable.&lt;/p&gt;
&lt;p&gt;Mon problème était plutôt que je voulais obtenir au moins aussi bien que ce que j&amp;rsquo;avais avant, existant inclus.&lt;/p&gt;
&lt;p&gt;Et c&amp;rsquo;est là que le bat blesse : wordpress, avec mes 12 ans (350 articles) d&amp;rsquo;historique, c&amp;rsquo;est au fil des années 15 façons différentes d&amp;rsquo;afficher du HTML&amp;hellip; que le plugin d&amp;rsquo;export gère comme il peut ! Nous y reviendrons.&lt;/p&gt;
&lt;p&gt;Je vais donc vous guider un peu sur la partie technique, puis j&amp;rsquo;aborderai ensuite les points pénibles du nettoyage du markdown, qui m&amp;rsquo;a pris un bonne partie de mes vacances (plusieurs journées à ~2-3 heures par jour). Il y aura aussi, plus tard, des articles sur l&amp;rsquo;outillage à mettre en place pour se faciliter la vie au quotidien.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation
&lt;/h2&gt;&lt;p&gt;L&amp;rsquo;installation en elle même est triviale. On a un binaire compilé en go packagé dans un &lt;strong&gt;.deb&lt;/strong&gt; (ou les sources si vous voulez le builder vous même) disponible sur github. Fin.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0.88.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/gohugoio/hugo/releases/download/v&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/hugo_&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;_Linux-64bit.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ou https://github.com/gohugoio/hugo/releases/download/v${VER}/hugo_extended_${VER}_Linux-64bit.deb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install ./hugo*_0.88.1_Linux-64bit.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;A noter que dans mon cas, je n&amp;rsquo;ai pas téléchargé la version ci dessus, mais la version &amp;ldquo;extended&amp;rdquo;, nécessaire pour le thème que j&amp;rsquo;ai choisi, mais le principe est le même.&lt;/p&gt;
&lt;h2 id="initialisation-du-site-et-du-dépôt-git"&gt;Initialisation du site et du dépôt git
&lt;/h2&gt;&lt;p&gt;Hugo est maintenant disponible sur votre machine.&lt;/p&gt;
&lt;p&gt;A partir de là, je vous invite fortement à versionner tout ce que vous allez faire avec votre blog. C&amp;rsquo;est bien entendu optionnel mais pourquoi se priver de toute la puissance du couple markdown + git ?&lt;/p&gt;
&lt;p&gt;On commence par créer un dossier puis on génère un squelette de site vierge avec &lt;code&gt;hugo new site&lt;/code&gt; :&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mkdir hugo &amp;amp;&amp;amp; cd hugo
hugo new site toto
Congratulations! Your new Hugo site is created in toto.
Just a few more steps and you&amp;#39;re ready to go:
1. Download a theme into the same-named folder.
Choose a theme from https://themes.gohugo.io/ or
create your own with the &amp;#34;hugo new theme &amp;lt;THEMENAME&amp;gt;&amp;#34; command.
2. Perhaps you want to add some content. You can add single files
with &amp;#34;hugo new &amp;lt;SECTIONNAME&amp;gt;/&amp;lt;FILENAME&amp;gt;.&amp;lt;FORMAT&amp;gt;&amp;#34;.
3. Start the built-in live server via &amp;#34;hugo server&amp;#34;.
Visit https://gohugo.io/ for quickstart guide and full documentation.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;A partir de là, on va pouvoir initialiser notre dépôt git&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; toto
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git init
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Bon, si jamais vous lancez la génération du blog avec simplement la commande de preview &lt;code&gt;hugo server&lt;/code&gt;, vous allez être assez déçus, ça donne une page blanche. Mais, ça marche !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo server
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Start building sites …
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo v0.88.1-5BC54738+extended linux/amd64 &lt;span class="nv"&gt;BuildDate&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2021-09-04T09:39:19Z &lt;span class="nv"&gt;VendorInfo&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gohugoio
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WARN 2021/11/14 06:57:47 found no layout file &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; kind &lt;span class="s2"&gt;&amp;#34;taxonomy&amp;#34;&lt;/span&gt;: You should create a template file which matches Hugo Layouts Lookup Rules &lt;span class="k"&gt;for&lt;/span&gt; this combination.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WARN 2021/11/14 06:57:47 found no layout file &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; kind &lt;span class="s2"&gt;&amp;#34;home&amp;#34;&lt;/span&gt;: You should create a template file which matches Hugo Layouts Lookup Rules &lt;span class="k"&gt;for&lt;/span&gt; this combination.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WARN 2021/11/14 06:57:47 found no layout file &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;HTML&amp;#34;&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; kind &lt;span class="s2"&gt;&amp;#34;taxonomy&amp;#34;&lt;/span&gt;: You should create a template file which matches Hugo Layouts Lookup Rules &lt;span class="k"&gt;for&lt;/span&gt; this combination.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;|&lt;/span&gt; EN
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-------------------+-----
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Pages &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Paginator pages &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Non-page files &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Static files &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Processed images &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Aliases &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Sitemaps &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Cleaned &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Built in &lt;span class="m"&gt;1&lt;/span&gt; ms
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Watching &lt;span class="k"&gt;for&lt;/span&gt; changes in /toto/&lt;span class="o"&gt;{&lt;/span&gt;archetypes,content,data,layouts,static&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Watching &lt;span class="k"&gt;for&lt;/span&gt; config changes in /toto/config.toml
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Environment: &lt;span class="s2"&gt;&amp;#34;development&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Serving pages from memory
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Running in Fast Render Mode. For full rebuilds on change: hugo server --disableFastRender
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Web Server is available at http://localhost:1313/ &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;bind&lt;/span&gt; address 127.0.0.1&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Press Ctrl+C to stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="ajout-dun-thème"&gt;Ajout d&amp;rsquo;un thème
&lt;/h2&gt;&lt;p&gt;Avant même de commencer à ajouter du contenu, il est probable que vous allez vouloir choisir un thème. Il existe une liste de thèmes, plus fournie qu&amp;rsquo;en 2019, &lt;a class="link" href="https://themes.gohugo.io/" target="_blank" rel="noopener"
&gt;disponible ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Une fois le thème choisi, on va l&amp;rsquo;ajouter au site à l&amp;rsquo;aide de la (très utile) commande git &lt;code&gt;git submodule&lt;/code&gt; qui va nous permettre de gérer notre thème et ses mises à jour avec git sans pour autant commiter tous les fichiers.&lt;/p&gt;
&lt;p&gt;Dans mon cas j&amp;rsquo;ai choisi le thème &amp;ldquo;stack&amp;rdquo; mais le principe est grosso modo le même pour tous (à quelques détails d&amp;rsquo;implémentation près) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; themes/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule add https://github.com/CaiJimmy/hugo-theme-stack.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ..
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="avant-le-premier-article-"&gt;Avant le premier article !
&lt;/h2&gt;&lt;p&gt;Si on veut bosser un peu proprement, on va vouloir éviter de commiter n&amp;rsquo;importe quoi. Comme hugo est un générateur de blog statique, on va bien entendu éviter de commiter le code statique généré par la commande &lt;code&gt;hugo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On utilise simplement un fichier &lt;strong&gt;.gitignore&lt;/strong&gt; à la racine du projet pour ignorer tout ce qui est technique ou qui n&amp;rsquo;est pas du code :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat &amp;gt; .gitignore &lt;span class="s"&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;themes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;resources/_gen
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;assets/jsconfig.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;On va aussi vouloir paramétrer a minima notre site. Vous aurez peut être remarqué qu&amp;rsquo;il existe un fichier &lt;code&gt;config.toml&lt;/code&gt; généré par défaut par la commande &lt;code&gt;hugo new site&lt;/code&gt;. Il s&amp;rsquo;agit de &amp;ldquo;l&amp;rsquo;ancienne&amp;rdquo; manière de faire de la configuration Hugo, mais surtout d&amp;rsquo;un fichier agnostique du thème utilisée. Généralement, il vaut mieux le supprimer et repartir du fichier d&amp;rsquo;exemple inclus avec votre thème.&lt;/p&gt;
&lt;p&gt;Dans mon cas, il s&amp;rsquo;agit du fichier &lt;strong&gt;theme/hugo-theme-stack/config.yaml&lt;/strong&gt; que j&amp;rsquo;ai donc copié à la racine du projet et modifié pour correspondre à mon site et mes besoins.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;baseurl&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;https://blog.zwindler.fr&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;languageCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;fr-fr&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;theme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;hugo-theme-stack&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Zwindler&amp;#39;s Reflection&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="l"&gt;...]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="le-premier-commit"&gt;Le premier commit
&lt;/h2&gt;&lt;p&gt;C&amp;rsquo;est un petit moment agréable dans n&amp;rsquo;importe quel projet informatique. Le premier commit.&lt;/p&gt;
&lt;p&gt;Bon moi, comme j&amp;rsquo;ai hébergé le dépôt sur Github et qu&amp;rsquo;ils ont décidé de renommer &lt;strong&gt;master&lt;/strong&gt; en &lt;strong&gt;main&lt;/strong&gt; dans le nom de la branche par défaut on a un peu de gymnastique à faire, mais pourquoi pas.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git add .
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git commit -m &lt;span class="s2"&gt;&amp;#34;first commit&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git branch -M main
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git remote add origin git@github.com:zwindler/example.org.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git push -u origin main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Le &amp;ldquo;code&amp;rdquo; de notre (absence de) blog est publié Internet :)&lt;/p&gt;
&lt;h2 id="et-en-prod-"&gt;Et en prod ?
&lt;/h2&gt;&lt;p&gt;Vous pouvez donc commencer à écrire (dans &lt;strong&gt;content/post&lt;/strong&gt;), tester votre blog en local, puis pousser le code sur git. Mais si jamais vous voulez héberger votre site ailleurs que sur votre laptop (et je parie que c&amp;rsquo;est le cas) ?&lt;/p&gt;
&lt;p&gt;Et bien c&amp;rsquo;est là où c&amp;rsquo;est chouette d&amp;rsquo;utiliser git et un dépôt accessible depuis Internet. Vous n&amp;rsquo;avez qu&amp;rsquo;à reproduire l&amp;rsquo;installation de hugo, ajouter votre dépôt, initialiser les submodules (notre thème) et le tour est joué !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;0.88.1&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;wget https://github.com/gohugoio/hugo/releases/download/v&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;/hugo_&lt;span class="si"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;VER&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;_Linux-64bit.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ou https://github.com/gohugoio/hugo/releases/download/v${VER}/hugo_extended_${VER}_Linux-64bit.deb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install ./hugo*_0.88.1_Linux-64bit.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/zwindler/toto.git
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git submodule update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hugo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Normalement, le site devrait se générer, comme en local. Si vous n&amp;rsquo;avez pas d&amp;rsquo;historique à migrer, comme moi, vous êtes donc l&amp;rsquo;heureux propriétaire d&amp;rsquo;un blog statique fonctionnel :-). La classe !&lt;/p&gt;
&lt;p&gt;Sinon, dans le prochain article, j&amp;rsquo;aborderai un plus gros morceau, à savoir l&amp;rsquo;export et le nettoyage du markdown depuis un Wordpress existant.&lt;/p&gt;</description></item></channel></rss>