Ce site est publié en utilisant GitHub Pages. Jusqu’à récemment, je maintenais les outils nécessaires à l’édition de markdown et la publication en local pour vérifier que mes articles se rendaient correctement avant de les publier sur GitHub. C’était aussi pour moi l’occasion d’effleurer l’écosystème ruby et ses outils de build.

Sauf que c’était assez contraignant et en passant à une puce Apple, de nouveaux problèmes sont apparus.

J’ai donc contenerisé le site web et ça fonctionne merveilleusement bien. Petit tour d’horizon des commandes que j’utilise.

Création d’un volume

Les librairies utilisées par le système de build de ruby s’appellent des gems. Nous allons les stocker dans un volume Docker :

docker volume create gem_home

Installation de Jekyll et ruby

Grâce à la page de référence GitHub Pages dependency versions, on peut déterminer précisément les bonnes versions de ruby et Jekyll utilisées par GitHub Pages - ce ne sont pas les dernières versions.

docker run --name ruby --rm --volume gem_home:/usr/local/bundle ruby:2.7.4 gem install jekyll --version 3.9.2

Création d’un site

On va créer un nouveau site sans installer les bundles car nous avons besoin d’adapter légèrement la configuration par défaut de Jekyll à GitHub Pages :

docker run --name ruby --rm --volume gem_home:/usr/local/bundle --volume "$(pwd)":/usr/site ruby:2.7.4 jekyll new --skip-bundle /usr/site

Adaptation du site pour GitHub Pages

En suivant les recommandations, il est nécessaire de commenter gem "jekyll", "~> 3.9.2". Je pense que GitHub souhaite que la version de Jekyll suive de manière transitive celle de la gem github-page. Je décide de ne pas le faire car je suis attentivement la version de Jekyll supportée par GitHub Pages.

Décommenter gem "github-pages", group: :jekyll_plugins dans le fichier "$(pwd)"/Gemfile.

Une fois que c’est fait, on peut installer les dépendances :

docker run --name ruby --rm --volume gem_home:/usr/local/bundle --volume "$(pwd)":/usr/site --workdir /usr/site ruby:2.7.4 bundle install

Tester son site en local

Il ne reste plus qu’à lancer Jekyll :

docker run --name ruby --publish 4000:4000 --rm --volume gem_home:/usr/local/bundle --volume "$(pwd)":/usr/site --workdir /usr/site ruby:2.7.4 bundle exec jekyll serve --drafts --host=0.0.0.0

Mise à jour des dépendances

Pour rester à jour sur les dépendances transitives, on peut lancer cette commande :

docker run --name ruby --rm --volume gem_home:/usr/local/bundle --volume "$(pwd)":/usr/site --workdir /usr/site ruby:2.7.4 bundle update

Analyser les différences si GitHub Pages mettait à jour ses dépendances

On a déjà vu que la page GitHub Pages dependency versions permettait de savoir sur quelles versions de ruby et de Jekyll GitHub Pages tournait. Si jamais GitHub décidait de se mettre à jour, on pourrait adapter notre site aux nouvelles versions en générant à nouveau un site à côté :

docker run --name ruby --rm --volume gem_home:/usr/local/bundle --volume "$(pwd)":/usr/site --workdir /usr/site ruby:2.7.4 bundle exec jekyll new test

Et ainsi comparer la configuration actuelle avec la nouvelle par défaut.

Le code du thème aussi peut être comparé en allant chercher les fichiers au moyen de cette commande :

$ ls -l $(bundle info jekyll-theme-hacker | grep "Path:" | grep --only-matching "/.*")
total 32
-rw-r--r--  1 ***  staff  6555 Jun 13 22:27 LICENSE
-rw-r--r--  1 ***  staff  4814 Jun 13 22:27 README.md
drwxr-xr-x  4 ***  staff   136 Jun 13 22:27 _layouts
drwxr-xr-x  5 ***  staff   170 Jun 13 22:27 _sass
drwxr-xr-x  4 ***  staff   136 Jun 13 22:27 assets