docs(collab): conventions git, PR template, issue templates, CODEOWNERS
This commit is contained in:
parent
c8c9c07961
commit
303dbedcdd
10 changed files with 241 additions and 20 deletions
42
.forgejo.labels.json
Normal file
42
.forgejo.labels.json
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "bug",
|
||||||
|
"color": "#d73a4a",
|
||||||
|
"description": "Quelque chose ne fonctionne pas"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "feature",
|
||||||
|
"color": "#a2eeef",
|
||||||
|
"description": "Demande de fonctionnalité"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "docs",
|
||||||
|
"color": "#0075ca",
|
||||||
|
"description": "Documentation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "security",
|
||||||
|
"color": "#8a2be2",
|
||||||
|
"description": "Sécurité / durcissement"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "infra",
|
||||||
|
"color": "#e99695",
|
||||||
|
"description": "Infra / CI / pipelines"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "help wanted",
|
||||||
|
"color": "#008672",
|
||||||
|
"description": "Contributions bienvenues"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "good first issue",
|
||||||
|
"color": "#7057ff",
|
||||||
|
"description": "Idéal pour débuter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "blocked",
|
||||||
|
"color": "#b60205",
|
||||||
|
"description": "Bloqué / dépendance"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -1,11 +1,16 @@
|
||||||
---
|
|
||||||
name: Bug
|
name: Bug
|
||||||
about: Rapport de bogue
|
about: Signaler un problème
|
||||||
|
title: "[bug] "
|
||||||
|
labels: ["bug"]
|
||||||
---
|
---
|
||||||
**Comportement attendu**
|
**Description**
|
||||||
**Comportement observé**
|
Comportement observé vs attendu
|
||||||
|
|
||||||
**Reproduire**
|
**Reproduire**
|
||||||
1.
|
Étapes / commandes
|
||||||
2.
|
|
||||||
3.
|
**Preuves**
|
||||||
**Contexte** (OS, version, logs)
|
Logs / captures (masquez toute donnée sensible)
|
||||||
|
|
||||||
|
**Contexte**
|
||||||
|
Version, env, tenant, C5/gateway si concerné
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,16 @@
|
||||||
|
name: Feature
|
||||||
|
about: Nouvelle fonctionnalité / amélioration
|
||||||
|
title: "[feat] "
|
||||||
|
labels: ["feature"]
|
||||||
---
|
---
|
||||||
name: Demande de fonctionnalité
|
**Problème à résoudre / valeur**
|
||||||
about: Proposition d'amélioration
|
Contexte / objectif
|
||||||
---
|
|
||||||
**Problème à résoudre**
|
**Approche proposée**
|
||||||
**Solution proposée**
|
Idées techniques, impact C5/CI/docs
|
||||||
**Impacts (doc, SSOT, CI)**
|
|
||||||
|
**Preuves attendues**
|
||||||
|
SBOM/signature, tests, docs
|
||||||
|
|
||||||
|
**Dépendances**
|
||||||
|
Issues/PRs liées
|
||||||
|
|
|
||||||
17
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
17
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
|
|
@ -0,0 +1,17 @@
|
||||||
|
## Objet de la PR
|
||||||
|
<!-- Décrire brièvement le changement -->
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
- [ ] CI verte (scan secrets, build, SBOM, signature, lint preuves)
|
||||||
|
- [ ] Aucune fuite de secret dans le diff
|
||||||
|
- [ ] `registrar.yaml` mis à jour si nécessaire (et **valide**)
|
||||||
|
- [ ] Preuves ajoutées/mises à jour (`/evidence/...`) si pertinent
|
||||||
|
- [ ] C5: mTLS/OPA testés (captures/artefacts joints) si modifié
|
||||||
|
- [ ] Docs mises à jour (`docs/constitution/03_*` / `03_annexes.md`)
|
||||||
|
- [ ] 2 reviewers (infra/sécu si applicable)
|
||||||
|
|
||||||
|
### Liens / Issues
|
||||||
|
Closes #
|
||||||
|
|
||||||
|
### Captures / Preuves
|
||||||
|
<!-- Joindre sorties de commandes, captures, liens vers artefacts CI -->
|
||||||
6
CODEOWNERS
Normal file
6
CODEOWNERS
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
# CODEOWNERS — utilisez des équipes/alias Forgejo (ex: @Alliance-Boreale/secops)
|
||||||
|
/docs/constitution/ @Alliance-Boreale/docs
|
||||||
|
/.forgejo/workflows/ @Alliance-Boreale/ci
|
||||||
|
/security/ @Alliance-Boreale/secops
|
||||||
|
/evidence/ @Alliance-Boreale/secops
|
||||||
|
/registrar*.yaml @Alliance-Boreale/infra
|
||||||
|
|
@ -1,6 +1,74 @@
|
||||||
# Contribuer
|
# Contribuer à l'Alliance Boréale
|
||||||
1. Fork/branche: `feat/...`, `fix/...`, `docs/...`.
|
|
||||||
2. Respecter la charte DNS/PKI et le plan IP v3.
|
Bienvenue ! Voici les conventions pour garder un dépôt propre, lisible et sûr.
|
||||||
3. Mettre à jour la doc (`docs/`) si comportement/standard change.
|
|
||||||
4. Lint YAML: `yamllint` (via CI), SSOT: `node configure/export.mjs`.
|
## TL;DR (workflow standard)
|
||||||
5. Tests: `node configure/tests/test.mjs`.
|
1. `git switch -c <branche>` selon la convention ci-dessous
|
||||||
|
2. Commits **Conventional Commits**
|
||||||
|
3. Ouvre une PR (2 reviewers requis pour dossiers infra/sécu)
|
||||||
|
4. CI **verte** (scan secrets, SBOM, signature, lint preuves)
|
||||||
|
5. Mets à jour la doc/annexes si besoin
|
||||||
|
6. Merge (Squash & Merge recommandé), supprime la branche
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Nommage des branches
|
||||||
|
Format : `{type}/{scope}-{description-courte}` *(kebab-case, pas d’accents)*
|
||||||
|
|
||||||
|
**Types acceptés :**
|
||||||
|
- `feat` (nouvelle fonctionnalité)
|
||||||
|
- `fix` (correctif)
|
||||||
|
- `docs` (documentation)
|
||||||
|
- `ci` (pipeline / outils CI/CD)
|
||||||
|
- `refactor` (refacto sans changement fonctionnel)
|
||||||
|
- `perf` (performance)
|
||||||
|
- `test` (tests)
|
||||||
|
- `chore` (entretien, dépendances)
|
||||||
|
- `security` (politiques, durcissement, corrections sécu)
|
||||||
|
- `hotfix` (urgence prod)
|
||||||
|
- `release` (préparation release)
|
||||||
|
|
||||||
|
**Exemples :**
|
||||||
|
- `feat/lot1-starter-kit`
|
||||||
|
- `security/opa-policies-c5`
|
||||||
|
- `docs/03-annexes-label`
|
||||||
|
- `fix/ci-cosign-verification`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Commits : Conventional Commits
|
||||||
|
Format de message : `type(scope): description brève`
|
||||||
|
|
||||||
|
**Exemples :**
|
||||||
|
- `feat(registraire): ajoute schéma security + exemple YAML`
|
||||||
|
- `ci(signing): active cosign keyless et vérification`
|
||||||
|
- `docs(03): ajoute Annexe B - catalogue de preuves`
|
||||||
|
- `security(logs): active object-lock sur le bucket`
|
||||||
|
|
||||||
|
> *Scope* optionnel. Développe dans le **corps** : *motivation, breaking changes, liens vers issues*.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Pull Requests
|
||||||
|
- **CI verte** : `.forgejo/workflows/security-supplychain.yml` doit réussir
|
||||||
|
- **Pas de secrets** en clair (scan Gitleaks = 0)
|
||||||
|
- **SBOM + signatures/attestations** présents pour artefacts buildés
|
||||||
|
- **Preuves** mises à jour si pertinent (`/evidence/...`)
|
||||||
|
- **OPA** / **mTLS** testés si changement C5
|
||||||
|
- **Docs** mises à jour (ex: `docs/constitution/03_*.md` ou `03_annexes.md`)
|
||||||
|
- Liaison à une issue : `Closes #<id>` (si applicable)
|
||||||
|
|
||||||
|
**Stratégie de merge** : *Squash & Merge* recommandé pour garder l’historique propre.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Sécurité (rappels)
|
||||||
|
- MFA résistante au hameçonnage pour comptes à privilèges (FIDO2)
|
||||||
|
- Secrets **par référence** (Vault) uniquement
|
||||||
|
- Runners CI **éphémères**, jetons courts, réseau sortant minimal
|
||||||
|
- Logs immu **90j** (Object-Lock/WORM), alerte test lors de nouvelles règles
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Code of Conduct
|
||||||
|
Restez respectueux et bienveillants; pas de données sensibles dans les issues/PR publiques.
|
||||||
|
|
|
||||||
25
README-COLLAB.md
Normal file
25
README-COLLAB.md
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
# Pack Conventions Collaboration — Alliance Boréale
|
||||||
|
|
||||||
|
Contient :
|
||||||
|
- `CONTRIBUTING.md` — règles de contribution (branches, commits, PRs, sécurité)
|
||||||
|
- `docs/engineering/git-conventions.md` — détails pratiques
|
||||||
|
- `.gitea/PULL_REQUEST_TEMPLATE.md` — checklist PR
|
||||||
|
- `.gitea/ISSUE_TEMPLATE/*` — modèles d'issues
|
||||||
|
- `CODEOWNERS` — propriétaires de chemins (à adapter à vos équipes)
|
||||||
|
- `scripts/check_branch.sh` — vérification du nom de branche
|
||||||
|
- `templates/.gitmessage.txt` — modèle de message de commit
|
||||||
|
- `.forgejo.labels.json` — labels à importer dans la Forge
|
||||||
|
|
||||||
|
## Installation rapide
|
||||||
|
Déposez tout à la racine du dépôt, puis :
|
||||||
|
```bash
|
||||||
|
# modèle de commit pour ce repo
|
||||||
|
git config commit.template templates/.gitmessage.txt
|
||||||
|
|
||||||
|
# hook local pour valider le nom de branche avant push
|
||||||
|
echo './scripts/check_branch.sh' > .git/hooks/pre-push && chmod +x .git/hooks/pre-push
|
||||||
|
|
||||||
|
# importer les labels (via API Forgejo ou à la main)
|
||||||
|
# API: POST /repos/{owner}/{repo}/labels avec le contenu de .forgejo.labels.json
|
||||||
|
```
|
||||||
|
Pensez à ajuster `CODEOWNERS` avec vos **vrais** groupes/équipes Forgejo (ex: @Alliance-Boreale/secops).
|
||||||
29
docs/engineering/git-conventions.md
Normal file
29
docs/engineering/git-conventions.md
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Conventions Git — Alliance Boréale
|
||||||
|
|
||||||
|
## Branches
|
||||||
|
- `{type}/{scope}-{description}`
|
||||||
|
- *kebab-case*, ASCII simple, 50–60 caractères max
|
||||||
|
- Durée de vie courte; suppression après merge
|
||||||
|
- Pas de commits directement sur `main` (branches protégées)
|
||||||
|
|
||||||
|
## Types (rappel)
|
||||||
|
feat, fix, docs, ci, refactor, perf, test, chore, security, hotfix, release
|
||||||
|
|
||||||
|
## Commits
|
||||||
|
- Titre ≤ 72 chars
|
||||||
|
- Corps : *motivation, contexte, liens, breaking changes*
|
||||||
|
- `revert:` autorisé (réf. au commit original)
|
||||||
|
|
||||||
|
## Rebase / Merge
|
||||||
|
- Préférez **Squash & Merge** (historique lisible)
|
||||||
|
- Rebase interactif autorisé avant PR pour nettoyer
|
||||||
|
|
||||||
|
## Tags / Releases (optionnel)
|
||||||
|
- SemVer : `vX.Y.Z`
|
||||||
|
- Changelog généré depuis Conventional Commits (outil libre au choix)
|
||||||
|
|
||||||
|
## Hooks (optionnel)
|
||||||
|
- `pre-push` : validation nom de branche & scan rapide
|
||||||
|
- `prepare-commit-msg` : pré-remplir le modèle de commit
|
||||||
|
|
||||||
|
Voir `scripts/check_branch.sh` et `templates/.gitmessage.txt`.
|
||||||
13
scripts/check_branch.sh
Executable file
13
scripts/check_branch.sh
Executable file
|
|
@ -0,0 +1,13 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Validate branch name against {type}/{scope}-{desc}
|
||||||
|
set -euo pipefail
|
||||||
|
bname="$(git rev-parse --abbrev-ref HEAD)"
|
||||||
|
re='^(feat|fix|docs|ci|refactor|perf|test|chore|security|hotfix|release)\/[a-z0-9]+(-[a-z0-9]+)*$'
|
||||||
|
if [[ "$bname" =~ $re ]]; then
|
||||||
|
echo "Branch name OK: $bname"
|
||||||
|
exit 0
|
||||||
|
else
|
||||||
|
echo "ERROR: Branch '$bname' ne respecte pas la convention {type}/{scope}-{desc}."
|
||||||
|
echo "Exemples: feat/lot1-starter-kit, security/opa-policies-c5"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
7
templates/.gitmessage.txt
Normal file
7
templates/.gitmessage.txt
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Titre (Conventional Commit): type(scope): description brève (≤72)
|
||||||
|
# Corps (optionnel): motivation, contexte, liens, breaking changes
|
||||||
|
#
|
||||||
|
# Exemples:
|
||||||
|
# feat(registraire): ajoute schéma security + exemple YAML
|
||||||
|
# ci(signing): active cosign keyless et vérification
|
||||||
|
# docs(03): ajoute Annexe B - catalogue de preuves
|
||||||
Loading…
Reference in a new issue