Aller au contenu

Comment je mets à jour mon thème Hugo en production

·821 mots·4 mins
Cryptolab.re
Auteur
Cryptolab.re
Cryptolab est un blog personnel où je documente mes expérimentations techniques : infra, self-hosting, réseau, crypto et projets parfois inutiles, souvent instructifs.
Sommaire

Quand on démarre avec Hugo, tout paraît simple :
un thème, quelques articles, un hugo build, et le site est en ligne.

Mais très vite, une vraie question arrive en production :

Comment mettre à jour un thème Hugo sans risquer de casser son site ?

C’est un sujet étonnamment peu documenté.
Voici donc mon setup réel, utilisé en production, et surtout pourquoi je l’ai conçu comme ça.

Mettre à jour un thème Hugo en production est rarement documenté, surtout lorsqu’on utilise git submodules et une CI/CD auto-hébergée.


Pourquoi Hugo ne met pas à jour les thèmes automatiquement
#

Hugo ne touche jamais à git :

  • pas de git pull
  • pas de mise à jour silencieuse
  • pas de dépendances flottantes

Ce n’est pas une limitation, mais un choix de conception sain.

Un thème Hugo est une dépendance critique :

  • paramètres renommés ou supprimés
  • shortcodes modifiés
  • layouts cassés
  • version minimale de Hugo augmentée

Une mise à jour automatique pourrait :

  • casser le build
  • ou pire, produire un site cassé sans erreur visible

Mon setup en production
#

Voici le contexte exact :

  • Site statique avec Hugo
  • Thème Blowfish
  • Thème installé en git submodule
  • Dépôt hébergé sur Gitea
  • CI/CD avec Gitea Actions
  • Déploiement via SCP

Objectif :

> Automatiser la mise à jour du thème, de façon versionnée et traçable, sans mise à jour implicite au moment du build.


Mettre à jour le thème Hugo manuellement
#

Avant toute automatisation, la mise à jour du thème repose sur une commande git très simple.

Dans le cas d’un thème installé en submodule, la mise à jour consiste simplement à exécuter :

git submodule update --remote --merge themes/blowfish

Cette commande fait trois choses :

  • elle récupère la dernière version du thème depuis son dépôt distant (–remote)

  • elle met à jour le submodule vers ce nouvel état

  • elle conserve un historique git propre via un merge explicite (–merge)

Aucune magie ici : le thème est mis à jour comme n’importe quelle dépendance versionnée, et le changement n’est effectif qu’après un commit.


Et Hugo Modules dans tout ça ?
#

Hugo propose une alternative aux submodules : Hugo Modules, basé sur l’écosystème Go.

Cette approche permet de déclarer un thème comme une dépendance distante, téléchargée automatiquement au build et verrouillée via go.sum.

C’est une solution tout à fait valable, notamment pour des projets plus complexes ou mutualisés.

De mon côté, j’ai volontairement choisi les git submodules :

  • la version du thème est visible directement dans git
  • aucun outillage Go supplémentaire n’est nécessaire
  • le comportement est entièrement explicite et prévisible

Pour un site personnel ou technique, ce compromis me paraît plus simple et plus lisible.


Le principe retenu
#

J’ai choisi une approche volontairement simple et robuste :

  1. Mise à jour automatique du thème
  2. Commit uniquement s’il y a un changement réel
  3. Push sur main
  4. Déclenchement du workflow de build et de déploiement
  5. Version du thème visible en production

Workflow de mise à jour du thème
#

Voici le workflow Gitea Actions que j’utilise en production pour mettre à jour automatiquement le thème Blowfish chaque lundi à 6 h, avec un commit explicite uniquement lorsqu’un changement est détecté.

name: Update Blowfish

on:
  schedule:
    - cron: "0 6 * * 1"
  workflow_dispatch:

jobs:
  update-blowfish:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0

      - name: Configure git
        run: |
          git config user.name "blowfish-bot"
          git config user.email "blowfish-bot@localhost"

      - name: Update Blowfish + version file
        run: |
          set -e
          git submodule update --remote --merge themes/blowfish

          BLOWFISH_VERSION=$(cd themes/blowfish && git describe --tags --always)
          echo "$BLOWFISH_VERSION" > static/blowfish-version.txt

          git add themes/blowfish static/blowfish-version.txt
          if git diff --cached --quiet; then
            echo "No changes to commit."
            exit 0
          fi

          git commit -m "chore(theme): bump Blowfish to $BLOWFISH_VERSION"

      - name: Push
        run: git push

Rendre la version du thème visible en production
#

À chaque mise à jour, le workflow écrit un fichier :

static/blowfish-version.txt

Ce fichier est servi tel quel par Hugo et accessible publiquement :

https://cryptolab.re/blowfish-version.txt

Exemple de contenu :

v2.97.0

Avantages :

  • savoir exactement quelle version tourne en prod
  • debug facilité
  • rollback immédiat via git revert

Pourquoi ce setup est volontairement conservateur
#

Ce workflow :

  • n’update jamais le thème pendant un build
  • ne fait aucune magie cachée
  • laisse un historique git propre
  • permet un rollback instantané

Un thème n’est pas un détail cosmétique :
c’est une dépendance logicielle à part entière.


Ce que je ferais différemment pour un site critique
#

Pour un site à fort trafic ou critique, j’irais plus loin :

  • mise à jour sur branche dédiée
  • Pull Request obligatoire
  • build Hugo bloquant avant merge
  • version du thème figée sur des tags uniquement

Mais pour un site personnel ou technique, ce compromis est simple, lisible et fiable.


Conclusion
#

Hugo est simple.
La production ne l’est pas.

Traiter un thème comme une dépendance versionnée change tout :

  • moins de surprises
  • plus de contrôle
  • déploiements sereins

C’est un petit effort d’ingénierie, pour un énorme gain de tranquillité.

Articles connexes

Un nom de domaine pour moins d’un euro, oui c’est possible

·1080 mots·6 mins
Quand on lance un projet, blog, side-project, service auto-hébergé ou simple test technique - il y a toujours un moment où la question tombe : On met quoi comme nom de domaine ? Par réflexe, on pense immédiatement à .fr ou .com, avec un prix annuel autour de 10 à 15 €. Ce n’est pas absurde, mais ce n’est pas toujours nécessaire, surtout quand on est encore en phase de test. Bonne nouvelle : oui, il est possible d’avoir un nom de domaine pour moins d’un euro. Et non, ce n’est ni une arnaque, ni un hack douteux réservé à des coupons obscurs.