Quarto
Quatro est une amélioration de rmarkdown. On peut facilement porter les rmd mais également des documents python. Voici comment mettre en place un website Quarto, déployé sur GitLab, avec freeze des calculs ou non.
Créer un blog quarto avec git, knitr et renv :
New project
>Quarto Blog
(ou website, blog, …).L’architecture est la suivante :
File Description _quarto.yml
Quarto project file. index.qmd
Blog home page. about.qmd
Blog about page. posts/
Directory containing posts posts/_metadata.yml
Shared options for posts
renv/
renv directory renv.lock
renv lockfile styles.css
Custom CSS for website Le dépôt utilise renv pour installer et versionner les versions des packages.
- Call
renv::init()
to initialize a new project-local environment with a private R library, - Work in the project as normal, installing and removing new R packages as they are needed in the project,
- Call
renv::snapshot()
to save the state of the project library to the lockfile (calledrenv.lock
), - Continue working on your project, installing and updating R packages as needed.
- Call
renv::snapshot()
again to save the state of your project library if your attempts to update R packages were successful, or callrenv::restore()
to revert to the previous state as encoded in the lockfile if your attempts to update packages introduced some new problems.
Pas de soucis pour installer un package BioConductor. Pour un package GitHub utiliser :
::install('mahendra-mariadassou/phyloseq-extended@dev') renv
- Call
Ajouter le dépôt distant
::use_git() usethis::use_git_remote(name = "origin", url = "git@forgemia.inra.fr:cedric.midoux/quartoblog.git") usethis
git push --set-upstream origin main
Définir l’
output-dir
dans_quarto.yml
:project: type: website output-dir: public
Exclure les fichiers temporaire et les pages html du dépôts
::use_git_ignore(c("/.quarto/", "public/")) usethis
Générer le site avec l’onglet Build.
::quarto_render() quarto
Les résultats des calculs sont stockés dans le dossier
_freeze/
. Ce dossier peut être versionné ou non suivant les besoins (voir Doc).Les posts sont rédiger dans le dossier le dossier
posts/
avec un sous-dossier par post et un fichierindex.qmd
dont l’entête est décrite dans la doc :--- title: "Post With Code" description: "Post description" author: "Fizz McPhee" date: "5/22/2021" categories: - news - code - analysis draft: false ---
Les paramètres par défaut pour l’ensemble des posts sont spécifiés dans
posts/_metadata.yml
.# options specified here will apply to all posts in this folder # freeze computational output # (see https://quarto.org/docs/projects/code-execution.html#freeze) freeze: auto # Enable banner style title blocks title-block-banner: true
Je recommande
freeze: auto
.Configurer un pipeline CI/CD
.gitlab-ci.yml
.# The Docker image that will be used to build your app image: rocker/verse:4.2 # Functions that should be executed before the build script is run before_script: - R -e "renv::restore()" pages: script: - quarto render artifacts: paths: # The folder that contains the files to be exposed at the Page URL - public rules: # This ensures that only pushes to the default branch will trigger # a pages deploy - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH
Si il n’y a aucun code a exécuter, inutile d’utiliser
renv
.On peut suivre l’avancé des taches dans l’onglet jobs et le site est disponible
https://<user>.pages.mia.inra.fr/<repo>/
.Le site est généré et déployé à chaque commit sur la branche
main
. Si il y a des résultats disponibles dans le dossierfreeze
ils sont utilisés.Pour rendre un post privé, il suffi d’ajouter
draft: true
dans le header.--- title: "Penguins" description: "Penguins description" author: "Midoux" date: "2022-12-09" categories: [penguins, code, analysis] image: "https://allisonhorst.github.io/palmerpenguins/logo.png" draft: true ---
On peut également utiliser des listes.
Il existe de multiples paramètres pour les blocs de codes et autres. Parmi les intéressants identifié, le repliement du code. Pour le reste voir la doc complète.
```{r} #| label: penguins #| code-fold: true ```
A tester :
- Pour utiliser une version spécifique d’un package, on s’appuie sur les profils de renv.
- Le template
inraeThemes