Mise en place d'un site avec Hugo et Github Actions

Vous trouverez dans cet article, l’ensemble des éléments permettant de mettre en place un site web static en se basant sur les outils suivants :

  • Hugo : Générateur de site web static
  • Github : Service web d’hébergement et de gestion des sources de développements (utilisant l’outil Git)
  • Github Actions : Service Github permettant de tester et deployer les développements
  • Gandi : Fournisseur du nom de domaine

Objectif

  • Création d’un dépôt Github pour stocker les sources permettant de générer le site web static (documentation)
  • Création d’un dépôt Github pour stocker les éléments du site web static (pragmatias.github.io)
  • Configurer Github Actions pour déclencher la génération du site web static dans le dépôt pragmatias.github.io lors d’un commit dans la branche master du dépôt documentation
  • Gestion du nom de domaine personnel chez Gandi pour afficher le site web static avec l’adresse pragmatias.fr

Code source

L’ensemble du code source de ce site se trouve sur mon dépôt github

Création des dépôts sur Github

Création du dépôt documentation

Pré-requis : avoir un compte sur Github

1. Sur la page listant vos dépôts, cliquez sur New

1ère étape

2. Renseignez le nom de votre dépôt qui contiendra les sources permettant de générer le site web et cliquez sur Create repository

2ème étape

3. Github vous affichera les étapes pour initialiser votre dépôt

3ème étape

Création du dépôt pragmatias.github.io

Il faut faire les mêmes étapes que pour la création du dépôt documentation mais cette fois avec le nom pragmatias.github.io.

Il faut créer au moins un fichier dans le dépôt pragmatias.github.io pour la suite de la configuration du dépôt.

Vous trouverez plus d’information sur le systeme Pages de Github sur le site officiel.

Si vous voulez modifier la configuration par défaut :

1. Allez dans la page Settings du dépôt pragmatias.github.io

4ème étape

2. Allez dans la section GitHub Pages pour configurer les informations nécessaires (custom domain, enforces HTTPS, …)

5ème étape

Configuration des actions sur les dépôts Github

Gestion d’un jeton personnel Github

Il faut commencer par créer un jeton Github permettant de donner le droit à Github Actions de faire la mise à jour du dépot cible.

1. Connectez vous sur votre compte Github, allez dans settings et cliquez sur Developer settings

1ère étape

2. Cliquez sur Personal access tokens, puis cliquez sur Generate new token

2ème étape

3. Remplissez le champ Tocken description, puis selectionnez les droits nécessaires (repo et gist) et cliquez sur Generate token

3ème étape

4. Copiez le code indiqué après la génération du jeton (il ne s’affichera qu’une seule fois)

4ème étape

5. Allez dans Settings du dépôt, sélectionnez l’option Actions dans le menu General > Security > Secrets

5ème étape

6. Cliquez sur le bouton New repository secret et renseignez le champ Name avec la valeur PERSONAL_TOKEN et le champ Value avec la valeur du jeton récupéré à l’étape n°4

6ème étape

Création du fichier de configuration pour Github Actions

Pour pouvoir déployer automatiquement le site web à partir du dépôt documentation vers le dépôt pragmatias.github.io, il faut créer un fichier main.yml dans le répertoire .github/workflows du dépôt documentation

 1# This is a basic workflow to help you get started with Actions
 2
 3name: main
 4
 5# Controls when the workflow will run
 6on:
 7  # Triggers the workflow on push or pull request events but only for the master branch
 8  push:
 9    branches: [ master ]
10  pull_request:
11    branches: [ master ]
12  
13  # Allows you to run this workflow manually from the Actions tab
14  workflow_dispatch:
15  
16# A workflow run is made up of one or more jobs that can run sequentially or in parallel
17jobs:
18  # This workflow contains a single job called "build"
19  build:
20    # The type of runner that the job will run on
21    runs-on: ubuntu-latest
22
23    # Steps represent a sequence of tasks that will be executed as part of the job
24    steps:
25      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
26      - uses: actions/checkout@v3
27      # Runs a single command using the runners shell
28      - name: Setup Hugo
29        uses: peaceiris/actions-hugo@v2
30        with:
31          hugo-version: 'latest'
32
33      - name: Cleaning
34        run: rm -rf public 2> /dev/null
35
36      - name: Build
37        run: hugo --minify
38
39      - name: AfterBuild
40        run: echo "www.pragmatias.fr" > public/CNAME
41 
42      - name: Deploy
43        uses: peaceiris/actions-gh-pages@v3
44        with:
45          personal_token: ${{ secrets.PERSONAL_TOKEN }}
46          external_repository: pragmatias/pragmatias.github.io
47          publish_branch: master  # default: gh-pages
48          publish_dir: ./public

Le contenu du fichier est le suivant :

  • Utilisation de la distribution Ubuntu runs-on: ubuntu-latest
  • Recuperation et installation de l’outil Hugo pour Linux name: Setup Hugo
  • Suppression du répertoire public qui est le répertoire par défaut de génération de l’outil Hugo name: Cleaning
  • Exécution de l’outil Hugo name: Build
  • Pour la partie déploiement :
  • On défini que l’on souhaite déployer le contenu du répertoire public dans la branche master du dépôt pragmatias/pragmatias.github.io

Utilisation d’un domaine personnel avec Github Pages

Note : J’utilise le nom de domaine pragmatias.fr chez Gandi

1. Dans les paramètres du dépôt pragmatias.github.io, renseignez la section Custom domain

parametre github

pour forcer l’utilisation du https, sélectionnez l’option Enforce HTTPS

2. Configurez votre domaine pour rediriger les utilisateurs vers le contenu des Pages du dépôt pragmatias.github.io

2.1. Allez sur le site de Gandi, cliquez sur Nom de domaine, puis sur le nom de domaine souhaité

Gandi 1

2.2. Allez dans Enregistrement DNS pour modifier les enregistrements

Gandi 1

2.3. Ajouter les enregistrements DNS suivants (pour faire la redirection entre le service Pages de Github et votre nom de domaine)

1www 10800 IN CNAME pragmatias.github.io

Attention à ne pas avoir d’autres lignes commençant par @ 1800 IN A ou par www

La modification des enregistrements peut mettre plusieurs heures à se propager pour être prise en compte.