GitHub fourni l’outillage nécessaire pour générer un site statique et pour l’héberger – gratuitement – grâce à GitHub Pages et GitHub Actions.
Dans cet article j’explique comment mettre en pratique GitHub Pages et GitHub Actions, en utilisant Cecil comme générateur de site statique.
- Nous soutenir
- Contributeurs
- Charte graphique
- Administrateurs
- À propos de Jamstatic
- Actualités
- Références
- Exemples de code
- Qu'est-ce que vous faites quand vous ne travaillez pas sur Jekyll ?
- Peux-tu nous dire comment tu as été amené à t'impliquer dans Jekyll et ce qui s'est passé depuis pour aboutir à la mise en ligne de la version 3.0 de Jekyll ?
- Tu as débuté avec la 0.12.1 ?
- Quelle fut ta première expérience de programmation ?
- Quelle fut ta première rencontre avec les générateurs de site statique modernes ?
- C'était donc une question de masse critique ? Il y avait pas mal de gens, donc tu savais que c'était vivant et actif
- Que souhaites-tu aux générateurs de site statique ?
- Comment est-il possible de faire cela ?
- Le dynamique a l’air bien plus intéressant !
- Oui statique ça fait un peu péjoratif dans ce contexte
- En tant que mainteneur de Jekyll, qu'aimerais-tu dire, communiquer à ceux qui s'intéressent aux technologies autour du web statique moderne ? La tribune est à toi
- Prérequis
- Pages utilisateur et organisation
- Pages projet
- Les thèmes peuvent désormais fournir des assets statiques et dynamiques dans le dossier /assets
- Les filtres relative_url et absolute_url
- site.url est maintenant défini pour le serveur de développement
- Et bien plus encore
- Prérequis
- Préparer son thème
- Tester son thème
- Un guide complet pour coder et déployer un site, tout en ligne de commande
- C’est quoi Jekyll ?
- Développons un portfolio !
- Plongeons dans les fichiers
- Modifier les paramètres de votre site
- Ajoutons notre premier article !
- YAML front matter
- Liquid
- Écrire un article pour de vrai
- Un autre exemple d’article en .md
- Ajoutons un peu de CSS à tout ça
- Sass
- Versionnement avec Git
- Configurer Git
- Créer un dépôt sur GitHub
- GitHub Pages
- Mes conseils supplémentaires
- Système de grille
- Rythme vertical
- Fin
- Passer à la version 2 de Staticman
- Ajout du support des fils de commentaires
- Ajout du support des notifications par mail
- La transformation de Jekyll
- Le cœur de Jekyll
- Test exhaustif d’une génération
- Génération des fichiers sans l’option brouillons
- Génération des fichiers avec l’option brouillon
- Comment et pourquoi en êtes-vous arrivés à choisir un générateur de site statique comme clé de voûte de votre processus de publication aux éditions The Getty ? Pourquoi ne pas avoir opté pour un développement natif ?
- Comment votre équipe s'est appropriée ce nouveau workflow ? L'appropriation a-t-elle été facile ?
- Est-ce que tu penses qu'un process à base de technologies web peut remplacer le couple démoniaque Word et InDesign ? Particulièrement en ce qui concerne la facilité d’écriture et de structuration des contenus (WYSIWYG) ainsi que la mise en page (InDesign) ?
- Est-ce que ce nouveau process augmente la qualité des publications de The Getty ?
- Est-ce que ce nouveau workflow vous fait gagner du temps et de l’argent ? Y’a t-il une différence de prix de revient pour les livres, y compris pour les livres papier ?
- Quelles sont les contraintes auxquelles vous vous heurtez encore aujourd’hui ? Quel serait votre workflow idéal ?
- Est-ce que tu penses que d’autres maisons d’édition vont adopter à leur tour cette stratégie avec des générateurs de site statique (pas de WYSIWYG, un balisage léger, pas de base de données, des métadonnées YAML, versionnement avec Git, etc.) ? Est-ce qu'un courant pourrait se former autour de ce concept ?
- Les rudiments d’un générateur de site statique
- Allons au cœur du problème
- Les rudiments de Harp
- C’est pas si compliqué, non ?
- Mon rapport et mon livre
- Du YAML front matter, une boucle for et pas mal de modules
- Le workflow Git
- Utilisation de Netlify
- Configuration de Jekyll
- De quoi parle-t-on ?
- Prérequis
- Jamstack et développement statique
- 1. Référencement
- 2. Performance
- 3. Sécurité
- 4. Déploiement & Workflow
- 5. Une communauté en pleine expansion
- Est-ce que c'est fait pour moi ?
- Écouter l’épopée de Smashing Magazine
- Un travail titanesque
- Ainsi naquirent nos rêves d’open source
- Notre CMS open source
- Putain, on l’a fait !
- Configurer Netlify
- Authentification via GitHub
- Ajout des fichiers de l’admin
- Accéder à l’administration
- Et voilà !
- Choisir un générateur de site statique
- Configurer Hugo
- Se plonger dans Hugo : quelques détails techniques
- Héberger chez Netlify
- Résumé de ma configuration actuelle
- Objectifs futurs
- Quelques mots de conclusion ?
- Quels problèmes Gatsby essaie-t-il de résoudre ?
- Comment se positionne Gatsby par rapport aux autres générateurs de sites statiques, qu'ils soient basés sur React ou non ?
- Quelle longévité peut-on espérer pour Gatsby ?
- Que prévoyez-vous ensuite ?
- Hugo : un générateur de site statique super rapide
- Tutoriel Hugo : site, produits, modèles et déploiement
- Démo de site Hugo et dépôt GitHub
- Conclusion et ressources supplémentaires
- Introduction
- Fondamentaux des templates Hugo
- Prenons de la hauteur
- La fin et le début
- Comment fonctionnent les thèmes ?
- Comment utiliser un thème ?
- Quels thèmes puis-je utiliser ?
- Trucs et astuces pour créer un super thème
- Bien configurer son environnement
- C’est parti
- La structure de fichiers
- Développer votre thème
- Ajouter des contenus d’exemple
- Soumettre sa gem de thème
- Les thèmes distants sur GitHub Pages
- Tests et mises à jour
- Bonjour Bjørn Erik, comment t'es-tu retrouvé impliqué dans Hugo ?
- Les problèmes résolus par Hugo
- Comment fait Hugo pour aller si vite ?
- Quels sont les sites les plus visibles qui utilisent Hugo ?
- Comment se porte le projet actuellement ?
- Hugo est open source. Comment se passe la gestion du projet ?
- Qui vous soutient dans le développement ?
- Quelle est la prochaine étape pour Hugo ?
- Bonjour Bud, tu es un observateur et un défenseur de ce que beaucoup désignent encore comme de simples sites statiques. Comment les choses ont-elles évolué depuis quelques années ?
- En 2015 Tom Preston-Werner disait lors de la JekyllConf que 80% du Web pourrait être statique, est-ce le cas aujourd’hui ?
- Les administrations publiques aux États-Unis (avec 18F), au Royaume-Uni (avec Alphagov) ou en France (avec Etalab) semblent privilégier ce type de workflow. Pourquoi à ton avis est-ce si intéressant pour les administrations publiques et les organismes ouverts ?
- Nous voyons aussi de plus en plus d’agences, de start-ups adopter cette manière de travailler par défaut quand il s'agit de publier des contenus. Quels sont selon toi les projets les plus susceptibles de faire réfléchir à deux fois avant de dégaîner son bon vieux CMS ?
- Mais alors pourquoi les agences n'adoptent-elles pas ce processus de travail ?
- Si ce workflow est naturel pour les développeurs Web, les utilisateurs finaux préfèrent utiliser une interface graphique complète. Ces deux manières de travailler sont-elles compatibles ?
- Quel est ton workflow actuel ? Qu'est-ce qui te plaît tant dedans ?
- Comment vends-tu cette manière de travailler à tes clients ?
- Que souhaites-tu pour cette stack Web moderne à court terme ?
- Bonjour Michael, comment te présenter ?
- Comment en es-tu venu à adopter Jekyll comme outil de publication ?
- Sur quels types de sites travailles-tu ?
- Qu'est-ce qui te plait dans le fait de travailler avec des générateurs de site statique ?
- Quelle est ta fonctionnalité préférée dans Jekyll ?
- Quelle est la fonctionnalité qui te manque le plus ?
- Pourquoi y a-t-il aussi peu de thèmes de qualité pour Jekyll selon toi?
- Pourquoi n'y a-t-il pas plus de designers Web qui travaillent avec des générateurs de site statique ?
- Ton thème hpster a été porté pour Hugo, est-ce que tu as testé ?
- Avantages
- Prise de conscience
- Les fonctionnalités dynamiques
- Le panier d’achat
- En résumé
- Hugo
- Performance
- Les données
- Exemple d’architecture
- Déploiement
- Questions en suspend
- Pour aller plus loin
- Mais d’abord, comment démarrer simplement
- 1. Déploiements atomiques avec publication et retour en arrière immédiats
- 2. Notifications et permaliens
- 3. Branches de déploiement et sous-domaines
- 4. Tests A/B, Tests A/B avec plusieurs variantes ou tests séparés
- 5. Commandes de génération contextuelles
- 6. Gestion des certificats SSL et SSL gratuit avec Let’s Encrypt
- 7. Lancer des tests avec l’intégration continue de Netlify
- 8. Gestion des formulaires
- 9. Redirections, réécritures et proxy
- 10. Contrôle des entêtes personnalisés
- Ça en fait 10, mais ce n'est pas tout
- L'API WordPress
- Ajouter vos articles dans Metalsmith
- Étape suivante
- Le contexte et le point
- Le point de la page
- Les fichiers partiels
- Conclusion
- C'est quoi Scratch ?
- Manipuler des tableaux et des maps
- Attention au périmètre et au contexte…
- .Scratch après Go 1.11
- Flexibilité
- Pariez sur JavaScript
- Eleventy n'est pas un framework JavaScript
- Testez Eleventy !
- 1. Configurer Hugo
- 2. Configurer votre site
- 3. Personnaliser votre site
- 4. Personnaliser votre thème
- 5. Prochaine étape
- Un site de quatre pages avec un entête, une navigation et un pied de page consistants
- Utiliser un seul gabarit pour nos pages
- Rendre la navigation active
- Rédiger du contenu en Markdown
- Développer de vrais composants
- Créer autant de composants que vous voulez
- Un avis rapide sur les sites statiques
- Allez de l’avant et passer au statique
- Making platforms promote performance
- Ajouter une recherche sur un site statique
- Une chouette soirée
- Obtenir vos clefs d’API
- Connecter votre source de données
- Préparer les données pour Algolia
- Envoi des données à Algolia
- Configuration des paramètres
- Connecter le front-end
- Le Projet
- Statut des relations avant Related Content: c'est compliqué
- La fonctionnalité Related Content d’Hugo
- Conclusion
- Jekyll
- Hugo
- En résumé
- Introduction
- Installation de l’API
- Développement du site statique
- Conclusion
- Pourquoi maintenant ?
- L'histoire de la Jamstack
- Le paysage de la Jamstack
- Les bénéfices
- Et ensuite ?
- Conclusion
- Traitement des assets
- Et ensuite ?
- Conclusion
- Configurer les langues
- Traduire nos pages
- Créer des liens vers les traductions 🔗
- Les bundles de page
- Configurer nos URLs
- Localisation des chaînes de caractères
- Mettre les chaînes au pluriel
- Conclusion 🏁
- La configuration est clé
- CircleCI
- TravisCI
- Drone
- GitLab CI
- Jenkins
- Choisir l'outil qui vous convient le mieux
- Configuration de Jekyll
- POSSE avec Micro.blog
- Publication
- TL;DR
- Inclusions : à consommer avec modération
- Faites confiance aux gemmes compilées en C
- Si vous pouvez l'éviter, n'utilisez pas LSI
- Markdown : choisissez la bonne variante
- Faites confiance à la Team pour aller dans la bonne direction
- Qu'en est-il de mon chantier multilingue ?
- Protocole expérimental
- Présentation d'Eleventy
- Avant de commencer
- Installer Eleventy
- La configuration
- Les gabarits de mise en forme
- Les variables
- Les filtres
- Les includes
- Les collections
- Utiliser les données de répertoire pour définir les paramètres par défaut
- Les fichiers statiques
- Considérations finales
- Montez d'un cran
- Les collections à base de tags
- Les collections sur mesure
- Comment ça marche à l'usage ?
- Implémentation
- De WordPress à Hugo
- Tout est page
- Modèles et hiérarchie
- La boucle et les données
- Les shortcodes
- Paramètres
- Formats de sortie
- Traitement des assets
- Thèmes et Plugins VS Composants de Thème
- On en parle de l'interface du CMS ou pas ?
- Autres fonctionnalités notables
- Conclusion
- C'est quoi la Jamstack ?
- Bien démarrer
- À propos
- Qu'est-ce qu'une appli Web ?
- Gmail
- Twitter (Progressive Web Application)
- Gatsby est taillé pour les applis Web
- Pourquoi utiliser Gatsby pour une appli Web ?
- La Coquille Applicative
- Et voici… Gatsby Mail ! (Qui ne sert qu'à des fins de démonstration !)
- Devez-vous passer de GitHub Pages à Netlify ?
- Migrer de GitHub Pages à Netlify
- Ajouter Netlify CMS à un site existant
- Notre retour d'expérience avec Netlify + Netlify CMS
- Communauté et contribution
- Modulariser le CMS
- L'émergence du maillage de contenus
- Trois domaines avec une innovation rapide
- Intégrer les technologies modernes en déléguant le travail
- Le paysage du développement web moderne
- Choisir un générateur de site
- Satisfait de mon choix
- Définition des locales
- Filtre de localisation de date
- Localisation des collections
- Localisation des layouts et des fichiers partiels
- Flexible par nature
- Les différents types de CMS headless
- Structure du projet
- Configuration de DatoCMS
- Configuration d'Eleventy
- Utilisation des fichiers de données JavaScript
- Générer une liste paginée des articles de blog avec 11ty
- Générer les pages individuelles pour les articles dans 11ty
- Déclencher automatiquement les builds
- Mise en place
- Les langues du site
- Ajout des clés de traduction
- Coder notre sélecteur de langue
- Les CMS basés sur Git
- Les CMS API-first
- Les bénéfices des CMS basés sur Git
- Les bénéfices des CMS basés sur des APIs
- Les défis posés par les CMS basés sur Git
- Les défis posés par les CMS basés sur des APIs
- Alors quel CMS headless devez vous choisir ?
- Liste de plate-formes CMS basées sur Git
- Liste de plates-formes CMS basées sur des APis
- Pourquoi utiliser partialCached ?
- Les variantes de partiel
- Haussons le niveau d'un cran 💪
- Et les langues ? 🇫🇷🇬🇧
- Améliorer votre temps de génération ⏱️
- Conclusion
- Les bénéfices de la Jamstack
- Expliquer la Jamstack au client
- En résumé…
- Quelques points à retenir
- Coder nos partiels de fonction
- Gestion des arguments
- Mise en cache !
- Des améliorations possibles ?
- Conclusion
- Étape 1 : s'inscrire sur webmentions.io
- Comment tout ça va marcher
- Récupération des webmentions
- Filtres pour la génération
- Afficher les mentions
- Sautons courageusement dans l’inconnu…
- Poursuivez en ajoutant des Microformats
- Ressources additionnelles
- Créer un module Hugo
- Conclusion
- Ressources complémentaires
- À quoi Gatsby est-il bon ?
- Où est le problème ?
- GraphQL est excessif pour la plupart des sites statiques
- Déboguer est un cauchemar
- Gatsby pourrait bien être trop intelligent à ses dépens
- Les plugins
- Next.js c'est top pour des sites statiques
- Gatsby et moi c'est terminé
- Privilégier le côté serveur
- Améliorer le côté client, s’il est indispensable
- Les appels à l’API uniquement côté client ont parfois plus de sens
- Promouvoir la AJMstack Mstack
- Les tests
- Les deux types de générateurs de sites statiques
- Mon hypothèse
- Les résultats sont arrivés
- Synthèse des résultats
- Qu'en conclure ?
- Conclusion
- Introduction
- Bataille d'égo de CEO
- L'API de WordPress pour le blog de Gatsby
- Les annonces de la première Next.js conf
- Gatsby simplifie la génération de pages
- Nuxt.js de plus en plus statique
- Hugo de mieux en mieux outillé pour le JavaScript
- Tailwind 2.0
- Eleventy en route vers le million de téléchargements
- Comment ne pas faire subir le coût des frameworks à ses visiteurs ?
- Intervenants
- Le contexte
- Choix des générateurs et du CMS Headless
- Commençons avec Next.js
- Génération des 11 000 pages et premier blocage
- La surprise ou le blocage qu'on attendait pas
- La régénération incrémentale à la rescousse
- La solution retenue
- Prototype privé
- Pourquoi un site statique ?
- Pourquoi Snipcart ?
- Mise en œuvre
- Gestion de contenu (CMS)
- Conclusion
- Qu’est-ce que GitHub Pages ?
- Qu’est-ce que GitHub Actions ?
- En pratique, comment faire ?
Qu’est-ce que GitHub Pages ?
GitHub Pages est une solution d’hébergement de pages web statiques permettant de créer rapidement un site web associé à un projet GitHub.\ Historiquement, cette branche dédiée d’un dépôt, utilise Jekyll par défaut pour générer à la volée des pages web à partir de son contenu (fichiers Markdown et HTML).
Aujourd’hui de nombreux développeurs ont abandonnés Jekyll au profit d’autres générateurs de site statique, plus riches en fonctionnalités, afin de profiter de cette solution d’hébergement gratuite.
GitHub Pages est très facile à utiliser, puisqu’il suffit de commiter des fichiers dans un dépôt GitHub pour obtenir un site web, mais reste limité et ne propose que les réglages suivants :
- Choix de la branche (et du dossier : racine ou
/docs) à utiliser - Possibilité de choisir un domaine personnalisé (via un enregistrement
CNAME) - Activation de HTTPS
Comme je viens de l’indiquer, l’idée ici de s’appuyer sur le SSG de son choix : mais dans ce cas, comment automatiser la génération en cas de modification d’une page de contenu ou d’un template ? C’est là que GitHub Actions intervient ! 😀
Qu’est-ce que GitHub Actions ?
GitHub Actions est la solution de GitHub pour automatiser des workflows de type intégration ou déploiement continue.
Le principe est très proche de ce que propose des outils comme Jenkins, Travis CI ou encore GitLab CI.
En pratique c’est plutôt simple : un fichier de configuration permet de déterminer quelles actions déclencher, selon quels évènements, dans un ou plusieurs environnements donnés, dans un certain ordre et de produire un « livrable » ou un résultat (positif ou négatif).
Ce qui fait la puissance de GitHub Actions c’est à la fois la rapidité de mise à disposition de ses machines virtuelles et surtout, comme son nom l’indique, de ses (très nombreuses) Actions mis à disposition par la communauté sur la marketplace.
En pratique, comment faire ?
Le principe semble simple mais, en pratique, est-ce que c’est aussi facile à mettre en œuvre ?\ La réponse est oui bien sûr ! 😀
Comme je l’indiquais en introduction, je vais illustrer mon propos en expliquant comment automatiser la génération d’un site statique avec Cecil et comment le déployer.
Création du workflow
Les fichiers de configuration de workflow de GitHub Actions doivent être déposés dans un dossier spécifique à la racine du dépôt qui contient les fichiers source du site à générer :
.github/workflows/
De là il suffit de créer un nouveau fichier avec l’extension yml ou yaml (par exemple build-and-deploy.yml) qui sera automatiquement reconnu comme un nouveau workflow accessible depuis l’onglet « Actions » du dépôt.
Définition des tâches et des étapes
Avant de définir les tâches il est nécessaire de déterminer l’évènement déclencheur :
on:
push:
branches:
- master
Ici on considère que la branche de production est master et que la génération doit être déclenchée à chaque modification de code (push).
En pratique nous devons définir 2 tâches (jobs) :
1. build : génération du site statique
C’est là que la marketplace montrent tout son intérêt. En effet, pour chacune des étapes (steps) ci-dessous, j’utilise une action clef en main :
- Obtention du code source via
checkout - Génération du site via
Cecil-Action - « Mise de côté » des fichiers générés via
upload-artifact
Note : la directive
withpermet de passer des options à l’action.
build:
name: Build
# Utilisation d'une image Linux Ubuntu
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v2
with:
# Inutile de récupérer tout l'historique : la dernière version suffit
fetch-depth: 1
- name: Build site with Cecil
uses: Cecilapp/Cecil-Action@v3
with:
# Pour éviter les conflits, utilisation d'un nom spécifique
config: 'cecil.yml'
- name: Upload site to Artifacts
uses: actions/upload-artifact@v2
with:
name: _site
path: _site
# La tâche ne sera pas exécutée si aucun fichier n'est généré
if-no-files-found: error
2. deploy : déploiement des fichiers générés
- Récupération des fichiers générés via
download-artifact - Déploiement du site via
GitHub-Pages-deploy
deploy:
name: Deploy
# La tâche 'deploy' est exécutée après la tâche 'build'
needs: build
runs-on: ubuntu-latest
steps:
- name: Download site from Artifacts
uses: actions/download-artifact@v2
with:
name: _site
path: _site
- name: Deploy site to GitHub Pages
uses: Cecilapp/GitHub-Pages-deploy@v3
env:
# Accès en écriture à la branche cible (`gh-pages`)
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
# Adresse e-mail valide sur GitHub
email: arnaud@ligny.org
Note : par défaut GitHub-Pages-deploy utilise le dossier
_sitecomme source et le déploie dans la branchegh-pages.
Paramétrage de GitHub Pages
Enfin, il reste à activer GitHub Pages au sein du dépôt via Settings > Pages.
- Sélectionner la branche cible
gh-pages(ainsi que le dossier/) - Puis le domaine (si vous souhaitez le personnaliser)
- Et enfin activer HTTPS (si le domaine de référence est personnalisé)
Et voilà comment générer et déployer automatiquement un site web statique, hébergé gratuitement ! 🎉
Remarques :
- Dans cet article j’ai utilisé Cecil Action mais j’aurais également pu effectuer la même démonstration avec une action Hugo ou Eleventy ;
- Si vous souhaitez tester par vous même, en moins d’une minute, je vous invite à essayer avec le template
Single-GitHub-Page.