Contribuer à cadenas
Merci de votre intérêt ! Les issues et pull requests sont les bienvenues.
Mise en place
Node.js 22 ou plus récent.
git clone https://github.com/PierreEbele/cadenas.git
cd cadenas
npm install
npm test
npm run devPrincipes du projet
- Simplicité d'abord. cadenas fait une chose : chiffrer un fichier avec un mot de passe. Toute nouvelle option doit justifier sa place.
- Rien ne quitte le navigateur. Le site ne doit charger aucune ressource externe ni ouvrir de connexion réseau. La CSP (
connect-src 'none') le garantit : ne l'assouplissez pas. - Peu de dépendances. Uniquement des bibliothèques cryptographiques reconnues et auditées. Pas de dépendance pour ce que Node.js ou le navigateur font déjà.
- Pas de crypto maison. On assemble des primitives éprouvées, on n'en invente pas.
Style de code
- JavaScript moderne (modules ES), sans étape de compilation ni TypeScript.
- Règles : la configuration recommandée d'ESLint (
eslint.config.js), vérifiée parnpm run lintet imposée par la CI. - Mise en forme :
.editorconfig(UTF-8, fins de ligne LF, indentation de 2 espaces), guillemets simples, points-virgules, et le style du code existant. - Commentaires du code en français ; fonctions publiques documentées en JSDoc.
- Textes affichés à l'utilisateur en français et en anglais :
web/i18n.jspour le site,bin/messages.jspour la ligne de commande (les tests vérifient que les deux langues ont les mêmes clés).
Modifier le format .cadenas
Le format v1 est figé : des fichiers existent déjà.
- Toute modification incompatible exige une nouvelle
versionde format, la mise à jour de docs/FORMAT.fr.md, un nouveau vecteur de test, et la conservation de la lecture des versions précédentes. - Le test
vecteur de test v1ne doit jamais être modifié pour « passer ». - Ouvrez d'abord une issue pour en discuter.
Avant d'ouvrir une pull request
npm run lint,npm testetnpm run buildpassent.- La couverture des tests reste au-dessus de 80 % (
npm run test:coverage). - Pour une modification du site :
npm run test:e2epasse. Ces tests construisent le site et le testent dans Chromium, Firefox et WebKit (chiffrement, hors ligne, CSP, accessibilité avec axe, parcours au clavier) ; la première fois, installez les navigateurs avecnpx playwright install chromium firefox webkit. - Les nouveaux comportements sont testés.
- Le CHANGELOG est complété dans sa section
[Unreleased], en anglais ; le mainteneur met à jour la version française (CHANGELOG.fr.md) à chaque version. - La documentation existe en anglais (
*.md) et en français (*.fr.md) : modifiez les deux si vous le pouvez, sinon signalez-le dans la pull request et le mainteneur traduira. - Les messages de commit suivent Conventional Commits (
feat:,fix:,docs:,ci:…), avec un corps qui explique le pourquoi.
Publier une version (mainteneurs)
Les tags de version doivent être signés : les workflows de publication vérifient la signature (scripts/verify-tag.js) et refusent de publier une version dont le tag n'est pas signé par une clé de signature du mainteneur.
Une fois, sur votre ordinateur :
ssh-keygen -t ed25519 -C "cadenas release signing" -f ~/.ssh/cadenas_signing
git config --global gpg.format ssh
git config --global user.signingkey ~/.ssh/cadenas_signing.pub
git config --global tag.gpgSign truePuis ajoutez le contenu de ~/.ssh/cadenas_signing.pub sur GitHub : Settings → SSH and GPG keys → New SSH key, type Signing Key. La clé privée ne quitte jamais votre ordinateur ; protégez-la par une phrase de passe.
À chaque version :
- Déplacer les entrées non publiées sous le nouveau numéro de version, dans
CHANGELOG.md([Unreleased]) etCHANGELOG.fr.md([Non publié]). Les notes de release sont tirées deCHANGELOG.md. Si la dateExpiresdeweb/public/.well-known/security.txtest à moins de six mois, la repousser à un an. npm version <x.y.z> --no-git-tag-version, puis commitchore(release): x.y.zpar une pull request, fusionnée dans main.- Sur main à jour :
npm run release:tag -- "résumé" --push. Le script refuse de poser le tag hors de main, sur un main pas à jour ou modifié, ou si la version manque au CHANGELOG ; il signe le tagvx.y.z, le vérifie avecscripts/verify-tag.js, puis l'envoie sur GitHub (sans--push, il affiche la commande à lancer). - La CI fait le reste : vérification de la signature du tag et de la version qu'il désigne, paquet npm (avec provenance), image Docker signée, et release GitHub (titre = message du tag, notes = section du CHANGELOG, site archivé avec empreintes et attestation), puis la formule Homebrew et une pull request winget (packaging/README.fr.md).
Ne publiez pas sur npm depuis votre poste : le workflow npm.yml vérifie que le tag correspond à la version de package.json et relance les tests avant l'envoi.
Gouvernance et code de conduite
Qui décide et comment : GOVERNANCE.fr.md. Toute participation suit le code de conduite. Architecture du code : docs/ARCHITECTURE.fr.md.
Signaler une vulnérabilité
Pas d'issue publique : voir SECURITY.fr.md.
Source de cette page : CONTRIBUTING.fr.md