Cecil et github action
TL;DR
Comment déployer un site Cecil sur Github Actions en quelques étapes simples
Table des matières
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
_sitecontenant le site statique généré - upload artifact : cela va sauvegarder l'artifact comprenant le répertoire
_siteen le nommantwebsiteafin 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
_sitevia 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 !! ;-)
À propos de l'auteur
HappyToDev
Hello moi c'est Fred, mais vous me connaissez plutôt via mon pseudo : HappyToDev.
Ma bio
Mari et 2 fois papa 💪
Ex de la Marine Nationale 🫡
Passionné d'informatique depuis mes 10 ans, j'ai le code dans la peau. Je suis toujours partant pour un laravel new 😉
Créateur des newsletters 🗞️ :
Créateur de Framework Heroes 🦸🏽♀️🦸🏻♂️
J'avais envie de faire ce site depuis plusieurs mois pour donner naissance à un job board spécialisé sur les devs utilisant des frameworks. J'espère que le concept vous plaira et que vous m'aiderez à le développer en m'apportant de nouvelles idées.
Précision utile : pour les devs c'est gratuit et vous pouvez y créer votre page profile et la partager avec une url unique. Voici la mienne en exemple
Jeter un oeil à Framework Heroes
Créateur de GiftKeepr 🎁
Une question simple : recevez vous des cadeaux qui ne vous plaisent pas à votre anniversaire, à Noël ou lors d'autres occasions ?
GiftKeepr est là pour que cela n'arrive plus jamais. Et c'est super simple !
- Créez votre profil
- Renseignez les cadeaux que vous souhaitez
- Communiquez votre adresse GiftKeepr à votre entourage
- Recevez les bons cadeaux pour les occasions que vous avez défini
- Easy peasy !!