Translation not available

This content is not available in EN. Showing FR version instead.

Available in:

Cecil et github action

February 26, 2024 Reading time: 4 min Tutoriels happytodev happytodev
Cecil et github action

TL;DR

Comment déployer un site Cecil sur Github Actions en quelques étapes simples

Table of contents

En commençant ce nouveau blog, je dois vous parler de Cecil : un générateur de site statique écrit en PHP.

La documentation étant très fournie, je ne vais pas vous montrer comment l'installer, je vais par contre vous présenter comment je déploie ce site sur Github Actions.

Cecil ??

Cecil est un générateur de site statique écrit en PHP. C'est lui qui fait faisait tourner ce site et c'est également lui qui motorise ma page de liens.

Arnaud Ligny est son papa et je crois pouvoir dire qu'il travaille régulièrement dessus. D'ailleurs son support sur Github est très réactif.

Si vous souhaitez en savoir plus sur Cecil, je ne peux que vous renvoyer vers le site officiel : https://cecil.app

Déployer ??

Attends Fred, tu es en train de nous dire qu'à chaque article que tu publies tu fais un déploiement, une mise en prod ?

Oui, alors effectivement dis comme cela, cela pourrait faire peur.

Mais je vous rassure, c'est un déploiement automatique via les Github Actions.

Alors si jamais les mots "Déploiement automatique, Github actions" sont du charabia pour vous, je ne peux que vous conseiller d'aller voir la formation CI/CD de l'ami Yoan Dev. En suivant ce lien vous aurez droit à 15% de réduction. (ce n'est pas un lien affilié 😉)

Github Actions

Mise au point

Alors petite mise au point, mon hébergeur (o2switch) ne me permet pas de faire du SSH via Github Actions donc cela m'oblige à passer par du FTP à la place.

Mais je peux vous assurer que c'est pleinement fonctionnel.

Mais si vous préférez faire différement, il vous suffira d'adapter le script dans sa partie deploiement.

Pré-requis

Bien évidemment avant de vous lancer il y a quelques prérequis.

  • Tout d'abord avoir un repo pour votre projet (merci Captain Obvious 🤣)

  • Configurer vos secrets pour votre projet. Dans mon cas, il s'agit de :

    • FTP_USERNAME
    • FTP_SERVER
    • FTP_PASSWORD
  • que votre site soit prêt au déploiement

Le script de déploiement

Si cela, n'est pas déjà fait, il faut créer un répertoire .github/workflows comme dans l'illustration ci-dessous :

Ensuite copiez/collez/adaptez le script ci-dessous dans un fichier que vous pouvez appeler par exemple main.yml.

name: ftpdeployment

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source
        uses: actions/checkout@v4
      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: '8.1'
          extensions: mbstring, gd, imagick, intl, gettext
      - name: Build with Cecil
        uses: Cecilapp/Cecil-Action@v3
      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: website
          path: _site
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Download artifact
        uses: actions/download-artifact@v3
        with:
          name: website
          path: _site
      - name: FTP Deploy
        uses: SamKirkland/FTP-Deploy-Action@4.3.3
        with:
          server: ${{ secrets.FTP_SERVER }}
          username: ${{ secrets.FTP_USERNAME }}
          password: ${{ secrets.FTP_PASSWORD }}
          local-dir: ./_site/

Quelques explications rapides :

  • on: push: branches: => indique que ce script s'exécutera lorsque l'on pushera sur la branche main
  • jobs : deux jobs seront exécutés ici. Tout d'abord, le job de build et ensuite le job de déploiement
  • le job "build" sera exécuté sur une image ubuntu et comprendra les étapes (steps) suivantes :
    • checkout source : récupérer les sources du repository
    • setup PHP : configurer un environnement PHP permettant les étapes de build suivantes
    • Build with Cecil : va permettre de construire le répertoire _site contenant le site statique généré
    • upload artifact : cela va sauvegarder l'artifact comprenant le répertoire _site en le nommant website afin qu'il puisse être utiliser lors du job suivant
  • le job "deploy" sera exécuté sur une image ubuntu identique et comprendra les étapes suivantes :
    • récupération de l'artifact généré lors du job précédent
    • déploiement du répertoire _site via FTP en utilisant les secrets précédemment enregistrés sur github

Si tout se passe bien lors du premier déploiement, le script FTP Deploy va créer tous les répertoires et fichiers nécessaires.

Lors des prochains push, il n'uploadera que les nouveaux fichiers et les fichiers modifiés.

Avec ce setup très simple, il me suffit d'écrire mes fichiers markdown, de les commiter et pusher pour qu'ils apparraissent en ligne dans la minute qui suit. Idem évidemment pour mes fichiers de templates.

Je rajouterai l'excellente remarque d'Arnaud :

Et précisons que le déploiement est atomique : si l'étape de (re)build du site est en échec pour une raison ou pour une autre l'archive n'est pas créée, donc pas envoyée par FTP, donc pas de risque de "casser" le site en prod 😊

C'est vraiment très plaisant à utiliser et puis en terme de performance et de sécurité, il n'y pas photo.

Et puis, le dernier avantage, et non des moindres, c'est qu'on peut mettre en prod le vendredi et ça, ça n'a pas de prix !! ;-)

HappyToDev

About the author

HappyToDev

Hello it's Fred, but you know me more by my nickname : HappyToDev.

My bio

Husband and twice dad 💪

Ex of the French Navy 🫡

I've been passionate about IT since I was 10, and code is in my blood. I'm always up for a laravel new 😉

Newsletter creator 🗞️ :

Framework Heroes creator 🦸🏽‍♀️🦸🏻‍♂️

I've been wanting to create this site for several months to create a job board specialising in devs using frameworks. I hope you like the concept and that you'll help me develop it by contributing new ideas.

Take a look at Framework Heroes