10 KiB
Comment contribuer ?
Merci de prendre le temps de contribuer ! 🎉
Voici quelques informations pour démarrer :
Rapport de bug, nouvelles fonctionnalités
Nous utilisons GitHub pour suivre tous les bugs et discussions sur les nouvelles fonctionnalités. Pour rapporter un bug ou proposer une évolution vous pouvez ouvrir une nouvelle discussion. N'hésitez pas à utiliser la recherche pour vérifier si le sujet n'est pas déjà traité dans une discussion ouverte.
Développement
Si vous voulez participer au développement de nouvelles fonctionnalités, vous pouvez consulter la liste des «good first issue ». Ce sont des fonctionnalités intéressantes qui ne sont normalement pas trop complexe à implémenter. N'hésitez pas à poser toutes vos questions sur ces issues !
Technologies
L'application est écrite en JavaScript, elle est exécuté uniquement côté client — il n'y a pas de serveur applicatif, nous générons des fichiers .html
statiques
Nous utilisons :
- TypeScript pour ajouter un système de typage à notre code JavaScript. Le typage n'est pas utilisé partout et il n'est pas obligatoire de le prendre en compte pour contribuer.
- Yarn pour la gestion des dépendances (à la place de NPM qui est souvent utilisé dans les applications JavaScript)
- React pour la gestion de l'interface utilisateur
- Redux pour gérer le “state” de l'application côté client
- Prettier pour formater le code source, l'idéal est de configurer votre éditeur de texte pour que les fichiers soit formatés automatiquement quand vous sauvegardez un fichier. Si vous utilisez VS Code cette configuration est automatique.
- Webpack pour le “bundling”
- Eslint qui permet par exemple d'éviter de garder des variables inutilisées
- Ramda comme libraire d'utilitaires pour manipuler les listes/objects/etc (c'est une alternative à lodash ou underscore)
- Mocha, Jest et Cypress pour les l'execution des tests. Plus d'informations dans la section consacrée aux tests.
Démarrage
Si possible, assurez-vous d'avoir toutes les clés d'API nécessaires dans votre fichier
mon-entreprise/.env
(un template est disponible dans mon-entreprise/.env.template
).
NB : ne vous inquiétez pas, ceci n'est pas nécessaire pour effectuer une première contribution à
la base de code ! Cependant, vous en aurez besoin pour la commande yarn prepare
et pour les
commandes de traduction automatique français -> anglais. Si vous êtes confronté à ce type de besoin,
demandez l'aide des contributeurs du projet.
Si l'historique des commits est trop volumineux, vous pouvez utiliser le paramètre depth
de git pour ne télécharger que les derniers commits.
# Clone this repo on your computer
git clone --depth 100 git@github.com:betagouv/mon-entreprise.git && cd mon-entreprise
# Mettre à jour votre config git locale
git config blame.ignoreRevsFile .git-blame-ignore-revs
# Install the Javascript dependencies through Yarn
yarn install
# Download some data
yarn prepare
# Watch changes in publicodes and run the server for mon-entreprise
yarn start
L'application est exécutée sur http://localhost:8080/mon-entreprise pour la version française et http://localhost:8080/infrance pour la version anglaise.
Pour activer le traçage Redux:
REDUX_TRACE=true yarn start
Messages de commit
A mettre sans retenue dans les messages de commit :
- 🎨
:art:
pour une modification de l'UI - 🐎
:racehorse:
pour une amélioration de performance - 🐛
:bug:
pour une correction de bug - 🔥
:fire:
pour une suppression de code ou de fichier - 💚
:green_heart:
pour une correction de CI - ✅
:white_check_mark:
pour un ajout de test - ⬆️
:arrow_up:
pour une mise à jour de dépendances - ✨
:sparkles:
pour une ré-organisation du code - ⚙
:gear:
pour une contribution sur le moteur publicodes - 🔨
:hammer:
pour une contribution à la base de règles - 📆
:calendar:
pour un changement de règle du à une évolution temporelle (en attendant mieux) - 📈
:chart_with_upwards_trend:
pour une amélioration du tracking - 👽
:alien:
pour ajouter des traductions - ♿
:wheelchair:
pour corriger les problèmes liés à l'accessibilité - 🖋
:fountain_pen:
pour séparer les commits liés à la modification du contenu - 🔍
:mag:
pour les modifications liées au référencement naturel
Tests
Vérification syntaxique :
$ yarn lint
Vérification du typage :
$ yarn test:type
Tests unitaires
$ yarn test
Tests de non-regression (snapshots)
$ yarn test:regressions
Si vous souhaitez mettre à jour les snapshots vous pouvez utiliser le paramètre --updateSnapshot
, son raccourci -u
, ou encore le mode interactif.
Tests d'integrations
Pré-requis:
- le browser chromium doit être installé. Les builds peuvent être trouvés sur le site de Cypress
- le serveur doit être lancé via
yarn start
$ yarn workspace mon-entreprise test:dev-e2e:mon-entreprise
$ yarn workspace mon-entreprise test:dev-e2e:mycompanyinfrance
$ yarn workspace mon-entreprise test:dev-e2e:publicodes
Traduction 👽
Le site est disponible en français, et en anglais sur https://mycompanyinfrance.com
Les traductions se trouvent dans le répertoire source/locales
.
La librairie utilisée pour la traduction de l'UI est react-i18next.
Lorsque l'on introduit une nouvelle chaîne de caractère dans l'UI il faut
systématiquement penser à gérer sa traduction, via un composant <Trans>
, ou
via la fonction t
Le circle-ci fait une analyse statique du code pour repérer les chaînes non traduites, dans le moteur et l'UI :
$ yarn run i18n:rules:check
$ yarn run i18n:ui:check
Pour traduire automatiquement les chaînes manquantes via l'api Deepl :
$ yarn run i18n:rules:translate
$ yarn run i18n:ui:translate
N'oubliez pas de vérifier sur le diff que rien n'est choquant.
CI/CD
- Nous utilisons des Github actions pour faire tourner les builds et tests.
- Netlify, s'occupe de l’hébergement du site sur Internet avec gestion des DNS.
Analyse des bundles
La commande yarn run build:analyse-bundle
gènere une visualisation interactive du
contenu packagé, cf.
webpack-bundle-analyzer
Tests
Pour tester les règles, il est recommandé de:
- faire tourner un simulateur et vérifier à la main l'adéquation des règles avec les normes traduites ;
- créer des cas de tests de non-régression sous la forme de nouveaux snapshots (cf.
mon-entreprise/test/regressions
).
En local, le moteur de recherche n'est pas mis à jour automatiquement et la liste des règles est exposée ici: http://localhost:8080/mon-entreprise/documentation/dev
Publicodes
Documentation
La documentation de publicodes est disponible sur https://publi.codes.
Un wiki contenant des informations intéressantes sur publicodes et le raisonnement ayant abouti à ce langage sont dispos sur le repository betagouv/publicodes
Pour se familiariser avec les règles, vous pouvez jeter un œil aux fichiers
contenant les règles elles-mêmes (dans le dossier modele-social
) mais cela
peut s'avérer assez abrupt.
Essayez plutôt de jeter un oeil aux tests dans un premier temps, et pourquoi pas à à l'implémentation des mécanismes.
Traduction des normes (lois) en règles Publicodes
Checklist:
- Lire les articles de vulgarisation (sur le site de l'URSSAF, des impôts, etc.).
- Utiliser un moteur de recherche spécialisé, comme RFPaye.
- Lire les normes et noter leurs référence dans les règles Publicodes.
Modifier publicodes
Publicodes dispose désormais de son propre dépôt GitHub https://github.com/betagouv/publicodes
Néanmoins pour certaines nouvelles fonctionnalités de mon-entreprise nous concervons le besoin de modifier publicodes avec le moins de frictions possible. Pour tester une évolution du moteur il serait en effet trop lourd d'avoir à ouvrir d'abord une PR côté publicodes, la merger, publier une nouvelle version du paquet, puis ré-intégrer cette nouvelle version sur mon-entreprise.
C'est pourquoi nous intégrons le code source du publicode dans le sous-répertoire publicodes/
. La
commande git subtree
nous permet de synchroniser les changements effectués dans l'un ou l'autre
des dépôts.
La première chose à faire est d'ajouter une nouvelle remote
pour betagouv/publicodes
, ici nous l'appelons simplement publicodes
:
git remote add publicodes git@github.com:betagouv/publicodes.git
Ensuite il est possible de remonter les changements effectués dans le sous-repertoire publicodes/
vers la branche master de la remote publicodes
.
$ git subtree push --prefix=publicodes publicodes master
Dans l'autre sens il est possible de rapatrier les changements avec la commande
$ git subtree pull --prefix=publicodes publicodes master --squash
Les dépendances peuvent avoir changé côté publicodes, mieux vaut donc enchaîner avec un yarn install
pour être à jour.