Mon workflow de publication de photos
L’autre jour, j’annonçais un nouvel espace de publication de certaines de mes photos.
Je vais aujourd’hui lister les différentes étapes pour publier ces photos.
Conversion en WebP
Afin de ne pas publier des photos au poids trop important, j’ai décidé d’utiliser le format WebP pour chacune de mes photos.
Pour cette étape, j’utilise l’outil bespoke
de Tom MacWright. Il redimensionne et convertit en jpg et en WebP.
Je l’ai adapté pour mes besoins, à savoir : * conservation des données EXIF * uniquement générer du WebP et uniquement en 2880 px de large maximum.
Cet outil est très efficace et rapide.
Génération du site
Pour le site en ligne, j’utilise photo-stream
. C’est écrit en ruby
, donc pas vraiment ce que je préfère. Mais ça fonctionne très bien et l’équipe de contribution est assez réactive (j’ai remonté des bugs et ai demandé le support de WebP, tout a été implémenté en quelques jours ❤️).
Localement
Je ne maitrise absolument pas l’écosystème ruby
alors je reconnais que j’ai un peu galéré. Passé mes déboires d’installation de dépendances, j’ai trouvé ce qu’il me fallait :
rbenv init
eval "$(rbenv init - zsh)"
rbenv shell 3.1.2
J’ai enfin un terminal qui est dans les bonnes conditions pour lancer les commandes suivantes :
bundle install
bundle exec jekyll build # génération du site
Pour tester localement, je lance un petit serveur web dans le répertoire _site
généré pour ouvrir le fichier index.html
(je peux faire ça puisque j’ai php
installé en local sur ma machine) :
php -S localhost:8002
Et voila !
En ligne
Maintenant que j’ai vérifié que tout était OK en local, je peux publier.
J’ai un dépôt privé sur Github où je stocke mon fork de photo-stream
et le répertoire photos
nécessaire pour stocker mes photos.
Pour la publication, j’ai créé une Github actions. À chaque commit sur mon dépôt, l’action génère le site (c’est-à-dire ce que je fais en local dans l’étape précédente) et déploie le site généré sur mon serveur.
Voici le fichier .github/workflows/deploy.yml
que j’ai concocté :
name: deploy
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.1.2' # Not needed with a .ruby-version file
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- run: bundle install
- name: Install dependencies
run: sudo apt install libvips-tools
- name: Build the project
shell: bash
run: "bundle exec jekyll build"
- name: Check if we have everything
shell: bash
run: "ls -la _site/"
- name: Remove the existing file structure
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSHKEY }}
port: ${{ secrets.PORT }}
script: |
rm -rf /var/www/*
- name: Copy output via scp
uses: appleboy/scp-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
port: ${{ secrets.PORT }}
key: ${{ secrets.SSHKEY }}
source: "_site/"
target: "/var/www"
- name: Copy output into site root
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSHKEY }}
port: ${{ secrets.PORT }}
script: |
mv /var/www/_site/* /var/www/
rmdir /var/www/_site
Magie, ça fonctionne !
Pour conclure
Il y a sûrement des choses à améliorer dans mon process, mais ça fonctionne et pour le moment, c’est le principal.
Dans les choses à faire, j’aimerais par exemple ne plus versionner le fork de photo-stream
et le cloner (ou l’installer via ruby
?) depuis la Github action uniquement. Je n’aurais ainsi que mes photos dans un dépôt Github et ça serait amplement suffisant.