Correctif pour les polices et icônes dsfr #4220
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Avant
Après
Le problème
Sur la page d'accueil de rdv mairie, on utilise les fiches de style minifiées du dsfr distribuées via le package node. Elles nécessitent que les polices soient disponibles via le path
/fonts
et les icônes via/icons
.A l'époque on avait résolu ça simplement en mettant en place des symlinks depuis
public/fonts
etpublic/icons
vers../node_modules/@gouvfr/dsfr/dist/fonts/
et../node_modules/@gouvfr/dsfr/dist/icons/
(voir #3551, l'avantage étant que ça permettait d'éviter de committer les fonts et les icônes)Or, depuis #4168, on n'inclus plus le dossier
node_modules
dans notre slug qui est déployé dans les containers scalingo, donc le symllink ne fonctionne pas, donc les polices ne se chargent pas (et on fallback sur Arial).La solution
Pour rappel, quand on lance
rails asset:precompile
, ça lance unyarn run build
, qui lance unwebpack --config webpack.config.js
, qui ensuite fait de la magie noire pour que les assets soient disponible danspublic/assets/
et que lesstylesheet_link_tag
etjavascript_include_tag
pointent vers les bon path.J'ai essayé un premier fix avec un plugin webpack (https://webpack.js.org/plugins/copy-webpack-plugin/), mais ça permettait uniquement de copier les fonts et icônes vers le path des assets webpack (avec la clé de cache webpack dans le path), et pas vers les path statiques
/fonts
et/icons
.Du coup je suis revenu vers un fix beaucoup plus simple : ajouter un bête
cp
unix équivalent aux symlinks.Un fix plus durable
Pour limiter la différence entre la production et notre CI, je serais tenté de simuler la construction du slug scalingo en ajoutant une étape
cat .slugignore | xargs rm -r
à notre build de CI. En l'occurrence, ça aurait permis de voir cette erreur au moment du build et pas en production.(Et contrairement à ce qu'on espérait dans la discussion mattermost, une gem de diff de screenshot n'aurait pas attrappé cette erreur, parce qu'on a encore les node_modules dans la CI).
C'est un peu plus complexe, donc je préfère garder ça dans un deuxième temps (et en priorité corriger la prod)