Ma stack Docker pour GitHub Pages
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