Merci de votre interet pour contribuer a Arrhes ! Ce document explique comment participer au developpement du projet.
- Code de conduite
- Comment contribuer
- Configuration de l'environnement
- Standards de code
- Convention de commits
- Process de pull request
- Tests
- Code review
- Signaler un bug
- Proposer une fonctionnalite
En participant a ce projet, vous vous engagez a maintenir un environnement respectueux et inclusif. Nous attendons de tous les contributeurs :
- Respect et courtoisie envers les autres contributeurs
- Ouverture d'esprit face aux critiques constructives
- Concentration sur ce qui est le mieux pour la communaute
- Empathie envers les autres membres de la communaute
Les comportements inacceptables incluent le harcelement, les insultes, et tout comportement discriminatoire.
Il existe plusieurs facons de contribuer a Arrhes :
Ouvrez une issue sur GitHub avec le label bug
Ouvrez une issue sur GitHub avec le label enhancement
La documentation est aussi importante que le code !
Suivez le process decrit dans ce document
Aidez a traduire l'application dans d'autres langues
Proposez des ameliorations d'interface
Avant de commencer a contribuer, configurez votre environnement de developpement :
Windows : Certains chemins du repository sont longs et peuvent dépasser la limite par défaut de Windows. Avant de cloner, exécutez la commande suivante depuis une invite de commandes administrateur :
git config --system core.longpaths true
-
Fork le repository sur votre compte GitHub
-
Cloner votre fork
git clone https://github.com/votre-username/arrhes.git cd arrhes -
Ajouter le repository principal comme remote
git remote add upstream https://github.com/arrhes/application.git
-
Choisir votre methode de developpement
Option A : Docker Compose (Recommande)
# Installer les dependances pnpm install # Lancer les services just dev up # ou docker compose -f .workflows/.dev/compose.yml up -d --build # Configurer l'environnement # Suivez les instructions dans DEVELOPMENT.md
Option B : Installation native
# Installer les dependances pnpm install # Configurer l'environnement # Suivez les instructions completes dans DEVELOPMENT.md
-
Creer une branche pour votre contribution
git checkout -b feature/ma-fonctionnalite # ou git checkout -b fix/mon-correctif
Pour plus de details, consultez DEVELOPMENT.md.
- Utiliser TypeScript strict : Pas de
any, sauf exception justifiee - Typage explicite pour les fonctions publiques
- Interfaces vs Types : Preferer
typepour les objets simples,interfacepour l'extension
Bon exemple :
type User = {
id: string
email: string
alias: string
}
function createUser(data: { email: string, alias: string }): User {
return {
id: generateId(),
...data,
}
}Mauvais exemple :
function createUser(data: any) { // any
return {
id: generateId(),
...data,
}
}- Variables et fonctions :
camelCase - Types et interfaces :
PascalCase - Constantes :
UPPER_SNAKE_CASE(si vraiment constante) - Fichiers :
camelCase.ts(y compris les composants React) - Barrel files :
_index.ts - Models : suffixe
Model(accountModel) - Schemas : pas de suffixe
// Variables et fonctions
const userName = 'John'
function getUserById(id: string) { }
// Types
type UserProfile = { }
interface ApiResponse { }
// Constantes
const MAX_RETRY_COUNT = 3
// Fichiers
// api/src/routes/auth/organizations/...
// website/src/components/forms/textInput.tsxOrdre des imports :
// 1. Imports de packages externes
import { Hono } from 'hono'
import * as v from 'valibot'
// 2. Imports de workspace packages
import { models } from '@arrhes/application-metadata/models'
import { schemas } from '@arrhes/application-metadata/schemas'
// 3. Imports relatifs du package actuel
import { authFactory } from '#/factories/authFactory.js'
import { validate } from '#/utilities/validate.js'Note sur les extensions d'import :
packages/api/etpackages/metadata/: extensions.jspackages/website/: extensions.ts/.tsx
Ordre dans les fichiers :
// 1. Imports
import { ... } from '...'
// 2. Types et interfaces
type MyType = { }
// 3. Constantes
const MY_CONSTANT = 'value'
// 4. Fonctions/composants
export function myFunction() { }
// 5. Export par defaut (si applicable)
export default MyComponent// Toujours importer valibot avec le namespace v
import * as v from 'valibot'
// Utiliser v.object(), v.string(), etc.
const mySchema = v.object({
name: v.string(),
age: v.number(),
})
// Inferer les types depuis les schemas
type MyType = v.InferOutput<typeof mySchema>Le projet utilise Biome pour le linting et le formatage du code, configure au niveau racine du monorepo.
Verifier le linting et le formatage :
pnpm checkFix automatique :
pnpm check:fixFormatage uniquement :
pnpm format:fixConfiguration :
- Biome est configure dans
biome.jsona la racine du projet - Il couvre tous les packages (api, website, metadata, tools, ui)
- Les regles sont activees par defaut (recommended)
Les regles de formatage sont appliquees automatiquement par Biome (pnpm format:fix).
Indentation : 4 espaces (pas de tabs)
Longueur de ligne : 120 caracteres maximum
Points-virgules : Non requis (sauf cas specifiques)
Quotes : Doubles " de preference
Trailing commas : Oui pour les objets et arrays multilignes
const user = {
id: '123',
name: 'John',
email: 'john@example.com', // trailing comma
}Composants fonctionnels uniquement
export function MyComponent() {
return <div>Hello</div>
}Hooks en debut de composant
export function MyComponent() {
// Hooks en premier
const [state, setState] = useState()
const query = useQuery()
// Puis logique
const handleClick = () => { }
// Puis render
return <div>...</div>
}Props destructurees
export function MyComponent({ title, description, onClose }: MyComponentProps) {
return <div>{title}</div>
}Utiliser Panda CSS pour le styling (via @arrhes/ui)
import { css, cx } from '@arrhes/ui/utilities/cn.js'
// Bon
<div className={css({ display: 'flex', alignItems: 'center', gap: '2' })}>
// Eviter les inline styles
<div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>Nous utilisons une convention de commits inspiree de Conventional Commits.
<type>(<scope>): <description>
[corps optionnel]
[footer optionnel]
feat: Nouvelle fonctionnalitefix: Correction de bugdocs: Documentation uniquementstyle: Formatage, points-virgules manquants, etc.refactor: Refactoring sans changement de fonctionnaliteperf: Amelioration de performancetest: Ajout ou correction de testschore: Maintenance, dependances, etc.
api: Backendwebsite: Frontend (dashboard + site vitrine)metadata: Package metadatatools: Outils de base de donneesui: Composants UI partagesdocs: Documentation
# Nouvelle fonctionnalite
git commit -m "feat(website): add dark mode toggle"
# Correction de bug
git commit -m "fix(api): correct balance calculation in income statement"
# Documentation
git commit -m "docs: update installation instructions"
# Refactoring
git commit -m "refactor(api): extract email templates to separate files"
# Maintenance
git commit -m "chore(deps): update drizzle to v0.45"- Utiliser l'imperatif ("add" et non "added" ou "adds")
- Pas de majuscule au debut
- Pas de point a la fin
- Maximum 72 caracteres
Pour les changements complexes, ajoutez un corps explicatif :
feat(api): add export to Excel functionality
Implement Excel export for financial statements using ExcelJS library.
Users can now export balance sheets and income statements.
- Add ExcelJS dependency
- Create export utility functions
- Add export routes for both statement types
- Update documentation
# Verifier que tout compile
pnpm run build
# Verifier le linting et le formatage
pnpm check
# Ou lancer le pipeline CI complet en local (dans Docker, pas besoin de Node.js)
just build
# Tester manuellement les changements
pnpm run dev# Recuperer les derniers changements
git fetch upstream
git rebase upstream/maingit push origin feature/ma-fonctionnaliteSur GitHub :
- Cliquez sur "New Pull Request"
- Selectionnez votre branche
- Remplissez le template de PR :
## Description
Breve description des changements
## Type de changement
- [ ] Bug fix
- [ ] Nouvelle fonctionnalite
- [ ] Breaking change
- [ ] Documentation
## Checklist
- [ ] Mon code suit les standards du projet
- [ ] J'ai commente les parties complexes
- [ ] J'ai mis a jour la documentation si necessaire
- [ ] Mes changements ne generent pas de nouveaux warnings
- [ ] J'ai teste localement
## Screenshots (si applicable)- Un mainteneur reviewera votre PR
- Repondez aux commentaires et effectuez les modifications demandees
- Une fois approuvee, votre PR sera mergee
Actuellement, le projet n'a pas de suite de tests automatises. Les contributions pour ajouter des tests sont bienvenues !
Avant de soumettre une PR, testez manuellement :
- Fonctionnalite ajoutee/modifiee : Verifiez qu'elle fonctionne comme prevu
- Regressions : Verifiez que vous n'avez rien casse
- Cas limites : Testez les edge cases (valeurs vides, tres grandes, etc.)
- Differents navigateurs : Chrome, Firefox, Safari (si frontend)
Nous prevoyons d'ajouter :
- Tests unitaires (Vitest)
- Tests d'integration (Playwright)
- Tests E2E (Playwright)
Les contributions dans ce sens sont encouragees !
- Soyez constructif et respectueux
- Expliquez le "pourquoi" de vos suggestions
- Distinguez les suggestions obligatoires des optionnelles
- Approuvez si les changements sont satisfaisants
- Ne prenez pas les commentaires personnellement
- Repondez a tous les commentaires (meme avec "Done" ou "Fixed")
- Demandez des clarifications si necessaire
- Remerciez les reviewers pour leur temps
Pour signaler un bug, ouvrez une issue sur GitHub avec :
Resume clair et concis du probleme
- Description du bug : Que se passe-t-il ?
- Comportement attendu : Que devrait-il se passer ?
- Etapes pour reproduire :
- Aller sur '...'
- Cliquer sur '...'
- Voir l'erreur
- Screenshots : Si applicable
- Environnement :
- OS : [ex: Ubuntu 22.04]
- Navigateur : [ex: Chrome 120]
- Version Node.js : [ex: 25.2.1]
- Version : [ex: commit SHA ou release]
**Description**
Le calcul du compte de resultat affiche des montants negatifs incorrects.
**Comportement attendu**
Les charges doivent apparaitre en positif et etre soustraites du resultat.
**Etapes pour reproduire**
1. Creer un exercice comptable
2. Ajouter des ecritures de charges
3. Consulter le compte de resultat
4. Observer que les montants sont negatifs
**Screenshots**
[capture d'ecran]
**Environnement**
- OS: macOS 14.2
- Navigateur: Firefox 121
- Version: commit abc123Pour proposer une nouvelle fonctionnalite, ouvrez une issue sur GitHub avec :
Description claire de la fonctionnalite
- Probleme a resoudre : Quel besoin cette fonctionnalite comble-t-elle ?
- Solution proposee : Comment voyez-vous cette fonctionnalite ?
- Alternatives considerees : Avez-vous pense a d'autres approches ?
- Contexte supplementaire : Captures d'ecran, exemples d'autres apps, etc.
**Probleme**
Les utilisateurs ne peuvent pas exporter les donnees comptables pour les traiter dans Excel.
**Solution proposee**
Ajouter un bouton "Exporter en Excel" sur chaque etat financier qui genere un fichier .xlsx avec les donnees formatees.
**Alternatives considerees**
- Export CSV : Moins convivial mais plus simple a implementer
- Export PDF : Deja disponible, mais pas editable
**Contexte**
Plusieurs utilisateurs ont demande cette fonctionnalite pour faire des analyses complementaires.Si vous avez des questions sur la contribution, n'hesitez pas a :
- Ouvrir une discussion sur GitHub
- Contacter les mainteneurs
- Consulter les issues et PR existantes
Merci de contribuer a Arrhes !