Portfolio de Data Science

Automatisation complète de la génération et publication de contenu web scientifique. Pipeline CI/CD intégrant Astro, Quarto et GitHub Actions pour une publication automatisée de rapports d’analyse.
Auteur·rice

Nicolas Decoopman

Mots clés

automatisation, CI/CD, Astro, Quarto, GitHub Actions, publication web, pipeline de déploiement, data science

Le déploiement de ce site est automatisé par GitHub Actions via un pipeline d’intégration et déploiement continus (CI/CD), déclenché à chaque mise à jour de la branche main, assurant ainsi la mise en ligne immédiate des modifications. Son principal atout réside dans la génération automatique de rapports analytiques scientifiques, rédigés sous forme de fichiers Quarto (.qmd), qui combinent efficacement texte explicatif en Markdown, code exécutable (Python, R, etc.) et résultats interactifs (graphiques, cartes, tableaux). Ces rapports deviennent des pages autonomes explorables directement depuis l’interface Astro, qui sert de vitrine globale en proposant une page d’accueil dynamique, des descriptions détaillées de chaque projet et des liens vers les rapports complets. Ce processus entièrement automatisé garantit une mise à jour rapide, reproductible et fluide du contenu analytique du site web.

1 Étapes du déploiement

  1. Déclenchement automatique

    • Le processus démarre automatiquement dès qu’un commit est poussé sur la branche main du dépôt sur une machine virtuelle Ubuntu fournie par GitHub.
on:
  push:
    branches: [main]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
  1. Préparation de l’environnement

    • La machine virtuelle GitHub est configurée avec :

      • Node.js (pour Astro)
      • Quarto (pour générer les rapports à partir des fichiers .qmd)
      • Python et Jupyter (pour exécuter les blocs de code dans les rapports Quarto)
- name: Setup Node.js
  uses: actions/setup-node@v3

- name: Install Quarto
  uses: quarto-dev/quarto-actions/setup@v2

- name: Setup Python & Jupyter
  run: |
    sudo apt-get update                                                # Met à jour la liste des paquets
    sudo apt-get install -y python3-pip                                # Installe pip pour Python 3
    python3 -m pip install --upgrade pip                               # Met à jour pip lui-même
    pip install notebook ipykernel pandas numpy matplotlib seaborn     # Installe les packages Python nécessaires
    python3 -m ipykernel install --user                                # Enregistre le noyau Python pour Jupyter
  1. Construction du site

    • Les fichiers de rapports .qmd sont convertis en fichiers .html statiques via quarto render.
    • Le site Astro est ensuite construit statiquement, générant tous les fichiers dans le dossier dist/.
- name: Render Quarto reports
  run: npm run build-qmd

- name: Build Astro
  run: npm run astro:build
  1. Gestion des rapports HTML

    • Astro écrasant le dossier public lors du build, les rapports générés (public/reports/*.html) sont manuellement recopiés dans le dossier dist/reports pour qu’ils soient inclus dans le site final.
- name: Copy reports into dist
  run: |
    mkdir -p dist/reports
    # Copie les .html, ne plante pas s'il n'y en a aucun
    cp public/reports/*.html dist/reports/ 2>/dev/null || echo "Pas de rapports HTML à copier"
    # Copie les dossiers d'assets (_files)
    cp -r public/reports/*_files dist/reports/ 2>/dev/null || echo "Pas de dossiers *_files à copier"
  1. Génération automatique du sitemap

    • Un sitemap personnalisé est généré pour inclure automatiquement toutes les pages HTML des rapports, garantissant leur indexation par les moteurs de recherche.
- name: Generate custom sitemap with reports
  run: |
    # Générer un sitemap personnalisé incluant les rapports
    npm run generate-sitemap
  1. Déploiement sur GitHub Pages

    • Le contenu du dossier dist est publié automatiquement sur la branche gh-pages du dépôt ncsdecoopman.github.io.
    • Ce site est alors accessible publiquement à l’URL associée au dépôt GitHub Pages.
    • La branche de déploiement (gh-pages ici) sera recréée à chaque fois comme une branche “orpheline”, c’est-à-dire sans historique Git. Les anciennes modifications sont invisibles. Le site publié reflète uniquement l’état actuel du projet, sans résidu de versions précédentes.
- name: Deploy to GitHub Pages
  uses: peaceiris/actions-gh-pages@v3
  with:
    force_orphan: true

Figure 1 : Pipeline du projet

2 Intérêt de cette approche

  • Automatisation totale : plus besoin de déployer manuellement, chaque mise à jour sur main se reflète automatiquement en ligne.
  • Fiabilité et cohérence : l’environnement est recréé à l’identique à chaque exécution, garantissant des builds reproductibles.
  • Intégration de rapports scientifiques : les fichiers .qmd sont convertis en .html à la volée, ce qui permet d’intégrer directement des analyses de données (Jupyter + Quarto) dans le site.
  • Séparation claire du contenu : le site Astro sert de vitrine, tandis que les rapports sont stockés de manière organisée et accessible dans dist/reports/.
  • Référencement optimisé : génération automatique d’un sitemap incluant tous les rapports HTML, garantissant leur indexation par les moteurs de recherche.

Cette architecture de déploiement garantit une mise en ligne rapide, fiable et maintenable d’un site hybride mêlant contenu statique (Astro) et rapports dynamiques (Quarto).