Cecil et github actions
Par HappyToDev · 4 mins · CI/CD

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 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.

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 :

"Le répertoire .github/workflows dans l'arborescence de Cecil"

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 :

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 !! ;-)

#cecil #tuto #github

Ce contenu t'a plu ou appris quelque chose ? 👀

Si la réponse est oui, alors tu peux peut-être me supporter 💪 ?

Il y a plusieurs façon de me supporter et certaines sont gratuites, je t'invite à les découvrir dans ma page dédiée 👇