Cet article aborde étape par étape ma migration de Linkwarden vers un site utilisant Jekyll1 pour gérer ma veille, autrement dit mes notes en tout genre.
Il y a quelques mois j’ai pu installer Linkwarden sur mon VPS. Entre temps j’ai eu un souci avec la mise à jour d’un autre service auto-hébergé et j’ai perdu mes données. Il était donc vital pour mois de pérenniser ma veille. Cette migration est inspirée par Nicolas Hoizey qui utilise un fonctionnement similaire. Vous pourrez trouver ses liens ici.
Exporter mes données Linkwarden
C’est l’étape la plus simple puisque Linkwarden propose une fonctionnalité d’exportation en générant un json contenant tous les liens sauvegarder.
Conversion du JSON en fichiers Markdown
Utilisant déjà Jekyll pour mon site de Notes fromagères, je me suis tourné vers ce générateur de site statique (développé par Tom Preston-Werner, le fondateur de GitHub).
Afin de conserver les articles déjà enregistrés, je devais convertir le contenu du JSON en autant de fichiers Markdown qu’il y avait de liens sauvegardés. En effet, Jekyll structure les publications de cette façon :
_posts
|— AAAA-MM-JJ-nom-du-post.md
|— AAAA-MM-JJ-nom-du-post.md
|— etc
Pour réaliser cette conversion, n’ayant pas suffisamment de connaissances techniques, je me suis servi de ChatGPT pour générer un script capable d’analyser le JSON et de créer les fichiers Markdown en respectant la structure Front Matter que j’avais configurée pour mon thème personnalisé.
Organisation des fichiers dans le dossier posts
Après avoir importé plus de 400 notes, l’organisation du dossier _posts était nécéssaire. J’ai copié l’architecture que Nicolas Hoizey avait, classant les fichiers par année et mois.
J’ai de nouveau fait appel à ChatGPT pour créer un script Ruby organize_posts.rb2 qui organise les fichiers à chaque build du projet.
Création des pages « Catégorie » et « Tag »
Pour trier mes notes et, potentiellement, leur appliquer un layout différent, j’ai créé pour l’instant deux catégories :
- Liens
- Citations
En plus de cette catégorie, les notes possèdent des tags. Il fallait donc pouvoir afficher des pages qui recensent les notes de chaque catégorie et de chaque tag.
Encore une fois ChatGPT m’a généré les scripts nécessaires (generate_category_pages.rb3 & generate_tag_pages.rb4) à la création de ces pages.
Publication du site
Jekyll requiert un build pour chaque ajout de post, ce qui le distingue des CMS classiques. C’est assez fastidieux même si je fais cela avec mon site de fromages. De plus il faut également téléverser les fichiers générés sur un serveur FTP. J’ai donc voulu automatiser cela puisque je vais tout de même publier beaucoup plus de notes que de fromages !
Ce projet de notes étant sur GitHub, j’ai d’abord essayé d’utiliser GitHub Pages. Malheureusement ce dernier ne prend pas en charge les thèmes fait maison. Je me suis ensuite tourné vers GitHub Actions mais ce fût un échec également puisque j’utilise une version de Jekyll trop récente. Dit autrement, je n’ai pas réussi à configurer cet outil pour que cela fonctionne… Finalement, Vercel s’est avéré être mon sauveur ! En connectant mon repo GitHub à Vercel, la publication se fait très facilement (j’ai seulement du revoir les URLs de mes pages).
Concrètement, à chaque nouveau commit, Vercel génère et publie le site. J’ai créé une redirection DNS pour le publier sous mon nom de domaine (bloc-notes.timotheejulien.fr).
Et voilà !
Simplifier la création d’un post
Initialement, je pouvais créer un post uniquement depuis mon Mac en réalisant ces étapes :
- Création du fichier Markdown dans mon dossier posts
- Complétion du template de post
- Génération du site depuis une commande Terminal
- Création d’un commit
- Envoi du commit sur mon repo
Cela fonctionnait, mais ne me permettait pas de créer des posts depuis mon téléphone. C’était problématique. En creusant, j’ai réalisé que je pouvais créer un post en utilisant les Raccourcis iOS6.
Une fois encore, j’ai utilisé ChatGPT pour concevoir les étapes du script, qui repose sur l’ajout manuel de données pour compléter le Front Matter, c’est-à-dire :
- l’URL
- le titre
- l’auteur
- la date
- la langue
- la catégorie
- les tags
Le script envoie ensuite une requête via l’API REST de GitHub pour créer le commit. Il suffit seulement de créer un token GitHub en amont.
Et voilà !
Conclusion
Bien que l’utilisation de ChatGPT reste discutable, cela m’a permis de produire quelque chose que je ne savais pas faire en un temps record. C’est tout de même un outil très pratique dans ce cas.
Des améliorations restent à faire sur ce projet. Par exemple, sur le site de Jekyll il est annoncé que la pagination ne fonctionne pas pour les pages Tag et Catégorie mais j’imagine qu’une alternative existe.
Le Raccourci iOS pourrait scrapper directement les informations à partir de l’URL indiquée.
Mon utilisation de ces prochaines semaines me permettra surement d’itérer !
Le lien du projet → bloc-notes.timotheejulien.fr
Ressources
Le projet étant open-source, vous pouvez trouver le code et les différents scripts sur GitHub :