Compare commits

..

6 Commits

64 changed files with 199 additions and 613 deletions

View File

@ -1,8 +1,3 @@
# Règles SSH & Automatisation — Flux local
- Interdiction de secrets en clair; secrets via `~/.4nk_template/.env` ou variables CI
- Scripts SSH conservés exécutables, journaux non sensibles
- Le flux local prime: agents exécutés avant merge/push/release; CI neutralisable via `CI_SKIP=true` et `[skip ci]`
--- ---
alwaysApply: true alwaysApply: true
--- ---

View File

@ -25,9 +25,6 @@ Tous les projets issus de 4NK_project_template. Contrôle de lalignement sur
- Erreur bloquante si un path requis nexiste pas après sync. - Erreur bloquante si un path requis nexiste pas après sync.
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles. - Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
[note]
Les validations CI peuvent être remplacées par lexécution locale des agents (AUTO_FIX/SCOPE) lorsque `CI_SKIP=true` est activé. Conserver une PR de synthèse et la traçabilité dans le changelog.
[artefacts concernés] [artefacts concernés]
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md. - .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.
# Synchronisation de template (4NK) # Synchronisation de template (4NK)
@ -52,8 +49,5 @@ Tous les projets issus de 4NK_project_template. Contrôle de lalignement sur
- Erreur bloquante si un path requis nexiste pas après sync. - Erreur bloquante si un path requis nexiste pas après sync.
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles. - Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
[note]
Les validations CI peuvent être remplacées par lexécution locale des agents (AUTO_FIX/SCOPE) lorsque `CI_SKIP=true` est activé. Conserver une PR de synthèse et la traçabilité dans le changelog.
[artefacts concernés] [artefacts concernés]
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md. - .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.

View File

@ -11,14 +11,12 @@ on:
env: env:
RUST_VERSION: '1.70' RUST_VERSION: '1.70'
DOCKER_COMPOSE_VERSION: '2.20.0' DOCKER_COMPOSE_VERSION: '2.20.0'
CI_SKIP: 'true'
jobs: jobs:
# Job de vérification du code # Job de vérification du code
code-quality: code-quality:
name: Code Quality name: Code Quality
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
@ -67,7 +65,6 @@ jobs:
unit-tests: unit-tests:
name: Unit Tests name: Unit Tests
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
@ -104,7 +101,6 @@ jobs:
integration-tests: integration-tests:
name: Integration Tests name: Integration Tests
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
services: services:
docker: docker:
@ -152,7 +148,6 @@ jobs:
security-tests: security-tests:
name: Security Tests name: Security Tests
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
@ -190,7 +185,6 @@ jobs:
docker-build: docker-build:
name: Docker Build & Test name: Docker Build & Test
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
services: services:
docker: docker:
@ -234,7 +228,6 @@ jobs:
documentation-tests: documentation-tests:
name: Documentation Tests name: Documentation Tests
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
@ -250,7 +243,6 @@ jobs:
markdownlint: markdownlint:
name: Markdown Lint name: Markdown Lint
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -281,7 +273,6 @@ jobs:
bash-required: bash-required:
name: Bash Requirement name: Bash Requirement
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -299,7 +290,6 @@ jobs:
agents-smoke: agents-smoke:
name: Agents Smoke (no AI) name: Agents Smoke (no AI)
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -320,7 +310,7 @@ jobs:
openia-agents: openia-agents:
name: Agents with OpenIA name: Agents with OpenIA
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' && secrets.OPENAI_API_KEY != '' }} if: ${{ secrets.OPENAI_API_KEY != '' }}
env: env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
OPENAI_MODEL: ${{ vars.OPENAI_MODEL }} OPENAI_MODEL: ${{ vars.OPENAI_MODEL }}
@ -344,7 +334,6 @@ jobs:
deployment-checks: deployment-checks:
name: Deployment Checks name: Deployment Checks
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -362,7 +351,6 @@ jobs:
security-audit: security-audit:
name: Security Audit name: Security Audit
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -382,7 +370,6 @@ jobs:
name: Release Guard name: Release Guard
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
needs: [code-quality, unit-tests, documentation-tests, markdownlint, security-audit, deployment-checks, bash-required] needs: [code-quality, unit-tests, documentation-tests, markdownlint, security-audit, deployment-checks, bash-required]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
uses: actions/checkout@v3 uses: actions/checkout@v3
@ -414,7 +401,7 @@ jobs:
name: Create Release (Gitea API) name: Create Release (Gitea API)
runs-on: ubuntu-latest runs-on: ubuntu-latest
needs: [release-guard] needs: [release-guard]
if: ${{ env.CI_SKIP != 'true' && startsWith(github.ref, 'refs/tags/') }} if: startsWith(github.ref, 'refs/tags/')
env: env:
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
BASE_URL: ${{ vars.BASE_URL }} BASE_URL: ${{ vars.BASE_URL }}
@ -444,7 +431,6 @@ jobs:
performance-tests: performance-tests:
name: Performance Tests name: Performance Tests
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
if: ${{ env.CI_SKIP != 'true' }}
steps: steps:
- name: Checkout code - name: Checkout code
@ -471,7 +457,7 @@ jobs:
name: Notify name: Notify
runs-on: [self-hosted, linux] runs-on: [self-hosted, linux]
needs: [code-quality, unit-tests, integration-tests, security-tests, docker-build, documentation-tests] needs: [code-quality, unit-tests, integration-tests, security-tests, docker-build, documentation-tests]
if: ${{ env.CI_SKIP != 'true' && always() }} if: always()
steps: steps:
- name: Notify success - name: Notify success

View File

@ -399,14 +399,3 @@ Ce `AGENTS.md` mis à jour introduit l**Agent Synchronisation de template** e
La matrice de coordination formalise les validations obligatoires pour chaque type de changement, garantissant cohérence structurelle, qualité documentaire, sécurité, traçabilité. La matrice de coordination formalise les validations obligatoires pour chaque type de changement, garantissant cohérence structurelle, qualité documentaire, sécurité, traçabilité.
Ainsi que la stabilité à long terme sur tous les projets issus de `4NK_project_template`. Ainsi que la stabilité à long terme sur tous les projets issus de `4NK_project_template`.
---
## Exécution locale et neutralisation de la CI
- Les contrôles CI peuvent être remplacés par lexécution locale des agents: `scripts/agents/run.sh` avec `AUTO_FIX=1`, `SCOPE=changed|all`.
- La CI peut être neutralisée par défaut via `CI_SKIP=true` dans le workflow; ponctuellement via des commits `[skip ci]`.
- Des hooks sont fournis pour automatiser le flux local:
- `scripts/local/precommit.sh` et `scripts/local/prepush.sh`
- installation: `bash scripts/local/install_hooks.sh`
- Un conteneur unifié (runner+agents) permet une exécution reproductible: `docker-compose.ci.yml`.

View File

@ -1 +1,3 @@
v2025.08.6 v2025.08.3

View File

@ -12,10 +12,6 @@ MODE="${RUNNER_MODE:-agents}"
TARGET_DIR="${TARGET_DIR:-/work}" TARGET_DIR="${TARGET_DIR:-/work}"
OUTPUT_DIR="${OUTPUT_DIR:-/work/tests/reports/agents}" OUTPUT_DIR="${OUTPUT_DIR:-/work/tests/reports/agents}"
# Rendre le dépôt monté sûr pour Git (propriétaire différent dans le conteneur)
git config --global --add safe.directory "/work" || true
git config --global --add safe.directory "${TARGET_DIR}" || true
normalize_scripts() { normalize_scripts() {
if command -v dos2unix >/dev/null 2>&1; then if command -v dos2unix >/dev/null 2>&1; then
find /work/scripts -type f -name "*.sh" -print0 | xargs -0 -r dos2unix -f || true find /work/scripts -type f -name "*.sh" -print0 | xargs -0 -r dos2unix -f || true

View File

@ -1,156 +1,2 @@
# 📚 Index de Documentation - 4NK_template # Index
Index complet de la documentation du template 4NK pour la création de nouveaux projets.
## 🚀 Vue d'Ensemble
4NK_template est un template complet pour créer de nouveaux projets dans l'écosystème 4NK. Il fournit une structure standardisée avec tous les éléments nécessaires pour un projet open source moderne.
## 📖 Guides Principaux
### 🚀 [Guide d'Installation](INSTALLATION.md)
Guide complet pour installer et configurer un nouveau projet basé sur 4NK_template.
- **Prérequis système et logiciels**
- **Installation du template**
- **Configuration initiale**
- **Personnalisation du projet**
- **Tests post-installation**
### 📖 [Guide d'Utilisation](USAGE.md)
Guide complet pour utiliser le template et créer de nouveaux projets.
- **Création d'un nouveau projet**
- **Personnalisation de la structure**
- **Configuration des scripts**
- **Adaptation de la documentation**
- **Tests et validation**
### ⚙️ [Guide de Configuration](CONFIGURATION.md)
Guide complet pour configurer le template selon vos besoins.
- **Configuration générale**
- **Personnalisation des scripts**
- **Configuration CI/CD**
- **Configuration Docker**
- **Configuration de sécurité**
## 🔧 Guides Techniques
### 🏗️ [Architecture Technique](ARCHITECTURE.md)
Documentation technique détaillée de l'architecture du template.
- **Structure générale du template**
- **Composants principaux**
- **Scripts et utilitaires**
- **Configuration Docker**
- **Intégration CI/CD**
- **Sécurité et bonnes pratiques**
### 📡 [API Reference](API.md)
Documentation des APIs et interfaces du template.
- **Scripts disponibles**
- **Configuration des hooks Git**
- **Variables d'environnement**
- **Format des fichiers de configuration**
### 🔒 [Sécurité](SECURITY.md)
Guide de sécurité et bonnes pratiques.
- **Audit de sécurité**
- **Bonnes pratiques**
- **Configuration sécurisée**
- **Tests de sécurité**
## 🧪 Guides de Test
### 🧪 [Guide des Tests](TESTING.md)
Guide complet pour les tests du template.
- **Tests unitaires**
- **Tests d'intégration**
- **Tests de sécurité**
- **Tests de configuration**
### 🔍 [Audit de Sécurité](SECURITY_AUDIT.md)
Audit de sécurité détaillé du template.
- **Vulnérabilités connues**
- **Tests de pénétration**
- **Audit de code**
- **Recommandations de sécurité**
## 🔧 Guides de Développement
### 🔧 [Guide de Développement](DEVELOPMENT.md)
Guide complet pour le développement avec le template.
- **Environnement de développement**
- **Workflow de développement**
- **Standards de code**
- **Debugging et profiling**
- **Optimisation des performances**
## 📊 Déploiement
### 🚀 [Guide de Déploiement](DEPLOYMENT.md)
Guide complet pour déployer des projets basés sur le template.
- **Configuration de production**
- **Déploiement Docker**
- **Intégration CI/CD**
- **Monitoring et observabilité**
## 🎯 Navigation Rapide
### 🚀 Démarrage Rapide
1. [Installation](INSTALLATION.md) - Installer le template
2. [Configuration](CONFIGURATION.md) - Configurer le projet
3. [Utilisation](USAGE.md) - Créer un nouveau projet
### 🔧 Développement
1. [Architecture](ARCHITECTURE.md) - Comprendre l'architecture
2. [API](API.md) - Consulter les APIs
3. [Tests](TESTING.md) - Exécuter les tests
### 📚 Documentation
1. [Index](INDEX.md) - Cet index
2. [Déploiement](DEPLOYMENT.md) - Guide de déploiement
---
## 🧪 Tests et Validation
### Tests Automatisés
```bash
# Tests du template
./scripts/test-template.sh
# Tests de configuration
./scripts/test-config.sh
# Tests de sécurité
./scripts/security-audit.sh
```
---
## 🚀 Développement
### Commandes Essentielles
```bash
# Créer un nouveau projet
./scripts/create-project.sh my-new-project
# Configurer un projet existant
./scripts/setup-project.sh
# Tests du template
./scripts/test-template.sh
```
---
## 📊 Métriques
### Fonctionnalités
- **Structure standardisée** : ✅ Complète
- **Scripts automatisés** : ✅ Disponibles
- **Configuration CI/CD** : ✅ Intégrée
- **Documentation** : ✅ Template complet
- **Tests** : ✅ Automatisés
---
**📚 Documentation complète pour 4NK_template - Template pour nouveaux projets 4NK** 🚀

View File

@ -29,13 +29,6 @@ Ce guide décrit comment utiliser et intégrer les agents de conformité (qualit
- Exécuter agents: `docker compose -f docker-compose.ci.yml up --abort-on-container-exit` - Exécuter agents: `docker compose -f docker-compose.ci.yml up --abort-on-container-exit`
- Lancer runner: `RUNNER_MODE=runner BASE_URL=... REGISTRATION_TOKEN=... docker compose -f docker-compose.ci.yml up -d` - Lancer runner: `RUNNER_MODE=runner BASE_URL=... REGISTRATION_TOKEN=... docker compose -f docker-compose.ci.yml up -d`
## 10. Intégration dans un projet existant
```bash
bash scripts/deploy/setup.sh <git_url_du_projet> [--dest DIR] [--force]
# Compléter ~/.4nk_template/.env si besoin
```
## 4. Agents disponibles ## 4. Agents disponibles
- Documentation (`documentation`): fichiers essentiels et index - Documentation (`documentation`): fichiers essentiels et index
@ -84,4 +77,3 @@ bash scripts/deploy/setup.sh <git_url_du_projet> [--dest DIR] [--force]
- Exécuter les agents avant chaque PR - Exécuter les agents avant chaque PR
- Archiver les rapports significatifs - Archiver les rapports significatifs
- Documenter les décisions dans le changelog et la doc - Documenter les décisions dans le changelog et la doc
- Si contrôle local complet: activer `CI_SKIP=true` côté dépôt pour ne pas consommer la CI; ajouter au besoin `[skip ci]` dans les commits automatisés

View File

@ -9,10 +9,6 @@
- **Runner unifié**: - **Runner unifié**:
- `RUNNER_MODE` = `agents` | `runner` | `both` (par défaut: `agents`) - `RUNNER_MODE` = `agents` | `runner` | `both` (par défaut: `agents`)
- `REGISTRATION_TOKEN` (requis si `RUNNER_MODE=runner` ou `both` sans config existante) - `REGISTRATION_TOKEN` (requis si `RUNNER_MODE=runner` ou `both` sans config existante)
- **Flag de gel CI**:
- `CI_SKIP` (défaut `true` dans le template): quand `true`, les jobs CI sont courtcircuités
- Définir à `false` pour réactiver la CI côté dépôt
- Alternative ponctuelle: commit message `[skip ci]`
## Variables denvironnement (agents) ## Variables denvironnement (agents)
@ -44,10 +40,6 @@ Variables utilisées par lentrypoint `docker/entrypoint.ci.sh`:
- `RUNNER_MODE` détermine le mode dexécution - `RUNNER_MODE` détermine le mode dexécution
- `BASE_URL` et `REGISTRATION_TOKEN` servent à lenregistrement du runner (act_runner) - `BASE_URL` et `REGISTRATION_TOKEN` servent à lenregistrement du runner (act_runner)
## Commit message — désactiver la CI ponctuellement
- Ajouter `[skip ci]` au message de commit pour ignorer un run côté Gitea Actions
## Gestion locale des secrets (~/.4nk_template/.env) ## Gestion locale des secrets (~/.4nk_template/.env)
- Modèle fourni: `scripts/env/.env.template` (clés sans valeurs) - Modèle fourni: `scripts/env/.env.template` (clés sans valeurs)

View File

@ -16,23 +16,6 @@
- Tagging: `vX.Y.Z` ou `vX.Y.Z-wip.N` - Tagging: `vX.Y.Z` ou `vX.Y.Z-wip.N`
- Notes de release (résumé, changements majeurs, impacts) - Notes de release (résumé, changements majeurs, impacts)
### Stratégies de merge (tags → branches cibles)
- Tag sur `main` (latest):
- Aligner `TEMPLATE_VERSION` et `CHANGELOG.md` sur la branche de travail
- Taguer `vX.Y.Z` puis merger la branche (PR) vers `main`
- Si flux local (CI désactivée): appliquer les agents en local avant tag/push
- Tag sur `develop` (prérelease/wip):
- Utiliser `vX.Y.Z-wip.N` pour itérer
- Merger régulièrement vers `develop`; rebase/merge planifié vers `main` pour la release finale
### Cas particuliers
- Merge de tag existant vers `main` ou `develop`:
- Créer une PR contenant lalignement version/changelog correspondant au tag
- Appliquer les agents (localement si CI neutre) puis merger
## Postlancement ## Postlancement
- Suivi issues/retours - Suivi issues/retours

View File

@ -1,13 +1,3 @@
### Installation des dépendances hôte (Debian/Ubuntu)
Exécuter en root:
```bash
sudo ./scripts/local/install_host_deps.sh
```
Ce script installe: `dos2unix`, `rsync`, `direnv`, `git`, `curl`, `vim`, `tree`, `sed`, `net-tools`, `iproute2`, `procps`, `lsof`, `psmisc`, `htop`, `dstat`, `iotop`, `strace`, `ltrace`, `tcpdump`, `nmap`, `wget`, `jq`, `gawk`, `grep`, `coreutils`, `dnsutils`, `traceroute`, `whois`, `sysstat`, `iputils-ping`, `iputils-tracepath`, ainsi que Docker (`docker-ce`, `docker-ce-cli`, `containerd.io`, `docker-buildx-plugin`, `docker-compose-plugin`).
# Guide dusage — 4NK_template (projet) # Guide dusage — 4NK_template (projet)
Ce document explique comment utiliser le template pour initier, documenter, contrôler et publier des projets dérivés, en respectant les standards qualité, sécurité et open source. Ce document explique comment utiliser le template pour initier, documenter, contrôler et publier des projets dérivés, en respectant les standards qualité, sécurité et open source.
@ -25,25 +15,6 @@ Ce document explique comment utiliser le template pour initier, documenter, cont
3) Tenir `docs/INDEX.md` et `CHANGELOG.md` à jour 3) Tenir `docs/INDEX.md` et `CHANGELOG.md` à jour
4) Activer les workflows CI et vérifier `release-guard`/`security-audit` 4) Activer les workflows CI et vérifier `release-guard`/`security-audit`
## 2.1 Intégrer 4NK_template dans un projet existant
```bash
# Depuis le dépôt 4NK_template
bash scripts/deploy/setup.sh <git_url_du_projet> [--dest DIR] [--force]
# Compléter ensuite ~/.4nk_template/.env si nécessaire (OPENAI_*, BASE_URL, RELEASE_TOKEN)
```
### Intégration via Docker (recommandé)
```bash
# Build limage unifiée
docker compose -f docker-compose.ci.yml build
# Appliquer le template depuis le conteneur (monter le repo projet sur /host)
docker run --rm -v "$PWD":/work -v "/chemin/vers/projet":/host 4nk-template-ci:latest \
bash -lc "/work/scripts/deploy/setup.sh file:///host/.git --dest /host"
```
## 3. Documentation ## 3. Documentation
- Utiliser les squelettes de `docs/templates/**` comme base - Utiliser les squelettes de `docs/templates/**` comme base
@ -59,74 +30,8 @@ docker run --rm -v "$PWD":/work -v "/chemin/vers/projet":/host 4nk-template-ci:l
- Variables utiles: `RUNNER_MODE`, `BASE_URL`, `REGISTRATION_TOKEN` - Variables utiles: `RUNNER_MODE`, `BASE_URL`, `REGISTRATION_TOKEN`
- Script helper: `scripts/dev/run_project_ci.sh` - Script helper: `scripts/dev/run_project_ci.sh`
- Autocorrections: `AUTO_FIX=1` pour créer la structure de tests et des squelettes docs - Autocorrections: `AUTO_FIX=1` pour créer la structure de tests et des squelettes docs
## 5. Remplacer la CI par une exécution locale (recommandé)
- CI neutre par défaut: `CI_SKIP=true` dans le workflow; réactivez en le passant à `false` côté dépôt.
- Commits: contrôles rapides avant commit
```bash
npx -y markdownlint-cli "**/*.md" --ignore "archive/**"
AUTO_FIX=1 SCOPE=changed scripts/agents/run.sh
# Ajoutez [skip ci] dans le message de commit pour éviter les runs distants
```
- Push: contrôles complets prépush
```bash
AUTO_FIX=1 SCOPE=all scripts/agents/run.sh
bash scripts/security/audit.sh || true
# Si outillage présent (exemples): cargo check / go vet / npx eslint / tsc --noEmit / ruff…
bash scripts/release/guard.sh || true
```
- Release locale (puis push tag)
```bash
echo "vYYYY.MM.P" > TEMPLATE_VERSION
git add TEMPLATE_VERSION CHANGELOG.md
git commit -m "[skip ci] chore(release): vYYYY.MM.P"
git tag -a vYYYY.MM.P -m "release: vYYYY.MM.P (latest)"
git push && git push origin vYYYY.MM.P
```
### Hooks conseillés (agents centralisés via 4NK_template)
`.git/hooks/pre-commit`:
```bash
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(git rev-parse --show-toplevel)"
TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)"
mkdir -p "${PROJECT_DIR}/tests/reports/agents"
"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents"
```
`.git/hooks/pre-push`:
```bash
#!/usr/bin/env bash
set -euo pipefail
PROJECT_DIR="$(git rev-parse --show-toplevel)"
TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)"
mkdir -p "${PROJECT_DIR}/tests/reports/agents"
"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents"
if [ -f "${PROJECT_DIR}/scripts/security/audit.sh" ]; then (cd "${PROJECT_DIR}" && bash scripts/security/audit.sh) || true; fi
if [ -f "${PROJECT_DIR}/scripts/release/guard.sh" ]; then (cd "${PROJECT_DIR}" && bash scripts/release/guard.sh) || true; fi
```
Ou installez-les automatiquement (les hooks fournis appellent déjà le runner centralisé):
```bash
bash scripts/local/install_hooks.sh
```
- Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement` - Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement`
### Script de merge local (main/develop)
```bash
# Merge de la branche courante vers main (valide localement avant)
bash scripts/local/merge_branch.sh main
# Merge vers develop
bash scripts/local/merge_branch.sh develop
```
## 5. Qualité et CI ## 5. Qualité et CI
- Jobs attendus: qualité, tests (catégories pertinentes), documentation, securityaudit, bashrequired, releaseguard - Jobs attendus: qualité, tests (catégories pertinentes), documentation, securityaudit, bashrequired, releaseguard

8
docs/templates/API.md vendored Normal file
View File

@ -0,0 +1,8 @@
# Référence API — Template
- Vue densemble
- Authentification/permissions
- Endpoints par domaine (schémas, invariants)
- Codes derreur
- Limites et quotas
- Sécurité et conformité

8
docs/templates/ARCHITECTURE.md vendored Normal file
View File

@ -0,0 +1,8 @@
# Architecture — Template
- Contexte et objectifs
- Découpage en couches (UI, services, données)
- Flux principaux
- Observabilité
- CI/CD
- Contraintes et SLA

6
docs/templates/CONFIGURATION.md vendored Normal file
View File

@ -0,0 +1,6 @@
# Configuration — Template
- Variables denvironnement (nom, type, défaut, portée)
- Fichiers de configuration (format, validation)
- Réseau et sécurité (ports, TLS, auth)
- Observabilité (logs, métriques, traces)

12
docs/templates/INDEX.md vendored Normal file
View File

@ -0,0 +1,12 @@
# Index — Templates de documentation (pour projets dérivés)
Utilisez ces squelettes pour démarrer la documentation de votre projet.
- API.md — squelette de référence API
- ARCHITECTURE.md — squelette darchitecture
- CONFIGURATION.md — squelette de configuration
- USAGE.md — squelette dusage
- TESTING.md — squelette de stratégie de tests
- SECURITY_AUDIT.md — squelette daudit sécurité
- RELEASE_PLAN.md — squelette de plan de release
- OPEN_SOURCE_CHECKLIST.md — squelette de checklist open source

View File

@ -0,0 +1,7 @@
# Checklist open source — Template
- Gouvernance: LICENSE, CONTRIBUTING, CODE_OF_CONDUCT
- CI/CD: workflows, tests, security-audit, release-guard
- Documentation: README, INDEX, guides essentiels
- Sécurité: secrets, permissions, audit
- Publication: tag, changelog, release notes

29
docs/templates/README.md vendored Normal file
View File

@ -0,0 +1,29 @@
# README — Template de projet
## Présentation
Décrivez brièvement lobjectif du projet, son périmètre et ses utilisateurs cibles.
## Démarrage rapide
- Prérequis (langages/outils)
- Étapes dinstallation
- Commandes de démarrage
## Documentation
- Index: `docs/INDEX.md`
- Architecture: `docs/ARCHITECTURE.md`
- Configuration: `docs/CONFIGURATION.md`
- Tests: `docs/TESTING.md`
- Sécurité: `docs/SECURITY_AUDIT.md`
- Déploiement: `docs/DEPLOYMENT.md`
## Contribution
- GUIDE: `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`
- Processus de PR et revues
## Licence
- Indiquez la licence choisie (MIT/Apache-2.0/GPL)

7
docs/templates/RELEASE_PLAN.md vendored Normal file
View File

@ -0,0 +1,7 @@
# Plan de release — Template
- Vue densemble, objectifs, date cible
- Préparation (docs/CI/tests/sécurité)
- Communication (annonces, canaux)
- Lancement (checklist, tagging)
- Postlancement (support, retours)

7
docs/templates/SECURITY_AUDIT.md vendored Normal file
View File

@ -0,0 +1,7 @@
# Audit de sécurité — Template
- Menaces et surfaces dattaque
- Contrôles préventifs et détectifs
- Gestion des secrets
- Politique de dépendances
- Vérifications CI (security-audit)

6
docs/templates/TESTING.md vendored Normal file
View File

@ -0,0 +1,6 @@
# Tests — Template
- Pyramide: unit, integration, connectivity, external, performance
- Structure des répertoires
- Exécution et rapports
- Intégration CI

7
docs/templates/USAGE.md vendored Normal file
View File

@ -0,0 +1,7 @@
# Usage — Template
- Démarrage quotidien
- Opérations courantes
- Tests (référence vers TESTING.md)
- Sécurité (référence vers SECURITY_AUDIT.md)
- Déploiement (référence vers DEPLOYMENT.md)

0
scripts/agents/ai_prompt.sh Executable file → Normal file
View File

2
scripts/agents/common.sh Executable file → Normal file
View File

@ -6,7 +6,7 @@ export SCOPE="${SCOPE:-all}"
list_changed_paths() { list_changed_paths() {
# Renvoie la liste des chemins modifiés (HEAD~1..HEAD), ou vide si non dispo # Renvoie la liste des chemins modifiés (HEAD~1..HEAD), ou vide si non dispo
git -C "${TARGET_DIR:-.}" diff --name-only HEAD~1..HEAD 2>/dev/null || true git diff --name-only HEAD~1..HEAD 2>/dev/null || true
} }
is_path_changed() { is_path_changed() {

0
scripts/agents/compilation_agent.sh Executable file → Normal file
View File

0
scripts/agents/dependances_agent.sh Executable file → Normal file
View File

0
scripts/agents/deployment_agent.sh Executable file → Normal file
View File

0
scripts/agents/derogations_locales_agent.sh Executable file → Normal file
View File

0
scripts/agents/documentation_agent.sh Executable file → Normal file
View File

2
scripts/agents/documents_bureautiques_agent.sh Executable file → Normal file
View File

@ -10,7 +10,7 @@ echo "# Agent Documents bureautiques" > "$SUMMARY_FILE"
echo >> "$SUMMARY_FILE" echo >> "$SUMMARY_FILE"
pushd "$TARGET_DIR" >/dev/null pushd "$TARGET_DIR" >/dev/null
docsx=$(git -C "$TARGET_DIR" ls-files '*.docx' 2>/dev/null || true) docsx=$(git ls-files '*.docx' 2>/dev/null || true)
if [[ -z "$docsx" ]]; then if [[ -z "$docsx" ]]; then
echo "- Aucun fichier .docx détecté." >> "$SUMMARY_FILE" echo "- Aucun fichier .docx détecté." >> "$SUMMARY_FILE"
else else

2
scripts/agents/donnees_csv_agent.sh Executable file → Normal file
View File

@ -10,7 +10,7 @@ echo "# Agent Données CSV" > "$SUMMARY_FILE"
echo >> "$SUMMARY_FILE" echo >> "$SUMMARY_FILE"
pushd "$TARGET_DIR" >/dev/null pushd "$TARGET_DIR" >/dev/null
csvs=$(git -C "$TARGET_DIR" ls-files '*.csv' 2>/dev/null || true) csvs=$(git ls-files '*.csv' 2>/dev/null || true)
if [[ -z "$csvs" ]]; then if [[ -z "$csvs" ]]; then
echo "- Aucun CSV détecté dans le dépôt." >> "$SUMMARY_FILE" echo "- Aucun CSV détecté dans le dépôt." >> "$SUMMARY_FILE"
else else

0
scripts/agents/fondation_agent.sh Executable file → Normal file
View File

0
scripts/agents/frontend_agent.sh Executable file → Normal file
View File

0
scripts/agents/gitea_agent.sh Executable file → Normal file
View File

8
scripts/agents/lang_detect.sh Executable file → Normal file
View File

@ -12,7 +12,7 @@ export HAS_NODE=0 HAS_TYPESCRIPT=0 HAS_GO=0 HAS_RUST=0 HAS_PYTHON=0 HAS_SHELL_BA
# Node / TypeScript # Node / TypeScript
if has_file package.json; then HAS_NODE=1; fi if has_file package.json; then HAS_NODE=1; fi
if has_file tsconfig.json || git -C "${TARGET_DIR:-.}" ls-files '*.ts' | grep -q . 2>/dev/null; then HAS_TYPESCRIPT=1; fi if has_file tsconfig.json || git ls-files '*.ts' | grep -q . 2>/dev/null; then HAS_TYPESCRIPT=1; fi
# Go # Go
if has_file go.mod || has_file go.work; then HAS_GO=1; fi if has_file go.mod || has_file go.work; then HAS_GO=1; fi
@ -21,13 +21,13 @@ if has_file go.mod || has_file go.work; then HAS_GO=1; fi
if has_file Cargo.toml; then HAS_RUST=1; fi if has_file Cargo.toml; then HAS_RUST=1; fi
# Python # Python
if has_file pyproject.toml || has_file requirements.txt || git -C "${TARGET_DIR:-.}" ls-files '*.py' | grep -q . 2>/dev/null; then HAS_PYTHON=1; fi if has_file pyproject.toml || has_file requirements.txt || git ls-files '*.py' | grep -q . 2>/dev/null; then HAS_PYTHON=1; fi
# Shell (bash) # Shell (bash)
if git -C "${TARGET_DIR:-.}" ls-files '*.sh' | grep -q . 2>/dev/null; then HAS_SHELL_BASH=1; fi if git ls-files '*.sh' | grep -q . 2>/dev/null; then HAS_SHELL_BASH=1; fi
# PowerShell (pwsh) # PowerShell (pwsh)
if git -C "${TARGET_DIR:-.}" ls-files '*.ps1' | grep -q . 2>/dev/null; then HAS_SHELL_PWSH=1; fi if git ls-files '*.ps1' | grep -q . 2>/dev/null; then HAS_SHELL_PWSH=1; fi
# Exposer aussi l'état des outils lorsquils existent # Exposer aussi l'état des outils lorsquils existent
export HAS_NPM=0 HAS_NPX=0 HAS_GO_BIN=0 HAS_CARGO=0 HAS_PYTHON_BIN=0 HAS_PIP=0 HAS_SHELLCHECK=0 HAS_PWSH=0 export HAS_NPM=0 HAS_NPX=0 HAS_GO_BIN=0 HAS_CARGO=0 HAS_PYTHON_BIN=0 HAS_PIP=0 HAS_SHELLCHECK=0 HAS_PWSH=0

0
scripts/agents/open_source_agent.sh Executable file → Normal file
View File

0
scripts/agents/performance_agent.sh Executable file → Normal file
View File

0
scripts/agents/qualite_formelle.sh Executable file → Normal file
View File

2
scripts/agents/quality_tech.sh Executable file → Normal file
View File

@ -75,7 +75,7 @@ if [[ "$HAS_PYTHON" -eq 1 ]]; then
fi fi
if [[ "$HAS_SHELL_BASH" -eq 1 ]]; then if [[ "$HAS_SHELL_BASH" -eq 1 ]]; then
if [[ "$HAS_SHELLCHECK" -eq 1 ]]; then if [[ "$HAS_SHELLCHECK" -eq 1 ]]; then
(git -C "$TARGET_DIR" ls-files '*.sh' | xargs -r shellcheck >/dev/null 2>&1 && echo "- Shell: shellcheck OK" >> "$SUMMARY_FILE") || echo "- Shell: shellcheck a signalé des problèmes" >> "$SUMMARY_FILE" (git ls-files '*.sh' | xargs -r shellcheck >/dev/null 2>&1 && echo "- Shell: shellcheck OK" >> "$SUMMARY_FILE") || echo "- Shell: shellcheck a signalé des problèmes" >> "$SUMMARY_FILE"
else else
echo "- Shell: shellcheck non disponible" >> "$SUMMARY_FILE" echo "- Shell: shellcheck non disponible" >> "$SUMMARY_FILE"
fi fi

0
scripts/agents/resolution_agent.sh Executable file → Normal file
View File

167
scripts/agents/run.sh Executable file → Normal file
View File

@ -12,105 +12,98 @@ fi
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
TARGET_DIR="${1:-.}" TARGET_DIR="${1:-.}"
OUTPUT_DIR="${2:-tests/reports/agents}" OUTPUT_DIR="${2:-tests/reports/agents}"
AGENT="${3:-all}"
mkdir -p "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR"
# Capture état avant
pushd "$TARGET_DIR" >/dev/null || true
before_status_file="$OUTPUT_DIR/.before_status.txt"
after_status_file="$OUTPUT_DIR/.after_status.txt"
changes_report="$OUTPUT_DIR/changes_applied.md"
(git -C "$TARGET_DIR" status --porcelain || true) > "$before_status_file" 2>/dev/null || true
popd >/dev/null || true
usage() { usage() {
cat <<USAGE cat <<USAGE
Usage: $0 [target_dir] [output_dir] [agent] Usage: $0 [target_dir] [output_dir] [agent]
Agents: fondation, structure, documentation, donnees-csv, documents-bureautiques, Agents:
tests, performance, qualite-technique/quality-tech, dependances, compilation, Fondamentaux: fondation, structure
resolution, ssh-scripts, frontend, open-source, gitea, versionnage, Documentation: documentation, donnees-csv, documents-bureautiques
securite, deploiement, sync-template, derogations-locales, runner, all Tests: tests, performance
Techniques: qualite-technique, quality-tech, dependances, compilation, resolution, ssh-scripts
Frontend: frontend
Open source et CI: open-source, gitea, versionnage, securite, deploiement
Synchronisation: sync-template, derogations-locales
Runner: runne
all
Par défaut: all
USAGE USAGE
} }
run_agent() { AGENT="${3:-all}"
local script_name="$1"
"$DIR/${script_name}" "$TARGET_DIR" "$OUTPUT_DIR" || true
}
case "$AGENT" in case "$AGENT" in
runner) run_agent "runner_agent.sh" ;; runner)
quality-tech|qualite-technique) run_agent "quality_tech.sh" ;; "$DIR/runner_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
qualite-formelle|fondation) "$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true; "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true ;; quality-tech|qualite-technique)
structure) run_agent "structure_agent.sh" ;; "$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
tests) run_agent "tests_agent.sh" ;; qualite-formelle|fondation)
performance) run_agent "performance_agent.sh" ;; "$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR" || "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
documentation) run_agent "documentation_agent.sh" ;; structure)
donnees-csv) run_agent "donnees_csv_agent.sh" ;; "$DIR/structure_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
documents-bureautiques)run_agent "documents_bureautiques_agent.sh" ;; tests)
securite) run_agent "security_agent.sh" ;; "$DIR/tests_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
deploiement) run_agent "deployment_agent.sh" ;; performance)
dependances) run_agent "dependances_agent.sh" ;; "$DIR/performance_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
compilation) run_agent "compilation_agent.sh" ;; documentation)
resolution) run_agent "resolution_agent.sh" ;; "$DIR/documentation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
ssh-scripts) run_agent "ssh_scripts_agent.sh" ;; donnees-csv)
frontend) run_agent "frontend_agent.sh" ;; "$DIR/donnees_csv_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
open-source) run_agent "open_source_agent.sh" ;; documents-bureautiques)
gitea) run_agent "gitea_agent.sh" ;; "$DIR/documents_bureautiques_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
versionnage) run_agent "versionnage_agent.sh" ;; securite)
sync-template) run_agent "sync_template_agent.sh" ;; "$DIR/security_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
derogations-locales) run_agent "derogations_locales_agent.sh" ;; deploiement)
"$DIR/deployment_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
dependances)
"$DIR/dependances_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
compilation)
"$DIR/compilation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
resolution)
"$DIR/resolution_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
ssh-scripts)
"$DIR/ssh_scripts_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
frontend)
"$DIR/frontend_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
open-source)
"$DIR/open_source_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
gitea)
"$DIR/gitea_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
versionnage)
"$DIR/versionnage_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
sync-template)
"$DIR/sync_template_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
derogations-locales)
"$DIR/derogations_locales_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
all) all)
for a in \ "$DIR/runner_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
runner_agent.sh quality_tech.sh qualite_formelle.sh fondation_agent.sh structure_agent.sh \ "$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR"
tests_agent.sh performance_agent.sh documentation_agent.sh donnees_csv_agent.sh \ "$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR"
documents_bureautiques_agent.sh security_agent.sh deployment_agent.sh dependances_agent.sh \ "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
compilation_agent.sh resolution_agent.sh ssh_scripts_agent.sh frontend_agent.sh \ "$DIR/structure_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
open_source_agent.sh gitea_agent.sh versionnage_agent.sh sync_template_agent.sh derogations_locales_agent.sh; do "$DIR/tests_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
"$DIR/$a" "$TARGET_DIR" "$OUTPUT_DIR" || true "$DIR/performance_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
done ;; "$DIR/documentation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
-h|--help) usage; exit 0 ;; "$DIR/donnees_csv_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
*) echo "Agent inconnu: $AGENT" >&2; usage; exit 2 ;; "$DIR/documents_bureautiques_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/security_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
"$DIR/deployment_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
"$DIR/dependances_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/compilation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/resolution_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/ssh_scripts_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/frontend_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/open_source_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/gitea_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/versionnage_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/sync_template_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/derogations_locales_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true ;;
-h|--help)
usage; exit 0 ;;
*)
echo "Agent inconnu: $AGENT" >&2; usage; exit 2 ;;
esac esac
# Capture état après et rapport
pushd "$TARGET_DIR" >/dev/null || true
(git -C "$TARGET_DIR" status --porcelain || true) > "$after_status_file" 2>/dev/null || true
{
echo "# Modifications appliquées par les agents"
echo
echo "## Fichiers modifiés/non suivis (avant)"
if [[ -s "$before_status_file" ]]; then sed "s/^/ /" "$before_status_file"; else echo " (aucun)"; fi
echo
echo "## Fichiers modifiés/non suivis (après)"
if [[ -s "$after_status_file" ]]; then sed "s/^/ /" "$after_status_file"; else echo " (aucun)"; fi
echo
echo "## Diff par rapport au dernier commit"
if git -C "$TARGET_DIR" rev-parse --is-inside-work-tree >/dev/null 2>&1; then
git -C "$TARGET_DIR" diff --name-status || true
else
echo "(pas un dépôt git, diff ignoré)"
fi
} > "$changes_report"
popd >/dev/null || true
echo "Agents terminés → $OUTPUT_DIR" echo "Agents terminés → $OUTPUT_DIR"
# Affichage des rapports générés
echo
echo "=== RAPPORTS GÉNÉRÉS ==="
if [[ -d "$OUTPUT_DIR" ]]; then
for report in "$OUTPUT_DIR"/*.md; do
if [[ -f "$report" ]]; then
echo
echo "📄 $(basename "$report"):"
echo "----------------------------------------"
cat "$report"
echo "----------------------------------------"
fi
done
else
echo "Aucun rapport généré dans $OUTPUT_DIR"
fi
echo "=== FIN DES RAPPORTS ==="

0
scripts/agents/runner_agent.sh Executable file → Normal file
View File

0
scripts/agents/security_agent.sh Executable file → Normal file
View File

0
scripts/agents/ssh_scripts_agent.sh Executable file → Normal file
View File

0
scripts/agents/structure_agent.sh Executable file → Normal file
View File

0
scripts/agents/sync_template_agent.sh Executable file → Normal file
View File

0
scripts/agents/tests_agent.sh Executable file → Normal file
View File

0
scripts/agents/versionnage_agent.sh Executable file → Normal file
View File

0
scripts/checks/version_alignment.sh Executable file → Normal file
View File

0
scripts/deploy/setup.sh Executable file → Normal file
View File

0
scripts/dev/run_container.sh Executable file → Normal file
View File

0
scripts/dev/run_project_ci.sh Executable file → Normal file
View File

0
scripts/env/ensure_env.sh vendored Executable file → Normal file
View File

View File

@ -1,19 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"/..
HOOKS_DIR="$REPO_ROOT/.git/hooks"
mkdir -p "$HOOKS_DIR"
install_hook() {
local name="$1" src="$2"
cp -f "$src" "$HOOKS_DIR/$name"
chmod +x "$HOOKS_DIR/$name"
echo "Installed hook: $name"
}
# Hooks qui délèguent aux agents via l'image Docker du template sur le projet courant
install_hook pre-commit "$REPO_ROOT/scripts/local/precommit.sh"
install_hook pre-push "$REPO_ROOT/scripts/local/prepush.sh"
echo "Hooks installés (mode agents via 4NK_template)."

View File

@ -1,22 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Installation des dépendances hôte nécessaires aux projets 4NK
# Usage: sudo ./scripts/local/install_host_deps.sh
if [[ $EUID -ne 0 ]]; then
echo "Veuillez exécuter ce script avec sudo." >&2
exit 1
fi
# Base outils CLI utiles
apt update -y
apt install -y dos2unix rsync direnv git curl vim tree sed net-tools iproute2 procps \
lsof psmisc tree htop dstat iotop strace ltrace tcpdump nmap curl wget jq sed gawk \
grep coreutils dnsutils traceroute whois sysstat iputils-ping iputils-tracepath
# Docker (requires docker repository préconfiguré)
apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
echo "Dépendances hôte installées."

View File

@ -1,25 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
TARGET_BRANCH="${1:-main}"
SOURCE_BRANCH="${2:-}"
if [[ -z "$SOURCE_BRANCH" ]]; then
SOURCE_BRANCH="$(git rev-parse --abbrev-ref HEAD)"
fi
if [[ "$SOURCE_BRANCH" == "$TARGET_BRANCH" ]]; then
echo "Déjà sur $TARGET_BRANCH"; exit 0
fi
# Valider localement avant merge
AUTO_FIX="${AUTO_FIX:-1}" SCOPE="${SCOPE:-all}" scripts/agents/run.sh || true
if [ -f scripts/security/audit.sh ]; then bash scripts/security/audit.sh || true; fi
git fetch origin --prune
git checkout "$TARGET_BRANCH"
git pull --ff-only origin "$TARGET_BRANCH" || true
git merge --no-ff "$SOURCE_BRANCH" -m "[skip ci] merge: $SOURCE_BRANCH -> $TARGET_BRANCH"
git push origin "$TARGET_BRANCH"
echo "Merge effectué: $SOURCE_BRANCH$TARGET_BRANCH"

View File

@ -1,11 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Exécuter les agents depuis l'image Docker de 4NK_template sur le projet courant
PROJECT_DIR="$(git rev-parse --show-toplevel)"
TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)"
mkdir -p "${PROJECT_DIR}/tests/reports/agents"
"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents"
echo "[pre-commit] OK (agents via 4NK_template)"

View File

@ -1,21 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Exécuter les agents depuis l'image Docker de 4NK_template sur le projet courant
PROJECT_DIR="$(git rev-parse --show-toplevel)"
TEMPLATE_DIR="$(cd "${PROJECT_DIR}/../4NK_template" && pwd)"
mkdir -p "${PROJECT_DIR}/tests/reports/agents"
"${TEMPLATE_DIR}/scripts/local/run_agents_for_project.sh" "${PROJECT_DIR}" "tests/reports/agents"
# Audit sécurité (best effort) dans le contexte du projet
if [ -f "${PROJECT_DIR}/scripts/security/audit.sh" ]; then
(cd "${PROJECT_DIR}" && bash scripts/security/audit.sh) || true
fi
# Release guard (dry-run logique) dans le contexte du projet
if [ -f "${PROJECT_DIR}/scripts/release/guard.sh" ]; then
(cd "${PROJECT_DIR}" && bash scripts/release/guard.sh) || true
fi
echo "[pre-push] OK (agents via 4NK_template)"

View File

@ -1,20 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
VERSION="${1:-}"
if [[ -z "$VERSION" ]]; then
echo "Usage: $0 vYYYY.MM.P" >&2
exit 2
fi
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR/.."
echo "$VERSION" > TEMPLATE_VERSION
git add TEMPLATE_VERSION CHANGELOG.md 2>/dev/null || true
git commit -m "[skip ci] chore(release): $VERSION" || true
git tag -a "$VERSION" -m "release: $VERSION (latest)"
git push || true
git push origin "$VERSION"
echo "Release locale préparée: $VERSION"

View File

@ -1,51 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
# Script pour lancer les agents de 4NK_template sur un projet externe
# Usage: ./run_agents_for_project.sh [project_path] [output_dir]
PROJECT_PATH="${1:-.}"
OUTPUT_DIR="${2:-tests/reports/agents}"
TEMPLATE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
MODULE_LAST_IMAGE_FILE="$(cd "$TEMPLATE_DIR/.." && pwd)/modules/4NK_template/.last_image"
if [[ ! -d "$PROJECT_PATH" ]]; then
echo "Erreur: Le projet '$PROJECT_PATH' n'existe pas" >&2
exit 1
fi
mkdir -p "$PROJECT_PATH/$OUTPUT_DIR"
echo "=== Lancement des agents 4NK_template sur: $PROJECT_PATH ==="
if ! command -v docker >/dev/null 2>&1; then
echo "Docker requis pour exécuter les agents via conteneur." >&2
exit 2
fi
# Si une image du module existe, l'utiliser en priorité
if [[ -f "$MODULE_LAST_IMAGE_FILE" ]]; then
IMAGE_NAME="$(cat "$MODULE_LAST_IMAGE_FILE" | tr -d '\r\n')"
echo "Utilisation de l'image du module: $IMAGE_NAME"
# Préparer montage du fichier d'env si présent
ENV_MOUNT=""
if [[ -f "$HOME/.4nk_template/.env" ]]; then
ENV_MOUNT="-v $HOME/.4nk_template/.env:/root/.4nk_template/.env:ro"
fi
# Lancer le conteneur en utilisant l'ENTRYPOINT qui configure safe.directory
docker run --rm \
-e RUNNER_MODE=agents \
-e TARGET_DIR=/work \
-e OUTPUT_DIR=/work/$OUTPUT_DIR \
-v "$(realpath "$PROJECT_PATH"):/work" \
$ENV_MOUNT \
"$IMAGE_NAME" || true
else
echo "Aucune image de module détectée, fallback docker compose dans 4NK_template"
cd "$TEMPLATE_DIR"
docker compose -f docker-compose.ci.yml build
RUNNER_MODE="agents" TARGET_DIR="/work" OUTPUT_DIR="/work/$OUTPUT_DIR" \
docker compose -f docker-compose.ci.yml run --rm project-ci || true
fi
echo "=== Agents terminés → $PROJECT_PATH/$OUTPUT_DIR ==="

0
scripts/release/guard.sh Executable file → Normal file
View File

23
scripts/scripts/auto-ssh-push.sh Executable file → Normal file
View File

@ -26,23 +26,8 @@ fi
echo "✅ Authentification SSH réussie" echo "✅ Authentification SSH réussie"
# Fonction pour push automatique # Fonction pour push automatique
get_current_branch() {
# Détecte la branche courante, compatible anciennes versions de git
local br
br="$(git rev-parse --abbrev-ref HEAD 2>/dev/null || true)"
if [ -z "$br" ] || [ "$br" = "HEAD" ]; then
br="$(git symbolic-ref --short -q HEAD 2>/dev/null || true)"
fi
if [ -z "$br" ]; then
# dernier recours: parser la sortie de "git branch"
br="$(git branch 2>/dev/null | sed -n 's/^* //p' | head -n1)"
fi
echo "$br"
}
auto_push() { auto_push() {
local branch local branch=${1:-$(git branch --show-current)}
branch=${1:-$(get_current_branch)}
local commit_message=${2:-"Auto-commit $(date '+%Y-%m-%d %H:%M:%S')"} local commit_message=${2:-"Auto-commit $(date '+%Y-%m-%d %H:%M:%S')"}
echo "🚀 Push automatique sur la branche: $branch" echo "🚀 Push automatique sur la branche: $branch"
@ -69,7 +54,7 @@ auto_push() {
# Fonction pour push avec message personnalisé # Fonction pour push avec message personnalisé
push_with_message() { push_with_message() {
local message="$1" local message="$1"
local branch=${2:-$(get_current_branch)} local branch=${2:-$(git branch --show-current)}
echo "💬 Push avec message: $message" echo "💬 Push avec message: $message"
auto_push "$branch" "$message" auto_push "$branch" "$message"
@ -77,7 +62,7 @@ push_with_message() {
# Fonction pour push rapide (sans message) # Fonction pour push rapide (sans message)
quick_push() { quick_push() {
local branch=${1:-$(get_current_branch)} local branch=${1:-$(git branch --show-current)}
auto_push "$branch" auto_push "$branch"
} }
@ -92,7 +77,7 @@ push_branch() {
# Fonction pour push et merge vers main # Fonction pour push et merge vers main
push_and_merge() { push_and_merge() {
local source_branch=${1:-$(get_current_branch)} local source_branch=${1:-$(git branch --show-current)}
local target_branch=${2:-main} local target_branch=${2:-main}
echo "🔄 Push et merge $source_branch -> $target_branch" echo "🔄 Push et merge $source_branch -> $target_branch"

4
scripts/scripts/init-ssh-env.sh Executable file → Normal file
View File

@ -44,8 +44,8 @@ fi
# 4. Alias Git # 4. Alias Git
print_status "Configuration des alias Git..." print_status "Configuration des alias Git..."
git config --global alias.ssh-push '!f() { git add . && git commit -m "${1:-Auto-commit $(date)}" && git push origin $(git rev-parse --abbrev-ref HEAD); }; f' git config --global alias.ssh-push '!f() { git add . && git commit -m "${1:-Auto-commit $(date)}" && git push origin $(git branch --show-current); }; f'
git config --global alias.quick-push '!f() { git add . && git commit -m "Update $(date)" && git push origin $(git rev-parse --abbrev-ref HEAD); }; f' git config --global alias.quick-push '!f() { git add . && git commit -m "Update $(date)" && git push origin $(git branch --show-current); }; f'
print_success "Alias Git configurés" print_success "Alias Git configurés"
# 5. Rendu exécutable des scripts si chemin standard # 5. Rendu exécutable des scripts si chemin standard

0
scripts/scripts/setup-ssh-ci.sh Executable file → Normal file
View File

0
scripts/security/audit.sh Executable file → Normal file
View File