Compare commits
39 Commits
v2025.08.1
...
main
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6ced5d2923 | ||
![]() |
7f8dc0a926 | ||
![]() |
4c47efc9b4 | ||
![]() |
e43abef18f | ||
![]() |
043434bfe8 | ||
![]() |
57c047e76d | ||
![]() |
46d5d20c7d | ||
![]() |
99e1e0bda7 | ||
![]() |
948b11793a | ||
![]() |
25453b045e | ||
![]() |
21e4f76445 | ||
![]() |
5674437bc4 | ||
![]() |
1add88bcbb | ||
27297dbb77 | |||
01926eb9c0 | |||
5bf8bd280c | |||
a9f4ce0485 | |||
ee48b95f54 | |||
86b01563fc | |||
0783d30c10 | |||
dc92b4082a | |||
a624d091a0 | |||
86ad8eb62a | |||
68ce80c2cf | |||
270ad3488c | |||
8713c7f971 | |||
7f8e36f69e | |||
5210126c82 | |||
d02901689c | |||
7aee843d9d | |||
fb1968f610 | |||
dfa25324e1 | |||
e1b89fa6ed | |||
97c093724e | |||
7d481a7c5e | |||
c96b09a308 | |||
54772d1151 | |||
be5a5200d0 | |||
c29e061c34 |
@ -1,3 +1,8 @@
|
||||
# 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
|
||||
---
|
||||
|
@ -25,6 +25,9 @@ Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur
|
||||
- Erreur bloquante si un path requis n’existe pas après sync.
|
||||
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
|
||||
|
||||
[note]
|
||||
Les validations CI peuvent être remplacées par l’exé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]
|
||||
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.
|
||||
# Synchronisation de template (4NK)
|
||||
@ -49,5 +52,8 @@ Tous les projets issus de 4NK_project_template. Contrôle de l’alignement sur
|
||||
- Erreur bloquante si un path requis n’existe pas après sync.
|
||||
- Erreur bloquante si tests/CI signalent des scripts non exécutables ou des fichiers sensibles.
|
||||
|
||||
[note]
|
||||
Les validations CI peuvent être remplacées par l’exé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]
|
||||
- .4nk-sync.yml, TEMPLATE_VERSION, .cursor/**, .gitea/**, AGENTS.md, scripts/**, docs/SSH_UPDATE.md, CHANGELOG.md.
|
||||
|
@ -21,3 +21,4 @@ tests/reports/
|
||||
!/.cursor
|
||||
!/AGENTS.md
|
||||
|
||||
|
||||
|
@ -11,12 +11,14 @@ on:
|
||||
env:
|
||||
RUST_VERSION: '1.70'
|
||||
DOCKER_COMPOSE_VERSION: '2.20.0'
|
||||
CI_SKIP: 'true'
|
||||
|
||||
jobs:
|
||||
# Job de vérification du code
|
||||
code-quality:
|
||||
name: Code Quality
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@ -64,7 +66,8 @@ jobs:
|
||||
# Job de tests unitaires
|
||||
unit-tests:
|
||||
name: Unit Tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@ -100,7 +103,8 @@ jobs:
|
||||
# Job de tests d'intégration
|
||||
integration-tests:
|
||||
name: Integration Tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
services:
|
||||
docker:
|
||||
@ -147,7 +151,8 @@ jobs:
|
||||
# Job de tests de sécurité
|
||||
security-tests:
|
||||
name: Security Tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@ -184,7 +189,8 @@ jobs:
|
||||
# Job de build et test Docker
|
||||
docker-build:
|
||||
name: Docker Build & Test
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
services:
|
||||
docker:
|
||||
@ -227,7 +233,8 @@ jobs:
|
||||
# Job de tests de documentation
|
||||
documentation-tests:
|
||||
name: Documentation Tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@ -242,7 +249,8 @@ jobs:
|
||||
|
||||
markdownlint:
|
||||
name: Markdown Lint
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -272,7 +280,8 @@ jobs:
|
||||
|
||||
bash-required:
|
||||
name: Bash Requirement
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -289,7 +298,8 @@ jobs:
|
||||
|
||||
agents-smoke:
|
||||
name: Agents Smoke (no AI)
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -300,8 +310,7 @@ jobs:
|
||||
env:
|
||||
OPENAI_API_KEY: ""
|
||||
run: |
|
||||
mkdir -p tests/reports/agents
|
||||
scripts/agents/run.sh . tests/reports/agents all
|
||||
scripts/agents/run.sh
|
||||
- name: Upload agents reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
@ -310,8 +319,8 @@ jobs:
|
||||
|
||||
openia-agents:
|
||||
name: Agents with OpenIA
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ secrets.OPENAI_API_KEY != '' }}
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' && secrets.OPENAI_API_KEY != '' }}
|
||||
env:
|
||||
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
|
||||
OPENAI_MODEL: ${{ vars.OPENAI_MODEL }}
|
||||
@ -325,8 +334,7 @@ jobs:
|
||||
chmod +x scripts/agents/*.sh || true
|
||||
- name: Run agents with AI
|
||||
run: |
|
||||
mkdir -p tests/reports/agents
|
||||
scripts/agents/run.sh . tests/reports/agents all
|
||||
scripts/agents/run.sh
|
||||
- name: Upload agents reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
@ -335,7 +343,8 @@ jobs:
|
||||
|
||||
deployment-checks:
|
||||
name: Deployment Checks
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -352,7 +361,8 @@ jobs:
|
||||
|
||||
security-audit:
|
||||
name: Security Audit
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -370,8 +380,9 @@ jobs:
|
||||
# Job de release guard (cohérence release)
|
||||
release-guard:
|
||||
name: Release Guard
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
needs: [code-quality, unit-tests, documentation-tests, markdownlint, security-audit, deployment-checks, bash-required]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -403,10 +414,10 @@ jobs:
|
||||
name: Create Release (Gitea API)
|
||||
runs-on: ubuntu-latest
|
||||
needs: [release-guard]
|
||||
if: startsWith(github.ref, 'refs/tags/')
|
||||
if: ${{ env.CI_SKIP != 'true' && startsWith(github.ref, 'refs/tags/') }}
|
||||
env:
|
||||
RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }}
|
||||
GITEA_BASE_URL: ${{ vars.GITEA_BASE_URL }}
|
||||
BASE_URL: ${{ vars.BASE_URL }}
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
@ -415,24 +426,25 @@ jobs:
|
||||
set -e
|
||||
if [ -z "${RELEASE_TOKEN}" ]; then
|
||||
echo "RELEASE_TOKEN secret is missing" >&2; exit 1; fi
|
||||
if [ -z "${GITEA_BASE_URL}" ]; then
|
||||
GITEA_BASE_URL="https://git.4nkweb.com"; fi
|
||||
if [ -z "${BASE_URL}" ]; then
|
||||
BASE_URL="https://git.4nkweb.com"; fi
|
||||
TAG="${GITHUB_REF##*/}"
|
||||
REPO="${GITHUB_REPOSITORY}"
|
||||
OWNER="${REPO%%/*}"
|
||||
NAME="${REPO##*/}"
|
||||
echo "Publishing release ${TAG} to ${GITEA_BASE_URL}/${OWNER}/${NAME}"
|
||||
echo "Publishing release ${TAG} to ${BASE_URL}/${OWNER}/${NAME}"
|
||||
curl -sSf -X POST \
|
||||
-H "Authorization: token ${RELEASE_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"tag_name\":\"${TAG}\",\"name\":\"${TAG}\",\"draft\":false,\"prerelease\":false}" \
|
||||
"${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${NAME}/releases" >/dev/null
|
||||
"${BASE_URL}/api/v1/repos/${OWNER}/${NAME}/releases" >/dev/null
|
||||
echo "Release created"
|
||||
|
||||
# Job de tests de performance
|
||||
performance-tests:
|
||||
name: Performance Tests
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
if: ${{ env.CI_SKIP != 'true' }}
|
||||
|
||||
steps:
|
||||
- name: Checkout code
|
||||
@ -457,9 +469,9 @@ jobs:
|
||||
# Job de notification
|
||||
notify:
|
||||
name: Notify
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: [self-hosted, linux]
|
||||
needs: [code-quality, unit-tests, integration-tests, security-tests, docker-build, documentation-tests]
|
||||
if: always()
|
||||
if: ${{ env.CI_SKIP != 'true' && always() }}
|
||||
|
||||
steps:
|
||||
- name: Notify success
|
||||
|
@ -7,7 +7,7 @@ on:
|
||||
|
||||
jobs:
|
||||
check-and-sync:
|
||||
runs-on: linux
|
||||
runs-on: [self-hosted, linux]
|
||||
steps:
|
||||
- name: Lire TEMPLATE_VERSION et .4nk-sync.yml
|
||||
# Doit charger ref courant, source_repo et périmètre paths
|
||||
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -34,3 +34,4 @@ git-installer.exe
|
||||
|
||||
# Ne pas ignorer .cursor ni AGENTS.md
|
||||
|
||||
|
||||
|
19
AGENTS.md
19
AGENTS.md
@ -5,13 +5,13 @@
|
||||
- [Introduction](#introduction)
|
||||
- [Principes communs](#principes-communs)
|
||||
- [Agents fondamentaux](#agents-fondamentaux)
|
||||
- [Agents spécialisés documentation](#agents-specialises-documentation)
|
||||
- [Agents spécialisés tests](#agents-specialises-tests)
|
||||
- [Agents spécialisés documentation] (#agents-specialises-documentation)
|
||||
- [Agents spécialisés tests] (#agents-specialises-tests)
|
||||
- [Agents techniques](#agents-techniques)
|
||||
- [Agents frontend](#agents-frontend)
|
||||
- [Agents open source et CI](#agents-open-source-et-ci)
|
||||
- [Agents de synchronisation et dérogations](#agents-de-synchronisation-et-derogations)
|
||||
- [Matrice de coordination](#matrice-de-coordination)
|
||||
- [Agents de synchronisation et dérogations] (#agents-de-synchronisation-et-derogations)
|
||||
- [Matrice de coordination] (#matrice-de-coordination)
|
||||
- [Conclusion](#conclusion)
|
||||
|
||||
---
|
||||
@ -399,3 +399,14 @@ 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é.
|
||||
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 l’exé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`.
|
||||
|
16
CHANGELOG.md
16
CHANGELOG.md
@ -27,6 +27,21 @@ et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
|
||||
### Changed
|
||||
|
||||
## [2025.08.3] - 2025-08-27
|
||||
|
||||
### Changed
|
||||
|
||||
- README refondu (ludique) avec Quickstart Debian, exécution agents sans arguments, secrets et CI
|
||||
- Workflows Gitea configurés pour runners `self-hosted, linux` (docs mises à jour)
|
||||
|
||||
## [2025.08.2] - 2025-08-27
|
||||
|
||||
### Changed
|
||||
|
||||
- Renommage variable CI/Docs `GITEA_BASE_URL` → `BASE_URL`
|
||||
- Exécution des agents simplifiée: `scripts/agents/run.sh` sans arguments par défaut
|
||||
- CI mise à jour pour utiliser l’exécution sans paramètres
|
||||
|
||||
## [2025.08.1] - 2025-08-27
|
||||
|
||||
### Added
|
||||
@ -40,7 +55,6 @@ et ce projet adhère au [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
- Normalisation MD005/MD007/MD051 dans la documentation
|
||||
- Ancrages ASCII dans `AGENTS.md`, correction des titres emphase (MD036)
|
||||
|
||||
|
||||
- Documentation projet réécrite à partir des modèles `docs/templates/**` (générique, non applicative)
|
||||
- `docs/INDEX.md` mis à jour (liens Déploiement et SSH)
|
||||
- Alignement documentaire sur 4NK_template (titres, liens Gitea, wording) dans docs/**
|
||||
|
@ -4,16 +4,16 @@ Merci de votre intérêt pour contribuer au projet 4NK Node ! Ce guide vous aide
|
||||
|
||||
## 📋 Table des Matières
|
||||
|
||||
- [🎯 Comment Contribuer](#comment-contribuer)
|
||||
- [🚀 Premiers Pas](#premiers-pas)
|
||||
- [🔧 Environnement de Développement](#environnement-de-developpement)
|
||||
- [📝 Processus de Contribution](#processus-de-contribution)
|
||||
- [🧪 Tests](#tests)
|
||||
- [📚 Documentation](#documentation)
|
||||
- [🐛 Signaler un Bug](#signaler-un-bug)
|
||||
- [💡 Proposer une Fonctionnalité](#proposer-une-fonctionnalite)
|
||||
- [🔍 Code Review](#code-review)
|
||||
- [📦 Release](#release)
|
||||
- [🎯 Comment Contribuer] (#comment-contribuer)
|
||||
- [🚀 Premiers Pas] (#premiers-pas)
|
||||
- [🔧 Environnement de Développement] (#environnement-de-developpement)
|
||||
- [📝 Processus de Contribution] (#processus-de-contribution)
|
||||
- [🧪 Tests] (#tests)
|
||||
- [📚 Documentation] (#documentation)
|
||||
- [🐛 Signaler un Bug] (#signaler-un-bug)
|
||||
- [💡 Proposer une Fonctionnalité] (#proposer-une-fonctionnalite)
|
||||
- [🔍 Code Review] (#code-review)
|
||||
- [📦 Release] (#release)
|
||||
|
||||
## 🎯 Comment Contribuer
|
||||
|
||||
|
177
README.md
177
README.md
@ -1,128 +1,99 @@
|
||||
# 4NK Project Template — Qualité, Sécurité et Open Source
|
||||
# 4NK Project Template — Qualité, Sécurité, Open Source ✨
|
||||
|
||||
Ce dépôt est le template de référence 4NK. Il formalise la démarche de qualité, de sécurité et d’open source applicable à tous les projets 4NK et fournit des supports initiaux (modèles CI/CD, règles Cursor, scripts, guides). Chaque projet doit l’adapter à ses spécificités, et proposer des améliorations en retour (feedback) vers ce template.
|
||||
Bienvenue dans le template 4NK. Objectifs: démarrer vite, rester propre, publier serein. Vous y trouverez des règles, des workflows CI, des scripts d’agents et une documentation prête à adapter.
|
||||
|
||||
## 📋 Table des Matières
|
||||
## 📦 Ce que vous obtenez
|
||||
|
||||
- Standards de qualité et sécurité (lint, audit, release‑guard)
|
||||
- Agents automatisés (qualité, docs, tests, sécurité, déploiement)
|
||||
- CI Gitea prête à l’emploi (self‑hosted, linux)
|
||||
- Documentation structurée: `docs/project/**` (ce dépôt) et `docs/templates/**` (modèles pour vos projets)
|
||||
|
||||
## 🏗️ Architecture
|
||||
## 🐧 Linux (Debian) — Prérequis rapides
|
||||
|
||||
### 🔄 Flux de Données
|
||||
```bash
|
||||
sudo apt update
|
||||
sudo apt install -y bash git curl jq ca-certificates
|
||||
# Lint Markdown
|
||||
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
||||
sudo apt install -y nodejs
|
||||
```
|
||||
|
||||
## ⚙️ Configuration locale (secrets)
|
||||
|
||||
## 🚀 Démarrage Rapide
|
||||
```bash
|
||||
bash scripts/deploy/setup.sh # crée ~/.4nk_template/.env (chmod 600)
|
||||
```
|
||||
|
||||
### Prérequis
|
||||
À renseigner ensuite dans `~/.4nk_template/.env` (extraits):
|
||||
|
||||
- OPENAI_API_KEY, OPENAI_MODEL (si agents IA)
|
||||
- RELEASE_TOKEN (release via API Gitea)
|
||||
- BASE_URL (optionnel, par défaut `https://git.4nkweb.com`)
|
||||
|
||||
### Installation
|
||||
Plus d’infos: `docs/project/CONFIGURATION.md` et `docs/project/GITEA_SETUP.md`.
|
||||
|
||||
## 🤖 Exécuter les agents
|
||||
|
||||
### Configuration SSH (Recommandé)
|
||||
```bash
|
||||
scripts/agents/run.sh # exécution complète, rapports dans tests/reports/agents
|
||||
scripts/agents/run.sh . . documentation # exécution ciblée (facultatif)
|
||||
```
|
||||
|
||||
Fallback Windows: `scripts/agents/run.ps1`.
|
||||
|
||||
Guide complet: `docs/project/AGENTS_RUNTIME.md`.
|
||||
|
||||
## 🐳 Conteneur unifié (runner + agents)
|
||||
|
||||
```bash
|
||||
# Build
|
||||
docker compose -f docker-compose.ci.yml build
|
||||
|
||||
# Exécuter les agents sur le dépôt courant
|
||||
docker compose -f docker-compose.ci.yml up --abort-on-container-exit
|
||||
# Rapports: tests/reports/agents/*.md
|
||||
|
||||
# Lancer le runner dans ce conteneur
|
||||
RUNNER_MODE=runner BASE_URL="https://git.4nkweb.com" REGISTRATION_TOKEN="<token>" \
|
||||
docker compose -f docker-compose.ci.yml up -d
|
||||
```
|
||||
|
||||
## 🔁 CI/CD (Gitea Actions)
|
||||
|
||||
- Runners: labels requis `self-hosted,linux` (voir `docs/project/GITEA_SETUP.md`)
|
||||
- Jobs clés: `markdownlint`, `agents-smoke`, `release-guard`, `release-create`
|
||||
- Secrets/Variables: `RELEASE_TOKEN`, `OPENAI_API_KEY`, `BASE_URL`, `OPENAI_*`
|
||||
|
||||
## 🚀 Release
|
||||
|
||||
```bash
|
||||
# Vérifier/mettre à jour la version
|
||||
cat TEMPLATE_VERSION
|
||||
|
||||
# Tagger (déclenche la release via API si RELEASE_TOKEN existe côté dépôt)
|
||||
git tag -a vYYYY.MM.P -m 'release: vYYYY.MM.P (latest)'
|
||||
git push origin vYYYY.MM.P
|
||||
```
|
||||
|
||||
Changelog: `CHANGELOG.md`. Gardien de release: `release-guard` en CI.
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
### 📖 Guides Principaux
|
||||
|
||||
- docs/TEMPLATE_ADAPTATION.md — Comment adapter ce template à votre projet
|
||||
- docs/TEMPLATE_FEEDBACK.md — Comment proposer des améliorations au template
|
||||
|
||||
|
||||
### 🔧 Guides Techniques
|
||||
|
||||
|
||||
### 🧪 Guides de Test
|
||||
|
||||
### 🌐 Guides Réseau
|
||||
|
||||
|
||||
## 🔧 Configuration
|
||||
|
||||
### Services Disponibles
|
||||
|
||||
|
||||
### Variables d'Environnement
|
||||
|
||||
|
||||
## 🧪 Tests et Monitoring
|
||||
|
||||
### Tests de Base
|
||||
|
||||
### Monitoring
|
||||
|
||||
|
||||
### Tests de Performance
|
||||
|
||||
|
||||
## 🌐 Réseau de Relais
|
||||
|
||||
### Architecture Mesh
|
||||
|
||||
|
||||
### Ajout de Nœuds Externes
|
||||
|
||||
|
||||
### Configuration Externe
|
||||
|
||||
|
||||
## 🛠️ Développement
|
||||
|
||||
### Structure du Projet
|
||||
|
||||
|
||||
### Ajout d'un Nouveau Service
|
||||
|
||||
|
||||
### Modification de la Configuration
|
||||
|
||||
|
||||
## 🚨 Dépannage
|
||||
|
||||
### Problèmes Courants
|
||||
|
||||
#### 1. Ports Déjà Utilisés
|
||||
|
||||
|
||||
#### 2. Problèmes de Synchronisation
|
||||
|
||||
|
||||
#### 3. Problèmes de Connectivité
|
||||
|
||||
### Logs Détaillés
|
||||
|
||||
|
||||
### Healthchecks
|
||||
|
||||
|
||||
## 📈 Performance
|
||||
|
||||
### Ressources Recommandées
|
||||
|
||||
### Optimisations
|
||||
|
||||
- Projet (ce dépôt): `docs/project/`
|
||||
- Modèles à réutiliser: `docs/templates/`
|
||||
- Standards de qualité: `docs/project/QUALITY_STANDARDS.md`
|
||||
|
||||
## 🤝 Contribution
|
||||
|
||||
1. Fork le repository
|
||||
2. Créer une branche feature (`git checkout -b feature/nouvelle-fonctionnalite`)
|
||||
3. Commit les changements (`git commit -am 'Ajout de nouvelle fonctionnalité'`)
|
||||
4. Push la branche (`git push origin feature/nouvelle-fonctionnalite`)
|
||||
5. Créer une Pull Request
|
||||
|
||||
Pour les améliorations du template lui‑même (règles, CI, scripts), se référer à `docs/TEMPLATE_FEEDBACK.md` et utiliser le type d’issue « Template Feedback ».
|
||||
- Fork → branche → PR (CI verte, docs/changelog à jour)
|
||||
- Respect des règles éditoriales (français, pas de secrets, pas d’exemples applicatifs)
|
||||
|
||||
## 📄 Licence
|
||||
|
||||
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
|
||||
MIT — voir `LICENSE`.
|
||||
|
||||
## 🆘 Support
|
||||
|
||||
Pour obtenir de l'aide :
|
||||
|
||||
1. Consulter la [documentation](docs/)
|
||||
2. Vérifier les [issues existantes](https://git.4nkweb.com/4nk/4NK_node/issues)
|
||||
3. Créer une nouvelle issue avec les détails du problème
|
||||
4. Inclure les logs et la configuration utilisée
|
||||
|
||||
---
|
||||
- Lire `docs/project/INDEX.md`
|
||||
- Ouvrir une issue si besoin
|
||||
|
25
SECURITY.md
25
SECURITY.md
@ -9,6 +9,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
**NE PAS** créer d'issue publique pour les vulnérabilités de sécurité.
|
||||
|
||||
#### À la place
|
||||
|
||||
1. Envoyez un email à [security@4nkweb.com](mailto:security@4nkweb.com)
|
||||
2. Incluez "SECURITY VULNERABILITY" dans l'objet
|
||||
3. Décrivez la vulnérabilité de manière détaillée
|
||||
@ -34,6 +35,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
### Pour les Contributeurs
|
||||
|
||||
#### Code
|
||||
|
||||
- Validez toutes les entrées utilisateur
|
||||
- Utilisez des requêtes préparées pour les bases de données
|
||||
- Évitez les injections de code
|
||||
@ -41,12 +43,14 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
- Utilisez HTTPS pour toutes les communications
|
||||
|
||||
#### Configuration
|
||||
|
||||
- Ne committez jamais de secrets
|
||||
- Utilisez des variables d'environnement pour les données sensibles
|
||||
- Vérifiez les permissions des fichiers
|
||||
- Maintenez les dépendances à jour
|
||||
|
||||
#### Tests
|
||||
|
||||
- Incluez des tests de sécurité
|
||||
- Testez les cas limites
|
||||
- Validez les entrées malveillantes
|
||||
@ -55,18 +59,21 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
### Pour les Utilisateurs
|
||||
|
||||
#### Installation
|
||||
|
||||
- Utilisez des sources officielles
|
||||
- Vérifiez les checksums
|
||||
- Maintenez le système à jour
|
||||
- Utilisez un pare-feu
|
||||
|
||||
#### Configuration
|
||||
|
||||
- Changez les mots de passe par défaut
|
||||
- Utilisez des clés SSH fortes
|
||||
- Limitez l'accès réseau
|
||||
- Surveillez les logs
|
||||
|
||||
#### Opération
|
||||
|
||||
- Surveillez les connexions
|
||||
- Sauvegardez régulièrement
|
||||
- Testez les sauvegardes
|
||||
@ -77,24 +84,28 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
### Composants Principaux
|
||||
|
||||
#### Bitcoin Core
|
||||
|
||||
- **RPC Interface** : Authentification requise
|
||||
- **ZMQ** : Communication locale uniquement
|
||||
- **P2P** : Validation des blocs
|
||||
- **Wallet** : Chiffrement des clés
|
||||
|
||||
#### Blindbit
|
||||
|
||||
- **API HTTP** : Validation des entrées
|
||||
- **Filtres** : Vérification des signatures
|
||||
- **Cache** : Protection contre les attaques DoS
|
||||
- **Logs** : Pas d'informations sensibles
|
||||
|
||||
#### SDK Relay
|
||||
|
||||
- **WebSocket** : Validation des messages
|
||||
- **Synchronisation** : Authentification des pairs
|
||||
- **Cache** : Protection contre les attaques
|
||||
- **Configuration** : Validation des paramètres
|
||||
|
||||
#### Tor
|
||||
|
||||
- **Proxy** : Configuration sécurisée
|
||||
- **Contrôle** : Accès restreint
|
||||
- **Logs** : Anonymisation
|
||||
@ -103,6 +114,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
### Tests de Sécurité
|
||||
|
||||
#### Tests Automatisés
|
||||
|
||||
```bash
|
||||
# Tests de sécurité
|
||||
./tests/run_security_tests.sh
|
||||
@ -115,6 +127,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
```
|
||||
|
||||
#### Tests Manuels
|
||||
|
||||
- Tests de pénétration
|
||||
- Audit de code
|
||||
- Tests de configuration
|
||||
@ -147,6 +160,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
## 📋 Checklist de Sécurité
|
||||
|
||||
### Avant le Déploiement
|
||||
|
||||
- [ ] Audit de code de sécurité
|
||||
- [ ] Tests de vulnérabilités
|
||||
- [ ] Vérification des dépendances
|
||||
@ -154,6 +168,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
- [ ] Tests de charge
|
||||
|
||||
### Pendant l'Opération
|
||||
|
||||
- [ ] Monitoring de sécurité
|
||||
- [ ] Surveillance des logs
|
||||
- [ ] Mise à jour des composants
|
||||
@ -161,6 +176,7 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
- [ ] Tests de récupération
|
||||
|
||||
### Après un Incident
|
||||
|
||||
- [ ] Analyse post-mortem
|
||||
- [ ] Mise à jour des procédures
|
||||
- [ ] Formation de l'équipe
|
||||
@ -170,18 +186,21 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
## 🔧 Outils de Sécurité
|
||||
|
||||
### Monitoring
|
||||
|
||||
- **Logs** : Centralisation et analyse
|
||||
- **Métriques** : Surveillance en temps réel
|
||||
- **Alertes** : Notification automatique
|
||||
- **Tableaux de bord** : Vue d'ensemble
|
||||
|
||||
### Tests
|
||||
|
||||
- **SAST** : Analyse statique
|
||||
- **DAST** : Tests dynamiques
|
||||
- **IAST** : Tests interactifs
|
||||
- **Fuzzing** : Tests de robustesse
|
||||
|
||||
### Protection
|
||||
|
||||
- **WAF** : Pare-feu applicatif
|
||||
- **IDS/IPS** : Détection d'intrusion
|
||||
- **Antivirus** : Protection des endpoints
|
||||
@ -190,18 +209,21 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
## 📚 Ressources
|
||||
|
||||
### Documentation
|
||||
|
||||
- [Guide de Sécurité Bitcoin](https://bitcoin.org/en/security)
|
||||
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
|
||||
- [CWE/SANS Top 25](https://cwe.mitre.org/top25/)
|
||||
- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
|
||||
|
||||
### Outils
|
||||
|
||||
- [Bandit](https://bandit.readthedocs.io/) - Analyse Python
|
||||
- [Clang Static Analyzer](https://clang-analyzer.llvm.org/) - Analyse C/C++
|
||||
- [SonarQube](https://www.sonarqube.org/) - Qualité du code
|
||||
- [OpenVAS](https://www.openvas.org/) - Scan de vulnérabilités
|
||||
|
||||
### Formation
|
||||
|
||||
- Cours de sécurité applicative
|
||||
- Formation aux tests de pénétration
|
||||
- Certification en cybersécurité
|
||||
@ -210,18 +232,21 @@ Nous prenons la sécurité très au sérieux. Si vous découvrez une vulnérabil
|
||||
## 🤝 Collaboration
|
||||
|
||||
### Bug Bounty
|
||||
|
||||
- Programme de récompenses pour les vulnérabilités
|
||||
- Critères d'éligibilité
|
||||
- Montants des récompenses
|
||||
- Processus de validation
|
||||
|
||||
### Responsible Disclosure
|
||||
|
||||
- Timeline de divulgation
|
||||
- Coordination avec les chercheurs
|
||||
- Communication publique
|
||||
- Remerciements
|
||||
|
||||
### Communauté
|
||||
|
||||
- Groupe de sécurité
|
||||
- Discussions techniques
|
||||
- Partage d'informations
|
||||
|
@ -1,2 +1 @@
|
||||
v2025.08.1
|
||||
|
||||
v2025.08.6
|
||||
|
19
docker-compose.ci.yml
Normal file
19
docker-compose.ci.yml
Normal file
@ -0,0 +1,19 @@
|
||||
services:
|
||||
project-ci:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.ci
|
||||
image: 4nk-template-ci:latest
|
||||
environment:
|
||||
- RUNNER_MODE=${RUNNER_MODE:-agents}
|
||||
- TARGET_DIR=/work
|
||||
- OUTPUT_DIR=/work/tests/reports/agents
|
||||
- BASE_URL
|
||||
- REGISTRATION_TOKEN
|
||||
volumes:
|
||||
- ./:/work
|
||||
- ${HOME}/.4nk_template/.env:/root/.4nk_template/.env:ro
|
||||
tty: true
|
||||
labels:
|
||||
- "com.4nk.template=ci"
|
||||
|
26
docker/Dockerfile.ci
Normal file
26
docker/Dockerfile.ci
Normal file
@ -0,0 +1,26 @@
|
||||
FROM gitea/act_runner:nightly
|
||||
|
||||
USER root
|
||||
|
||||
RUN apk update || true && \
|
||||
(apk add --no-cache bash curl jq git coreutils dos2unix || \
|
||||
(apt-get update && apt-get install -y bash curl jq git coreutils dos2unix)) && \
|
||||
mkdir -p /app /work /root/.4nk_template && chmod 700 /root/.4nk_template
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Copier les scripts agents
|
||||
COPY scripts /work/scripts
|
||||
|
||||
# Normaliser les fins de ligne et permissions
|
||||
RUN find /work/scripts -type f -name "*.sh" -print0 | xargs -0 -r dos2unix -f && \
|
||||
find /work/scripts -type f -name "*.sh" -exec chmod +x {} +
|
||||
|
||||
# Entrypoint unifié: lance le runner si variables présentes, sinon agents
|
||||
COPY docker/entrypoint.ci.sh /entrypoint.sh
|
||||
RUN dos2unix -f /entrypoint.sh && chmod +x /entrypoint.sh
|
||||
|
||||
WORKDIR /work
|
||||
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
|
10
docker/Dockerfile.debian
Normal file
10
docker/Dockerfile.debian
Normal file
@ -0,0 +1,10 @@
|
||||
FROM debian:12-slim
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
bash curl jq ca-certificates git docker.io docker-compose-plugin \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /work
|
||||
ENTRYPOINT ["/bin/bash","-lc"]
|
55
docker/entrypoint.ci.sh
Normal file
55
docker/entrypoint.ci.sh
Normal file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Charge l'env utilisateur si monté
|
||||
if [[ -f "/root/.4nk_template/.env" ]]; then
|
||||
set -a
|
||||
. "/root/.4nk_template/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
MODE="${RUNNER_MODE:-agents}"
|
||||
TARGET_DIR="${TARGET_DIR:-/work}"
|
||||
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() {
|
||||
if command -v dos2unix >/dev/null 2>&1; then
|
||||
find /work/scripts -type f -name "*.sh" -print0 | xargs -0 -r dos2unix -f || true
|
||||
fi
|
||||
find /work/scripts -type f -name "*.sh" -exec chmod +x {} + || true
|
||||
}
|
||||
|
||||
start_runner() {
|
||||
# Démarre le runner gitea/act_runner (processus au premier plan)
|
||||
# Requiert : GITEA_INSTANCE_URL (BASE_URL), REGISTRATION_TOKEN ou config existante
|
||||
if [[ -n "${BASE_URL:-}" && -n "${REGISTRATION_TOKEN:-}" ]]; then
|
||||
act_runner register --no-interactive \
|
||||
--instance "$BASE_URL" \
|
||||
--token "$REGISTRATION_TOKEN" \
|
||||
--labels "self-hosted,linux" || true
|
||||
fi
|
||||
exec act_runner daemon
|
||||
}
|
||||
|
||||
run_agents() {
|
||||
normalize_scripts
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
cd "$TARGET_DIR"
|
||||
/work/scripts/agents/run.sh "$TARGET_DIR" "$OUTPUT_DIR" all || true
|
||||
echo "Rapports disponibles dans $OUTPUT_DIR" >&2
|
||||
}
|
||||
|
||||
case "$MODE" in
|
||||
runner) start_runner ;;
|
||||
agents) run_agents ;;
|
||||
both)
|
||||
start_runner &
|
||||
run_agents
|
||||
wait -n || true
|
||||
;;
|
||||
*) run_agents ;;
|
||||
esac
|
2
docs/ARCHITECTURE.md
Normal file
2
docs/ARCHITECTURE.md
Normal file
@ -0,0 +1,2 @@
|
||||
# Architecture
|
||||
|
2
docs/DEPLOYMENT.md
Normal file
2
docs/DEPLOYMENT.md
Normal file
@ -0,0 +1,2 @@
|
||||
# Déploiement
|
||||
|
156
docs/INDEX.md
Normal file
156
docs/INDEX.md
Normal file
@ -0,0 +1,156 @@
|
||||
# 📚 Index de Documentation - 4NK_template
|
||||
|
||||
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** 🚀
|
2
docs/SECURITY_AUDIT.md
Normal file
2
docs/SECURITY_AUDIT.md
Normal file
@ -0,0 +1,2 @@
|
||||
# Security Audit
|
||||
|
2
docs/TESTING.md
Normal file
2
docs/TESTING.md
Normal file
@ -0,0 +1,2 @@
|
||||
# Tests
|
||||
|
@ -12,14 +12,29 @@ Ce guide décrit comment utiliser et intégrer les agents de conformité (qualit
|
||||
|
||||
- bash disponible (Git Bash/WSL/Linux/macOS) pour les contrôles complets
|
||||
- (Optionnel) `OPENAI_API_KEY` pour activer l’analyse IA
|
||||
- (Option) conteneur unifié runner+agents: `docker-compose.ci.yml`
|
||||
|
||||
## 3. Commandes
|
||||
|
||||
- Bash (recommandé):
|
||||
- `scripts/agents/run.sh [target_dir] [output_dir] [agent]`
|
||||
- `scripts/agents/run.sh`
|
||||
- Options (facultatives): `scripts/agents/run.sh [target_dir] [output_dir] [agent]`
|
||||
- Par défaut: `target_dir=.` `output_dir=tests/reports/agents` `agent=all`
|
||||
- PowerShell (fallback Windows):
|
||||
- `scripts/agents/run.ps1 -TargetDir . -OutputDir tests/reports/agents -Agent <nom>`
|
||||
- `scripts/agents/run.ps1`
|
||||
- Options (facultatives): `-TargetDir . -OutputDir tests/reports/agents -Agent <nom>`
|
||||
|
||||
- Conteneur unifié:
|
||||
- Build: `docker compose -f docker-compose.ci.yml build`
|
||||
- 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`
|
||||
|
||||
## 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
|
||||
|
||||
@ -51,13 +66,22 @@ Ce guide décrit comment utiliser et intégrer les agents de conformité (qualit
|
||||
- `openia-agents`: agents avec IA si `OPENAI_API_KEY` fourni
|
||||
- `bash-required`: bloque si bash/runner absent
|
||||
- `release-guard`: dépend des checks en amont
|
||||
- (Option) étape pour builder/lancer `docker-compose.ci.yml` si utilisation du conteneur unifié
|
||||
|
||||
## 7. Paramètres IA (optionnels)
|
||||
|
||||
- `OPENAI_API_KEY`, `OPENAI_MODEL`, `OPENAI_API_BASE`, `OPENAI_TEMPERATURE`
|
||||
|
||||
## 8. Bonnes pratiques
|
||||
## 8. Auto‑corrections (optionnelles)
|
||||
|
||||
- `AUTO_FIX=1` permet aux agents d’appliquer des corrections minimales:
|
||||
- création des dossiers `tests/**` manquants
|
||||
- génération de squelettes Markdown basiques pour quelques fichiers de `docs/`
|
||||
- Traçabilité: les actions sont listées dans les rapports `tests/reports/agents/*.md`
|
||||
|
||||
## 9. Bonnes pratiques
|
||||
|
||||
- Exécuter les agents avant chaque PR
|
||||
- Archiver les rapports significatifs
|
||||
- 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
|
||||
|
@ -3,9 +3,25 @@
|
||||
## Variables d’environnement (CI)
|
||||
|
||||
- Secrets CI uniquement (pas de secrets en clair)
|
||||
- Variables agents : OPENAI_API_KEY, OPENAI_MODEL, OPENAI_API_BASE, OPENAI_TEMPERATURE
|
||||
- Secret release: RELEASE_TOKEN (publication des releases via l’API Gitea)
|
||||
- Variable optionnelle: GITEA_BASE_URL (ex: `https://git.4nkweb.com`)
|
||||
- **Agents IA**: `OPENAI_API_KEY`, `OPENAI_MODEL`, `OPENAI_API_BASE`, `OPENAI_TEMPERATURE`
|
||||
- **Release**: `RELEASE_TOKEN` (publication des releases via l’API Gitea)
|
||||
- **Forge**: `BASE_URL` (ex: `https://git.4nkweb.com`)
|
||||
- **Runner unifié**:
|
||||
- `RUNNER_MODE` = `agents` | `runner` | `both` (par défaut: `agents`)
|
||||
- `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 court‑circuités
|
||||
- Définir à `false` pour réactiver la CI côté dépôt
|
||||
- Alternative ponctuelle: commit message `[skip ci]`
|
||||
|
||||
## Variables d’environnement (agents)
|
||||
|
||||
- `AUTO_FIX` (0/1, défaut 0): active les corrections automatiques côté agents
|
||||
- Création de la structure `tests/**` manquante
|
||||
- Génération de squelettes minimalistes pour certains fichiers de `docs/`
|
||||
- `SCOPE` (`all`|`changed`, défaut `all`):
|
||||
- `all`: passe sur l’ensemble du dépôt
|
||||
- `changed`: focalise les contrôles/corrections sur les fichiers modifiés du dernier commit
|
||||
|
||||
## Conventions
|
||||
|
||||
@ -17,6 +33,21 @@
|
||||
- bash requis (job CI `bash-required`)
|
||||
- Fallback PowerShell utilisable localement
|
||||
|
||||
## Conteneur unifié (runner+agents)
|
||||
|
||||
- Image: construite via `docker/Dockerfile.ci`, orchestrée par `docker-compose.ci.yml`
|
||||
- Montage: le projet courant est monté sur `/work`, les rapports dans `/work/tests/reports/agents`
|
||||
- Secrets locaux: `~/.4nk_template/.env` monté en lecture seule dans le conteneur
|
||||
|
||||
Variables utilisées par l’entrypoint `docker/entrypoint.ci.sh`:
|
||||
|
||||
- `RUNNER_MODE` détermine le mode d’exécution
|
||||
- `BASE_URL` et `REGISTRATION_TOKEN` servent à l’enregistrement 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)
|
||||
|
||||
- Modèle fourni: `scripts/env/.env.template` (clés sans valeurs)
|
||||
|
@ -20,7 +20,7 @@
|
||||
- Script d’installation: `scripts/deploy/setup.sh`
|
||||
- Crée `~/.4nk_template/` (chmod 700) et `~/.4nk_template/.env` (chmod 600)
|
||||
- Copie depuis `scripts/env/.env.template` si présent, sinon génère un modèle
|
||||
- À compléter: `OPENAI_API_KEY`, `OPENAI_MODEL`, `RELEASE_TOKEN`, `GITEA_BASE_URL` (si custom)
|
||||
- À compléter: `OPENAI_API_KEY`, `OPENAI_MODEL`, `RELEASE_TOKEN`, `BASE_URL` (si custom)
|
||||
- Applique la structure 4NK_template au projet cible (sans écraser par défaut):
|
||||
- `.gitea/**`, `.cursor/**`, `.cursorignore`, `.gitignore`, `.markdownlint.json`
|
||||
- `AGENTS.md`, `LICENSE`, `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `TEMPLATE_VERSION`
|
||||
@ -47,3 +47,25 @@ bash scripts/deploy/setup.sh git@host:org/mon-projet.git --dest ~/work --force
|
||||
|
||||
- Vérification santé/logs/dashboards
|
||||
- Suivi des erreurs et retours
|
||||
|
||||
## Conteneur unifié (runner + agents)
|
||||
|
||||
- Build:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.ci.yml build
|
||||
```
|
||||
|
||||
- Exécuter les agents sur le dépôt courant:
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.ci.yml up --abort-on-container-exit
|
||||
# Rapports: tests/reports/agents/*.md
|
||||
```
|
||||
|
||||
- Lancer le runner dans le conteneur unifié:
|
||||
|
||||
```bash
|
||||
export RUNNER_MODE=runner BASE_URL="https://git.4nkweb.com" REGISTRATION_TOKEN="<token>"
|
||||
docker compose -f docker-compose.ci.yml up -d
|
||||
```
|
||||
|
@ -1,29 +1,44 @@
|
||||
# Configuration Gitea — 4NK_template (projet)
|
||||
|
||||
## 1. Repository
|
||||
|
||||
- Activer les Actions (workflows `.gitea/workflows/*.yml`)
|
||||
- Vérifier les templates d’issues/PR
|
||||
|
||||
## 2. Protections de branches
|
||||
|
||||
- Reviews requises avant merge
|
||||
- Status checks requis (CI verte)
|
||||
- Mise à jour obligatoire de la branche avant merge
|
||||
|
||||
## 3. Secrets et variables
|
||||
|
||||
- Secrets: `OPENAI_API_KEY` (optionnel), `RELEASE_TOKEN` (obligatoire pour publier les releases via API Gitea)
|
||||
- Variables: paramètres de CI non sensibles, ex: `OPENAI_MODEL`, `OPENAI_API_BASE`, `OPENAI_TEMPERATURE`, `GITEA_BASE_URL`
|
||||
- Variables: paramètres de CI non sensibles, ex: `OPENAI_MODEL`, `OPENAI_API_BASE`, `OPENAI_TEMPERATURE`, `BASE_URL`
|
||||
|
||||
### Ajouter `RELEASE_TOKEN`
|
||||
|
||||
- Aller dans Repository Settings → Secrets → New Repository Secret
|
||||
- Nom: `RELEASE_TOKEN` ; Valeur: un token personnel avec portée API sur le dépôt
|
||||
- Le job `release-create` utilisera ce secret lors d’un push de tag `v*`
|
||||
|
||||
### Runner Gitea (labels)
|
||||
|
||||
- Configurez votre runner avec labels: `self-hosted,linux`
|
||||
- Option A (runner dédié): `gitea/act_runner` via docker-compose dans `runner/`
|
||||
- Option B (conteneur unifié): `RUNNER_MODE=runner` dans `docker-compose.ci.yml` + `BASE_URL` et `REGISTRATION_TOKEN`
|
||||
- Enregistrement (automatisé par entrypoint si variables présentes)
|
||||
- Démarrage: `docker compose -f docker-compose.ci.yml up -d`
|
||||
|
||||
## 4. Workflows requis
|
||||
|
||||
- `code-quality`, `unit-tests`, `documentation-tests`, `security-audit`
|
||||
- `deployment-checks`, `bash-required`, `markdownlint`, `release-guard`, `release-create`
|
||||
- (Optionnels) `agents-smoke`, `openia-agents`
|
||||
- (Conteneur unifié) job custom pour builder et lancer `docker-compose.ci.yml` si nécessaire
|
||||
|
||||
## 5. Processus PR
|
||||
|
||||
- Branche dédiée, PR petite et ciblée
|
||||
- CI verte, review approuvée
|
||||
- Doc et changelog à jour
|
||||
|
@ -1,15 +1,18 @@
|
||||
# Guide open source — 4NK_template (projet)
|
||||
|
||||
## Pré-requis
|
||||
|
||||
- LICENSE, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md
|
||||
|
||||
## CI
|
||||
|
||||
- tests, lint, security-audit, release-guard, bash-required
|
||||
|
||||
## Publication
|
||||
|
||||
- Alignement version/changelog/tag, notes de release
|
||||
|
||||
## Communauté
|
||||
|
||||
- Templates issues/PR, labels, milestones
|
||||
- Divulgation responsable des vulnérabilités
|
||||
|
||||
|
@ -6,4 +6,3 @@
|
||||
- Tests verts (catégories pertinentes) et rapports conservés
|
||||
- Documentation à jour (INDEX, guides impactés)
|
||||
- Sécurité de base: secrets, permissions, audit CI
|
||||
|
||||
|
@ -1,20 +1,40 @@
|
||||
# Plan de release — 4NK_template (projet)
|
||||
|
||||
## Objectifs
|
||||
|
||||
- Version documentée, testée, sécurisée
|
||||
- Processus reproductible et traçable
|
||||
|
||||
## Préparation
|
||||
|
||||
- CI verte: lint/tests/doc/security‑audit/release‑guard
|
||||
- Docs à jour (INDEX, guides impactés)
|
||||
- Version/Changelog/Tag alignés
|
||||
|
||||
## Lancement
|
||||
|
||||
- Tagging: `vX.Y.Z` ou `vX.Y.Z-wip.N`
|
||||
- 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 l’alignement version/changelog correspondant au tag
|
||||
- Appliquer les agents (localement si CI neutre) puis merger
|
||||
|
||||
## Post‑lancement
|
||||
|
||||
- Suivi issues/retours
|
||||
- Corrections critiques
|
||||
- Mise à jour de la roadmap
|
||||
|
||||
|
@ -1,22 +1,25 @@
|
||||
# Roadmap — 4NK_template (projet)
|
||||
|
||||
## Vision
|
||||
|
||||
Maintenir un template robuste (docs, CI, sécurité) pour accélérer les projets.
|
||||
|
||||
## Objectifs (12 mois)
|
||||
|
||||
- Qualité: standards renforcés, automatisations CI supplémentaires
|
||||
- Documentation: squelettes enrichis, index cohérents
|
||||
- Sécurité: contrôles CI étendus, guides pratiques
|
||||
- Outillage: agents élargis, rapports synthétiques
|
||||
|
||||
## Jalons
|
||||
|
||||
- T1: Mise à jour squelettes docs et agents
|
||||
- T2: Extensions CI (lint multi‑langages, déploiement dry‑run)
|
||||
- T3: Guides open source/qualité consolidés
|
||||
- T4: Synchronisation de template outillée
|
||||
|
||||
## Mesure du progrès
|
||||
|
||||
- CI verte en continu
|
||||
- Adoption des squelettes par projets
|
||||
- Diminution des écarts de conformité
|
||||
|
||||
|
@ -1,24 +1,28 @@
|
||||
# Audit de sécurité — 4NK_template (projet)
|
||||
|
||||
## Menaces
|
||||
|
||||
- Secrets, permissions, endpoints sensibles, dépendances, supply chain
|
||||
|
||||
## Contrôles
|
||||
|
||||
- Scan secrets/permissions
|
||||
- Audit dépendances (outil selon la pile des projets)
|
||||
- Vérifs de configuration (auth/TLS/CORS/rate‑limit)
|
||||
- Journalisation sécurité, traçabilité
|
||||
|
||||
## CI
|
||||
|
||||
- Job `security-audit` échoue si alerte critique
|
||||
- Rapports archivés en artefacts
|
||||
|
||||
## Politique des secrets
|
||||
|
||||
- Exclusivement secrets CI/variables d’environnement
|
||||
- Rotation régulière, révocation sur incident
|
||||
- Aucun secret en clair dans le dépôt
|
||||
|
||||
## Remédiation
|
||||
|
||||
- Prioriser, corriger, documenter dans `CHANGELOG.md`
|
||||
- Ajouter des tests de non‑régression sécurité si pertinent
|
||||
|
||||
|
@ -1,56 +1,164 @@
|
||||
### 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 d’usage — 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.
|
||||
|
||||
## 1. Pré‑requis
|
||||
|
||||
- Git opérationnel et accès à votre forge (Gitea recommandé)
|
||||
- CI activée sur le repository
|
||||
- bash disponible pour les agents (recommandé). À défaut, fallback PowerShell local
|
||||
|
||||
## 2. Démarrer un projet dérivé
|
||||
|
||||
1) Créer un repository à partir de 4NK_template
|
||||
2) Copier/adapter la documentation depuis `docs/templates/**` vers votre `docs/**`
|
||||
3) Tenir `docs/INDEX.md` et `CHANGELOG.md` à jour
|
||||
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 l’image 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
|
||||
|
||||
- Utiliser les squelettes de `docs/templates/**` comme base
|
||||
- Documenter uniquement votre domaine applicatif (le template reste générique)
|
||||
- À chaque changement de code/dépendance/CI, synchroniser la doc correspondante
|
||||
|
||||
## 4. Agents (contrôles)
|
||||
|
||||
- Recommandé (bash): `scripts/agents/run.sh [target_dir] [output_dir] [agent]`
|
||||
- Windows fallback: `scripts/agents/run.ps1 -TargetDir . -OutputDir tests/reports/agents -Agent <nom>`
|
||||
- Rapports: `tests/reports/agents/*.md`
|
||||
- Conteneur (option): `docker compose -f docker-compose.ci.yml up --abort-on-container-exit`
|
||||
- Rapports: `tests/reports/agents/*.md`
|
||||
- Variables utiles: `RUNNER_MODE`, `BASE_URL`, `REGISTRATION_TOKEN`
|
||||
- Script helper: `scripts/dev/run_project_ci.sh`
|
||||
- Auto‑corrections: `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`
|
||||
|
||||
### 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
|
||||
|
||||
- Jobs attendus: qualité, tests (catégories pertinentes), documentation, security‑audit, bash‑required, release‑guard
|
||||
- `bash-required` garantit la présence de bash et du runner des agents
|
||||
- `release-guard` bloque les publications si tests/doc/build/sécurité/version/changelog/tag ne sont pas cohérents
|
||||
|
||||
## 6. Sécurité
|
||||
|
||||
- Secrets uniquement via la CI (variables d’environnement), jamais en clair dans le dépôt
|
||||
- Audit sécurité automatisé (job `security-audit`) et remédiations tracées dans `CHANGELOG.md`
|
||||
|
||||
## 7. Workflow quotidien
|
||||
|
||||
- Éditer: code et documentation (toujours en parallèle)
|
||||
- Exécuter: tests locaux, agents (diagnostics)
|
||||
- Vérifier: sorties CI, rapports `tests/reports/`
|
||||
- Commiter: messages clairs, PR petites et ciblées
|
||||
|
||||
## 8. Publication
|
||||
|
||||
- Choisir `latest` (tag `vX.Y.Z`) ou `wip` (ex: `vX.Y.Z-wip.N`)
|
||||
- Aligner: fichier de version, `CHANGELOG.md`, tag git
|
||||
- Déployer si pipeline défini; sinon documenter la procédure
|
||||
|
||||
## 9. Dépannage
|
||||
|
||||
- Agents fallback PowerShell si bash indisponible localement
|
||||
- Consulter `tests/reports/agents/*.md` pour les écarts à corriger
|
||||
- Vérifier les logs de la CI et le job `release-guard`
|
||||
|
||||
## 10. Bonnes pratiques
|
||||
|
||||
- Pas d’exemples applicatifs dans le template
|
||||
- Toujours mettre à jour la documentation et le changelog
|
||||
- Réduire la dérive: synchroniser régulièrement vos projets avec les squelettes et standards
|
||||
|
||||
|
8
docs/templates/API.md
vendored
8
docs/templates/API.md
vendored
@ -1,8 +0,0 @@
|
||||
# Référence API — Template
|
||||
|
||||
- Vue d’ensemble
|
||||
- Authentification/permissions
|
||||
- Endpoints par domaine (schémas, invariants)
|
||||
- Codes d’erreur
|
||||
- Limites et quotas
|
||||
- Sécurité et conformité
|
8
docs/templates/ARCHITECTURE.md
vendored
8
docs/templates/ARCHITECTURE.md
vendored
@ -1,8 +0,0 @@
|
||||
# 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
6
docs/templates/CONFIGURATION.md
vendored
@ -1,6 +0,0 @@
|
||||
# Configuration — Template
|
||||
|
||||
- Variables d’environnement (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
12
docs/templates/INDEX.md
vendored
@ -1,12 +0,0 @@
|
||||
# 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 d’architecture
|
||||
- CONFIGURATION.md — squelette de configuration
|
||||
- USAGE.md — squelette d’usage
|
||||
- TESTING.md — squelette de stratégie de tests
|
||||
- SECURITY_AUDIT.md — squelette d’audit sécurité
|
||||
- RELEASE_PLAN.md — squelette de plan de release
|
||||
- OPEN_SOURCE_CHECKLIST.md — squelette de checklist open source
|
7
docs/templates/OPEN_SOURCE_CHECKLIST.md
vendored
7
docs/templates/OPEN_SOURCE_CHECKLIST.md
vendored
@ -1,7 +0,0 @@
|
||||
# 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
|
24
docs/templates/README.md
vendored
24
docs/templates/README.md
vendored
@ -1,24 +0,0 @@
|
||||
# README — Template de projet
|
||||
|
||||
## Présentation
|
||||
Décrivez brièvement l’objectif du projet, son périmètre et ses utilisateurs cibles.
|
||||
|
||||
## Démarrage rapide
|
||||
- Prérequis (langages/outils)
|
||||
- Étapes d’installation
|
||||
- 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
7
docs/templates/RELEASE_PLAN.md
vendored
@ -1,7 +0,0 @@
|
||||
# Plan de release — Template
|
||||
|
||||
- Vue d’ensemble, objectifs, date cible
|
||||
- Préparation (docs/CI/tests/sécurité)
|
||||
- Communication (annonces, canaux)
|
||||
- Lancement (checklist, tagging)
|
||||
- Post‑lancement (support, retours)
|
7
docs/templates/SECURITY_AUDIT.md
vendored
7
docs/templates/SECURITY_AUDIT.md
vendored
@ -1,7 +0,0 @@
|
||||
# Audit de sécurité — Template
|
||||
|
||||
- Menaces et surfaces d’attaque
|
||||
- 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
6
docs/templates/TESTING.md
vendored
@ -1,6 +0,0 @@
|
||||
# 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
7
docs/templates/USAGE.md
vendored
@ -1,7 +0,0 @@
|
||||
# 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)
|
49
runner/README.md
Normal file
49
runner/README.md
Normal file
@ -0,0 +1,49 @@
|
||||
# Runner Gitea (act_runner)
|
||||
|
||||
Ce dossier contient une configuration prête à l'emploi pour exécuter un runner Gitea via Docker Compose.
|
||||
|
||||
## Prérequis
|
||||
|
||||
- Hôte Linux avec Docker et Docker Compose
|
||||
- URL de l'instance Gitea et un token d'enregistrement (repo/org/instance)
|
||||
|
||||
## Configuration
|
||||
|
||||
- Le runner lit un fichier .env GLOBAL: `$HOME/4nk_template/.env` (commun à tous les dépôts)
|
||||
- Variables attendues dans ce fichier:
|
||||
- `INSTANCE_URL` (ex: `https://git.4nkweb.com`)
|
||||
- `REGISTRATION_TOKEN` (token d'enregistrement)
|
||||
- `RUNNER_NAME` (optionnel)
|
||||
- `RUNNER_LABELS` (optionnel, défaut: `self-hosted,linux`)
|
||||
- Aucun `.env` local dans `runner/` n’est nécessaire.
|
||||
|
||||
Exemple de contenu minimal:
|
||||
```dotenv
|
||||
INSTANCE_URL=https://git.4nkweb.com
|
||||
REGISTRATION_TOKEN=...
|
||||
RUNNER_NAME=$(hostname)-runner
|
||||
RUNNER_LABELS=self-hosted,linux
|
||||
```
|
||||
|
||||
## Démarrage
|
||||
|
||||
```bash
|
||||
cd runner
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
Le runner s'enregistre automatiquement et apparaît dans Settings → Actions → Runners.
|
||||
|
||||
## Arrêt / Mise à jour
|
||||
|
||||
```bash
|
||||
docker compose down
|
||||
# Mise à jour d'image
|
||||
docker compose pull && docker compose up -d
|
||||
```
|
||||
|
||||
## Mode éphémère (optionnel)
|
||||
|
||||
Activez `GITEA_RUNNER_EPHEMERAL=1` dans `docker-compose.yml` pour des runners jetables.
|
||||
|
||||
Réf: Gitea Act Runner — https://docs.gitea.com/usage/actions/act-runner
|
18
runner/docker-compose.yml
Normal file
18
runner/docker-compose.yml
Normal file
@ -0,0 +1,18 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
runner:
|
||||
image: docker.io/gitea/act_runner:nightly
|
||||
container_name: gitea-act-runner
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- ${USERPROFILE}/.4nk_template/.env
|
||||
environment:
|
||||
- GITEA_RUNNER_LABELS=${RUNNER_LABELS:-self-hosted,linux}
|
||||
- GITEA_RUNNER_NAME=${RUNNER_NAME:-local-runner}
|
||||
- GITEA_INSTANCE_URL=${INSTANCE_URL}
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=${REGISTRATION_TOKEN}
|
||||
# Uncomment to enable ephemeral mode
|
||||
# - GITEA_RUNNER_EPHEMERAL=1
|
||||
volumes:
|
||||
- ./data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
8
scripts/agents/ai_prompt.sh
Normal file → Executable file
8
scripts/agents/ai_prompt.sh
Normal file → Executable file
@ -4,6 +4,14 @@ set -euo pipefail
|
||||
# Utilitaire générique pour appeler l'API OpenAI Chat Completions.
|
||||
# Prérequis: variable d'environnement OPENAI_API_KEY et curl.
|
||||
|
||||
# Chargement env utilisateur (~/.4nk_template/.env) pour exécutions locales/CI docke
|
||||
"$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/env/ensure_env.sh" || true
|
||||
if [[ -f "${HOME}/.4nk_template/.env" ]]; then
|
||||
set -a
|
||||
. "${HOME}/.4nk_template/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
for bin in curl jq; do
|
||||
if ! command -v "$bin" >/dev/null 2>&1; then
|
||||
echo "$bin manquant. Installez $bin." >&2
|
||||
|
19
scripts/agents/common.sh
Executable file
19
scripts/agents/common.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Portée des contrôles: all (défaut) ou changed
|
||||
export SCOPE="${SCOPE:-all}"
|
||||
|
||||
list_changed_paths() {
|
||||
# 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
|
||||
}
|
||||
|
||||
is_path_changed() {
|
||||
local path="$1"
|
||||
if [[ "$SCOPE" != "changed" ]]; then return 0; fi
|
||||
local changed
|
||||
changed=$(list_changed_paths)
|
||||
if [[ -z "$changed" ]]; then return 0; fi
|
||||
grep -q "^${path%/}\(/\|$\)" <<<"$changed" && return 0 || return 1
|
||||
}
|
12
scripts/agents/compilation_agent.sh
Normal file → Executable file
12
scripts/agents/compilation_agent.sh
Normal file → Executable file
@ -5,22 +5,28 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/compilation_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Compilation" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(.gitea/workflows/ci.yml)
|
||||
any=0; for p in "${relevant[@]}"; do if is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement compilation CI (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
if grep -q "cargo" .gitea/workflows/ci.yml 2>/dev/null; then
|
||||
echo "- Étapes de build/format/clippy Rust détectées dans la CI." >> "$SUMMARY_FILE"
|
||||
else
|
||||
echo "- Étapes de compilation non détectées dans la CI (à ajouter si nécessaire)." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Précise une cadence de compilation (avant refactor/push, après update deps) et les conditions de blocage si erreurs.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/dependances_agent.sh
Normal file → Executable file
12
scripts/agents/dependances_agent.sh
Normal file → Executable file
@ -5,21 +5,27 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/dependances_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Dépendances" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
echo "- Vérifier régulièrement les dépendances (audit sécurité, mises à jour stables)." >> "$SUMMARY_FILE"
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(package.json package-lock.json pnpm-lock.yaml yarn.lock requirements.txt pyproject.toml Cargo.toml go.mod .gitea/workflows/ci.yml)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement dépendances/CI (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
if grep -q "security-audit" .gitea/workflows/ci.yml 2>/dev/null; then
|
||||
echo "- Job CI security-audit détecté." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Établis une politique de dépendances: ajout automatique si justifié, vérification des dernières versions stables, documentation des impacts (ARCHITECTURE, CONFIGURATION, CHANGELOG), et rollback.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/deployment_agent.sh
Normal file → Executable file
12
scripts/agents/deployment_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/deployment_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Déploiement" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(docs/DEPLOYMENT.md docs/RELEASE_PLAN.md .gitea/workflows/ci.yml)
|
||||
any=0; for p in "${relevant[@]}"; do if is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
echo "## Résultats locaux" >> "$SUMMARY_FILE"
|
||||
ok=1
|
||||
for f in docs/DEPLOYMENT.md docs/RELEASE_PLAN.md .gitea/workflows/ci.yml; do
|
||||
@ -17,11 +23,11 @@ for f in docs/DEPLOYMENT.md docs/RELEASE_PLAN.md .gitea/workflows/ci.yml; do
|
||||
done
|
||||
if [[ $ok -eq 1 ]]; then echo "- Pré‑requis documentaires présents." >> "$SUMMARY_FILE"; fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Établis une checklist de déploiement minimale (pré‑checks, variables, smoke tests, rollback, post‑deploy) adaptée à un template CI Gitea.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
6
scripts/agents/derogations_locales_agent.sh
Normal file → Executable file
6
scripts/agents/derogations_locales_agent.sh
Normal file → Executable file
@ -16,11 +16,11 @@ else
|
||||
echo "- Aucun fichier de dérogations locales détecté." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Définis un format pour enregistrer les dérogations (path, raison, propriétaire, échéance), tolérance CI, et revue périodique.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
26
scripts/agents/documentation_agent.sh
Normal file → Executable file
26
scripts/agents/documentation_agent.sh
Normal file → Executable file
@ -5,6 +5,7 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/documentation_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Documentation" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
@ -20,13 +21,32 @@ if ((${#missing[@]}==0)); then
|
||||
else
|
||||
echo "- Fichiers manquants:" >> "$SUMMARY_FILE"
|
||||
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
|
||||
if [[ "${AUTO_FIX:-0}" == "1" ]]; then
|
||||
echo >> "$SUMMARY_FILE"
|
||||
echo "## Auto‑corrections" >> "$SUMMARY_FILE"
|
||||
for m in "${missing[@]}"; do
|
||||
case "$m" in
|
||||
docs/INDEX.md)
|
||||
mkdir -p docs && printf "# Index\n\n" > "$m" && echo "- Créé squelette: $m" >> "$SUMMARY_FILE" ;;
|
||||
docs/ARCHITECTURE.md)
|
||||
mkdir -p docs && printf "# Architecture\n\n" > "$m" && echo "- Créé squelette: $m" >> "$SUMMARY_FILE" ;;
|
||||
docs/TESTING.md)
|
||||
mkdir -p docs && printf "# Tests\n\n" > "$m" && echo "- Créé squelette: $m" >> "$SUMMARY_FILE" ;;
|
||||
docs/SECURITY_AUDIT.md)
|
||||
mkdir -p docs && printf "# Security Audit\n\n" > "$m" && echo "- Créé squelette: $m" >> "$SUMMARY_FILE" ;;
|
||||
docs/DEPLOYMENT.md)
|
||||
mkdir -p docs && printf "# Déploiement\n\n" > "$m" && echo "- Créé squelette: $m" >> "$SUMMARY_FILE" ;;
|
||||
*) : ;;
|
||||
esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Élabore une liste courte d’améliorations documentation (INDEX à jour, traçabilité changes ↔ CHANGELOG, sections sécurité/tests/déploiement).
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
8
scripts/agents/documents_bureautiques_agent.sh
Normal file → Executable file
8
scripts/agents/documents_bureautiques_agent.sh
Normal file → Executable file
@ -10,7 +10,7 @@ echo "# Agent Documents bureautiques" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
docsx=$(git ls-files '*.docx' 2>/dev/null || true)
|
||||
docsx=$(git -C "$TARGET_DIR" ls-files '*.docx' 2>/dev/null || true)
|
||||
if [[ -z "$docsx" ]]; then
|
||||
echo "- Aucun fichier .docx détecté." >> "$SUMMARY_FILE"
|
||||
else
|
||||
@ -19,11 +19,11 @@ else
|
||||
echo "- Utiliser docx2txt pour extraction et documenter dans docs/INDEX.md" >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Décris une procédure standard de traitement des .docx (docx2txt, import, traçabilité dans docs/INDEX.md) et les risques à éviter.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
8
scripts/agents/donnees_csv_agent.sh
Normal file → Executable file
8
scripts/agents/donnees_csv_agent.sh
Normal file → Executable file
@ -10,7 +10,7 @@ echo "# Agent Données CSV" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
csvs=$(git ls-files '*.csv' 2>/dev/null || true)
|
||||
csvs=$(git -C "$TARGET_DIR" ls-files '*.csv' 2>/dev/null || true)
|
||||
if [[ -z "$csvs" ]]; then
|
||||
echo "- Aucun CSV détecté dans le dépôt." >> "$SUMMARY_FILE"
|
||||
else
|
||||
@ -18,11 +18,11 @@ else
|
||||
echo "$csvs" | sed 's/^/ - /' >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
À partir des CSV présents (en‑têtes multi‑lignes possibles), propose une méthode pour définir toutes les colonnes, types et validations, et pointer vers les docs à mettre à jour (API, ARCHITECTURE, USAGE).
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
6
scripts/agents/fondation_agent.sh
Normal file → Executable file
6
scripts/agents/fondation_agent.sh
Normal file → Executable file
@ -18,11 +18,11 @@ done
|
||||
|
||||
if [[ $issues -eq 0 ]]; then echo "- Conformité éditoriale de base: OK (présence des fichiers clés)." >> "$SUMMARY_FILE"; fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Évalue la conformité éditoriale (français, pas d’exemples applicatifs, intro/conclusion) et liste 5 actions d’amélioration priorisées.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/frontend_agent.sh
Normal file → Executable file
12
scripts/agents/frontend_agent.sh
Normal file → Executable file
@ -5,16 +5,22 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/frontend_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Frontend" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Définis des principes front: code splitting (React.lazy/Suspense), centralisation d’état (Redux/Context), abstraction des services, et tests associés.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(package.json tsconfig.json src/)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement frontend pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/gitea_agent.sh
Normal file → Executable file
12
scripts/agents/gitea_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/gitea_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Gitea" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(.gitea/ISSUE_TEMPLATE/bug_report.md .gitea/ISSUE_TEMPLATE/feature_request.md .gitea/PULL_REQUEST_TEMPLATE.md .gitea/workflows/ci.yml)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement Gitea pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
need=(.gitea/ISSUE_TEMPLATE/bug_report.md .gitea/ISSUE_TEMPLATE/feature_request.md .gitea/PULL_REQUEST_TEMPLATE.md .gitea/workflows/ci.yml)
|
||||
missing=()
|
||||
for f in "${need[@]}"; do [[ -f "$f" ]] || missing+=("$f"); done
|
||||
@ -20,11 +26,11 @@ else
|
||||
echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose des vérifications CI additionnelles Gitea (lint, tests, sécurité, scripts exécutables) et notifications en cas d’échecs.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
8
scripts/agents/lang_detect.sh
Normal file → Executable file
8
scripts/agents/lang_detect.sh
Normal file → Executable 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
|
||||
if has_file package.json; then HAS_NODE=1; fi
|
||||
if has_file tsconfig.json || git ls-files '*.ts' | grep -q . 2>/dev/null; then HAS_TYPESCRIPT=1; fi
|
||||
if has_file tsconfig.json || git -C "${TARGET_DIR:-.}" ls-files '*.ts' | grep -q . 2>/dev/null; then HAS_TYPESCRIPT=1; fi
|
||||
|
||||
# Go
|
||||
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
|
||||
|
||||
# Python
|
||||
if has_file pyproject.toml || has_file requirements.txt || git ls-files '*.py' | grep -q . 2>/dev/null; then HAS_PYTHON=1; fi
|
||||
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
|
||||
|
||||
# Shell (bash)
|
||||
if git ls-files '*.sh' | grep -q . 2>/dev/null; then HAS_SHELL_BASH=1; fi
|
||||
if git -C "${TARGET_DIR:-.}" ls-files '*.sh' | grep -q . 2>/dev/null; then HAS_SHELL_BASH=1; fi
|
||||
|
||||
# PowerShell (pwsh)
|
||||
if git ls-files '*.ps1' | grep -q . 2>/dev/null; then HAS_SHELL_PWSH=1; fi
|
||||
if git -C "${TARGET_DIR:-.}" ls-files '*.ps1' | grep -q . 2>/dev/null; then HAS_SHELL_PWSH=1; fi
|
||||
|
||||
# Exposer aussi l'état des outils lorsqu’ils 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
|
||||
|
12
scripts/agents/open_source_agent.sh
Normal file → Executable file
12
scripts/agents/open_source_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/open_source_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Open Source" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(LICENSE CONTRIBUTING.md CODE_OF_CONDUCT.md docs/OPEN_SOURCE_CHECKLIST.md)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement open source pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
need=(LICENSE CONTRIBUTING.md CODE_OF_CONDUCT.md docs/OPEN_SOURCE_CHECKLIST.md)
|
||||
missing=()
|
||||
for f in "${need[@]}"; do [[ -f "$f" ]] || missing+=("$f"); done
|
||||
@ -20,11 +26,11 @@ else
|
||||
echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose une checklist pour préparer l’ouverture open source (gouvernance, CI, sécurité, documentation) compatible avec Gitea.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
6
scripts/agents/performance_agent.sh
Normal file → Executable file
6
scripts/agents/performance_agent.sh
Normal file → Executable file
@ -16,11 +16,11 @@ else
|
||||
echo "- Dossier tests/performance manquant." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose un plan minimal de tests de performance reproductibles (outillage, métriques, critères de succès) et archivage des rapports.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
14
scripts/agents/qualite_formelle.sh
Normal file → Executable file
14
scripts/agents/qualite_formelle.sh
Normal file → Executable file
@ -1,6 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Chargement env utilisateur (~/.4nk_template/.env)
|
||||
"$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/env/ensure_env.sh" || true
|
||||
if [[ -f "${HOME}/.4nk_template/.env" ]]; then
|
||||
set -a
|
||||
. "${HOME}/.4nk_template/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
@ -21,11 +29,11 @@ if [[ $issues -eq 0 ]]; then
|
||||
echo "- Aucun problème formel bloquant détecté." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Évalue la qualité formelle (français uniquement, typographie, absence d’exemples applicatifs, intro/conclusion) et propose 5 recommandations priorisées.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
19
scripts/agents/quality_tech.sh
Normal file → Executable file
19
scripts/agents/quality_tech.sh
Normal file → Executable file
@ -1,6 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Chargement env utilisateur (~/.4nk_template/.env)
|
||||
"$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/env/ensure_env.sh" || true
|
||||
if [[ -f "${HOME}/.4nk_template/.env" ]]; then
|
||||
set -a
|
||||
. "${HOME}/.4nk_template/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Portée (all|changed)
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
@ -64,7 +75,7 @@ if [[ "$HAS_PYTHON" -eq 1 ]]; then
|
||||
fi
|
||||
if [[ "$HAS_SHELL_BASH" -eq 1 ]]; then
|
||||
if [[ "$HAS_SHELLCHECK" -eq 1 ]]; then
|
||||
(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"
|
||||
(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"
|
||||
else
|
||||
echo "- Shell: shellcheck non disponible" >> "$SUMMARY_FILE"
|
||||
fi
|
||||
@ -74,11 +85,11 @@ if [[ "$HAS_SHELL_PWSH" -eq 1 && "$HAS_PWSH" -eq 1 ]]; then
|
||||
fi
|
||||
|
||||
# IA (optionnelle)
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Analyse la conformité qualité technique du dépôt selon AGENTS.md et la CI. Priorise: lint/format/type-check, structure de tests, cohérence docs/CI, sécurité basique. Propose 5 actions concrètes.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
6
scripts/agents/resolution_agent.sh
Normal file → Executable file
6
scripts/agents/resolution_agent.sh
Normal file → Executable file
@ -16,11 +16,11 @@ else
|
||||
echo "- Dossier archive/ manquant (recommandé pour REX)." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Décris la boucle de triage complète (repro minimale, logs, bissection, hypothèses, tests ciblés, correctif, non‑régression) et quand produire un REX.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
@ -1,140 +0,0 @@
|
||||
Param(
|
||||
[string]$TargetDir='.',
|
||||
[string]$OutputDir='tests/reports/agents',
|
||||
[string]$Agent='all'
|
||||
)
|
||||
|
||||
$bashOk = $false
|
||||
try {
|
||||
& bash -lc 'echo ok' | Out-Null
|
||||
if ($LASTEXITCODE -eq 0) { $bashOk = $true }
|
||||
} catch {}
|
||||
|
||||
if ($bashOk) {
|
||||
& bash "scripts/agents/run.sh" $TargetDir $OutputDir $Agent
|
||||
exit $LASTEXITCODE
|
||||
}
|
||||
|
||||
# Fallback PowerShell (best-effort) lorsque bash n'est pas disponible
|
||||
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
|
||||
|
||||
function Write-Report($name, $lines) {
|
||||
$file = Join-Path $OutputDir $name
|
||||
$lines | Out-File -FilePath $file -Encoding UTF8 -Force
|
||||
Write-Host "Rapport: $file"
|
||||
}
|
||||
|
||||
Set-Location $TargetDir
|
||||
|
||||
switch ($Agent) {
|
||||
'documentation' {
|
||||
$missing = @()
|
||||
$required = @('docs/INDEX.md','docs/project/INDEX.md','docs/templates/INDEX.md')
|
||||
foreach ($f in $required) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Documentation', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Documentation essentielle présente.' }
|
||||
else { $content += '- Fichiers manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'documentation_agent.md' $content
|
||||
}
|
||||
'tests' {
|
||||
$need = @('tests/unit','tests/integration','tests/connectivity','tests/external','tests/performance','tests/logs','tests/reports')
|
||||
$missing = @(); foreach ($d in $need) { if (-not (Test-Path $d)) { $missing += $d } }
|
||||
$content = @('# Agent Tests', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Structure de tests conforme.' } else { $content += '- Dossiers manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'tests_agent.md' $content
|
||||
}
|
||||
'performance' {
|
||||
$content = @('# Agent Performance', '', '## Résultats (fallback PowerShell)')
|
||||
if (Test-Path 'tests/performance') { $content += '- tests/performance présent.' } else { $content += '- tests/performance manquant.' }
|
||||
Write-Report 'performance_agent.md' $content
|
||||
}
|
||||
'quality-technique' {
|
||||
$missing = @()
|
||||
$required = @('README.md','LICENSE','CONTRIBUTING.md','CODE_OF_CONDUCT.md','CHANGELOG.md','.gitea/workflows/ci.yml')
|
||||
foreach ($f in $required) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Qualité technique', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Fichiers de base présents.' }
|
||||
else { $content += '- Fichiers manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'quality_tech.md' $content
|
||||
}
|
||||
'open-source' {
|
||||
$missing = @()
|
||||
$required = @('LICENSE','CONTRIBUTING.md','CODE_OF_CONDUCT.md','docs/OPEN_SOURCE_CHECKLIST.md')
|
||||
foreach ($f in $required) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Open Source', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Pré‑requis open source présents.' }
|
||||
else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'open_source_agent.md' $content
|
||||
}
|
||||
'securite' {
|
||||
$missing = @(); foreach ($f in @('docs/SECURITY_AUDIT.md','.gitea/workflows/ci.yml')) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Sécurité', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Socle sécurité et CI présents.' } else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'security_agent.md' $content
|
||||
}
|
||||
'deploiement' {
|
||||
$missing = @(); foreach ($f in @('docs/DEPLOYMENT.md','.gitea/workflows/ci.yml')) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Déploiement', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Documentation et CI de déploiement présentes (à valider).' } else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'deployment_agent.md' $content
|
||||
}
|
||||
'dependances' {
|
||||
$content = @('# Agent Dépendances', '', '## Résultats (fallback PowerShell)','- Politique à documenter dans ARCHITECTURE/CONFIGURATION/CHANGELOG')
|
||||
Write-Report 'dependances_agent.md' $content
|
||||
}
|
||||
'compilation' {
|
||||
$content = @('# Agent Compilation', '', '## Résultats (fallback PowerShell)')
|
||||
if (Test-Path '.gitea/workflows/ci.yml') { $content += '- Étapes de build à vérifier dans la CI.' } else { $content += '- CI absente.' }
|
||||
Write-Report 'compilation_agent.md' $content
|
||||
}
|
||||
'resolution' {
|
||||
$content = @('# Agent Résolution', '', '## Résultats (fallback PowerShell)')
|
||||
if (Test-Path 'archive') { $content += '- Dossier archive/ présent pour REX.' } else { $content += '- Dossier archive/ manquant.' }
|
||||
Write-Report 'resolution_agent.md' $content
|
||||
}
|
||||
'ssh-scripts' {
|
||||
$found = @(); $paths = @('scripts/auto-ssh-push.sh','scripts/init-ssh-env.sh','scripts/setup-ssh-ci.sh','scripts/scripts/auto-ssh-push.sh','scripts/scripts/init-ssh-env.sh','scripts/scripts/setup-ssh-ci.sh')
|
||||
foreach ($p in $paths) { if (Test-Path $p) { $found += $p } }
|
||||
$content = @('# Agent SSH & scripts', '', '## Résultats (fallback PowerShell)')
|
||||
if ($found.Count -gt 0) { $content += '- Scripts trouvés:'; $found | ForEach-Object { $content += " - $_" } } else { $content += '- Aucun script standard détecté.' }
|
||||
if (Test-Path 'docs/SSH_UPDATE.md') { $content += '- docs/SSH_UPDATE.md présent.' }
|
||||
Write-Report 'ssh_scripts_agent.md' $content
|
||||
}
|
||||
'frontend' {
|
||||
$content = @('# Agent Frontend', '', '## Résultats (fallback PowerShell)','- Vérifier code splitting, état centralisé, abstraction services (si frontend présent).')
|
||||
Write-Report 'frontend_agent.md' $content
|
||||
}
|
||||
'gitea' {
|
||||
$need = @('.gitea/ISSUE_TEMPLATE/bug_report.md','.gitea/ISSUE_TEMPLATE/feature_request.md','.gitea/PULL_REQUEST_TEMPLATE.md','.gitea/workflows/ci.yml')
|
||||
$missing = @(); foreach ($f in $need) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Gitea', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- Configuration Gitea présente.' } else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'gitea_agent.md' $content
|
||||
}
|
||||
'versionnage' {
|
||||
$missing = @(); foreach ($f in @('CHANGELOG.md','TEMPLATE_VERSION')) { if (-not (Test-Path $f)) { $missing += $f } }
|
||||
$content = @('# Agent Versionnage', '', '## Résultats (fallback PowerShell)')
|
||||
if ($missing.Count -eq 0) { $content += '- CHANGELOG et TEMPLATE_VERSION présents.' } else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
|
||||
Write-Report 'versionnage_agent.md' $content
|
||||
}
|
||||
'sync-template' {
|
||||
$content = @('# Agent Synchronisation de template', '', '## Résultats (fallback PowerShell)')
|
||||
if (Test-Path '.gitea/workflows/template-sync.yml') { $content += '- Workflow template-sync présent.' } else { $content += '- Workflow template-sync manquant.' }
|
||||
if (Test-Path '.4nk-sync.yml') { $content += '- Manifeste .4nk-sync.yml présent.' } else { $content += '- Manifeste .4nk-sync.yml manquant.' }
|
||||
Write-Report 'sync_template_agent.md' $content
|
||||
}
|
||||
'derogations-locales' {
|
||||
$content = @('# Agent Dérogations locales', '', '## Résultats (fallback PowerShell)')
|
||||
if ((Test-Path 'LOCAL_OVERRIDES.yml') -or (Test-Path '.gitea/workflows/LOCAL_OVERRIDES.yml')) { $content += '- Fichier de dérogations détecté.' } else { $content += '- Aucun fichier de dérogations détecté.' }
|
||||
Write-Report 'derogations_locales_agent.md' $content
|
||||
}
|
||||
'all' {
|
||||
foreach ($a in @('documentation','tests','performance','quality-technique','open-source','securite','deploiement','dependances','compilation','resolution','ssh-scripts','frontend','gitea','versionnage','sync-template','derogations-locales')) {
|
||||
& $PSCommandPath -TargetDir $TargetDir -OutputDir $OutputDir -Agent $a
|
||||
}
|
||||
}
|
||||
default {
|
||||
Write-Error "Agent inconnu (fallback): $Agent"; exit 2
|
||||
}
|
||||
}
|
||||
exit 0
|
163
scripts/agents/run.sh
Normal file → Executable file
163
scripts/agents/run.sh
Normal file → Executable file
@ -12,94 +12,105 @@ fi
|
||||
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
AGENT="${3:-all}"
|
||||
|
||||
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() {
|
||||
cat <<USAGE
|
||||
Usage: $0 [target_dir] [output_dir] [agent]
|
||||
Agents:
|
||||
Fondamentaux: fondation, structure
|
||||
Documentation: documentation, donnees-csv, documents-bureautiques
|
||||
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
|
||||
all
|
||||
Par défaut: all
|
||||
Agents: fondation, structure, documentation, donnees-csv, documents-bureautiques,
|
||||
tests, performance, qualite-technique/quality-tech, dependances, compilation,
|
||||
resolution, ssh-scripts, frontend, open-source, gitea, versionnage,
|
||||
securite, deploiement, sync-template, derogations-locales, runner, all
|
||||
USAGE
|
||||
}
|
||||
|
||||
AGENT="${3:-all}"
|
||||
run_agent() {
|
||||
local script_name="$1"
|
||||
"$DIR/${script_name}" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
}
|
||||
|
||||
case "$AGENT" in
|
||||
quality-tech|qualite-technique)
|
||||
"$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
qualite-formelle|fondation)
|
||||
"$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR" || "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
structure)
|
||||
"$DIR/structure_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
tests)
|
||||
"$DIR/tests_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
performance)
|
||||
"$DIR/performance_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
documentation)
|
||||
"$DIR/documentation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
donnees-csv)
|
||||
"$DIR/donnees_csv_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
documents-bureautiques)
|
||||
"$DIR/documents_bureautiques_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
securite)
|
||||
"$DIR/security_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
|
||||
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" ;;
|
||||
runner) run_agent "runner_agent.sh" ;;
|
||||
quality-tech|qualite-technique) run_agent "quality_tech.sh" ;;
|
||||
qualite-formelle|fondation) "$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true; "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true ;;
|
||||
structure) run_agent "structure_agent.sh" ;;
|
||||
tests) run_agent "tests_agent.sh" ;;
|
||||
performance) run_agent "performance_agent.sh" ;;
|
||||
documentation) run_agent "documentation_agent.sh" ;;
|
||||
donnees-csv) run_agent "donnees_csv_agent.sh" ;;
|
||||
documents-bureautiques)run_agent "documents_bureautiques_agent.sh" ;;
|
||||
securite) run_agent "security_agent.sh" ;;
|
||||
deploiement) run_agent "deployment_agent.sh" ;;
|
||||
dependances) run_agent "dependances_agent.sh" ;;
|
||||
compilation) run_agent "compilation_agent.sh" ;;
|
||||
resolution) run_agent "resolution_agent.sh" ;;
|
||||
ssh-scripts) run_agent "ssh_scripts_agent.sh" ;;
|
||||
frontend) run_agent "frontend_agent.sh" ;;
|
||||
open-source) run_agent "open_source_agent.sh" ;;
|
||||
gitea) run_agent "gitea_agent.sh" ;;
|
||||
versionnage) run_agent "versionnage_agent.sh" ;;
|
||||
sync-template) run_agent "sync_template_agent.sh" ;;
|
||||
derogations-locales) run_agent "derogations_locales_agent.sh" ;;
|
||||
all)
|
||||
"$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR"
|
||||
"$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR"
|
||||
"$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
"$DIR/structure_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
"$DIR/tests_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
|
||||
"$DIR/performance_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
"$DIR/documentation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR"
|
||||
"$DIR/donnees_csv_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
"$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 ;;
|
||||
for a in \
|
||||
runner_agent.sh quality_tech.sh qualite_formelle.sh fondation_agent.sh structure_agent.sh \
|
||||
tests_agent.sh performance_agent.sh documentation_agent.sh donnees_csv_agent.sh \
|
||||
documents_bureautiques_agent.sh security_agent.sh deployment_agent.sh dependances_agent.sh \
|
||||
compilation_agent.sh resolution_agent.sh ssh_scripts_agent.sh frontend_agent.sh \
|
||||
open_source_agent.sh gitea_agent.sh versionnage_agent.sh sync_template_agent.sh derogations_locales_agent.sh; do
|
||||
"$DIR/$a" "$TARGET_DIR" "$OUTPUT_DIR" || true
|
||||
done ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) echo "Agent inconnu: $AGENT" >&2; usage; exit 2 ;;
|
||||
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"
|
||||
|
||||
# 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 ==="
|
||||
|
31
scripts/agents/runner_agent.sh
Executable file
31
scripts/agents/runner_agent.sh
Executable file
@ -0,0 +1,31 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
|
||||
mkdir -p "${OUTPUT_DIR}"
|
||||
report="${OUTPUT_DIR}/runner_agent.md"
|
||||
|
||||
echo "# Agent Runner" >"${report}"
|
||||
echo >>"${report}"
|
||||
|
||||
if ! command -v docker >/dev/null 2>&1; then
|
||||
echo "- Docker non détecté sur l'hôte. Impossible de gérer le runner." >>"${report}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ -f "runner/docker-compose.yml" ]]; then
|
||||
(
|
||||
cd runne
|
||||
# Démarre (ou met à jour) le runne
|
||||
docker compose up -d || true
|
||||
)
|
||||
echo "- Runner démarré/présent via docker compose (runner/docker-compose.yml)." >>"${report}"
|
||||
else
|
||||
echo "- Fichier runner/docker-compose.yml introuvable; aucun démarrage effectué." >>"${report}"
|
||||
fi
|
||||
|
||||
echo "- Rapports: ${report}" >>"${report}"
|
||||
exit 0
|
||||
|
12
scripts/agents/security_agent.sh
Normal file → Executable file
12
scripts/agents/security_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/security_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Sécurité" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(scripts/security/audit.sh .gitea/workflows/ci.yml docs/SECURITY_AUDIT.md)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement sécurité pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
echo "## Résultats locaux" >> "$SUMMARY_FILE"
|
||||
if [[ -x scripts/security/audit.sh ]]; then
|
||||
if scripts/security/audit.sh >> "$SUMMARY_FILE" 2>&1; then
|
||||
@ -21,11 +27,11 @@ else
|
||||
echo "- scripts/security/audit.sh introuvable ou non exécutable." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
À partir d’un dépôt template, propose 5 contrôles sécurité CI/CD additionnels (secrets, permissions, dépendances, scans) et un ordre de priorité.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/ssh_scripts_agent.sh
Normal file → Executable file
12
scripts/agents/ssh_scripts_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/ssh_scripts_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent SSH & scripts" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(scripts/auto-ssh-push.sh scripts/init-ssh-env.sh scripts/setup-ssh-ci.sh docs/SSH_UPDATE.md)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement SSH/scripts pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
paths=(
|
||||
scripts/auto-ssh-push.sh
|
||||
scripts/init-ssh-env.sh
|
||||
@ -27,11 +33,11 @@ if [[ $found -eq 0 ]]; then echo "- Scripts SSH standard introuvables (vérifier
|
||||
|
||||
if [[ -f docs/SSH_UPDATE.md ]]; then echo "- docs/SSH_UPDATE.md présent." >> "$SUMMARY_FILE"; fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose une checklist de conformité SSH (permissions, secrets CI, idempotence, journalisation non sensible) et intégration de contrôles CI.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/structure_agent.sh
Normal file → Executable file
12
scripts/agents/structure_agent.sh
Normal file → Executable file
@ -5,11 +5,17 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/structure_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Structure" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(docs .gitea scripts CHANGELOG.md AGENTS.md)
|
||||
any=0; for p in "${relevant[@]}"; do if [[ -e "$p" ]] && is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement structurel pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
need=(docs .gitea scripts CHANGELOG.md AGENTS.md)
|
||||
missing=()
|
||||
for p in "${need[@]}"; do [[ -e "$p" ]] || missing+=("$p"); done
|
||||
@ -21,11 +27,11 @@ else
|
||||
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Vérifie l’alignement avec l’arborescence 4NK_node et propose 5 corrections prioritaires (créations/archives/métadonnées) si des écarts sont détectés.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
6
scripts/agents/sync_template_agent.sh
Normal file → Executable file
6
scripts/agents/sync_template_agent.sh
Normal file → Executable file
@ -22,11 +22,11 @@ else
|
||||
echo "- Manifeste .4nk-sync.yml manquant." >> "$SUMMARY_FILE"
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose une procédure de synchronisation contrôlée (PR dédiée, vérif checksums/manifest_checksum, mise à jour TEMPLATE_VERSION, mise à jour CHANGELOG/INDEX).
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
23
scripts/agents/tests_agent.sh
Normal file → Executable file
23
scripts/agents/tests_agent.sh
Normal file → Executable file
@ -1,10 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Chargement env utilisateur (~/.4nk_template/.env)
|
||||
"$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/env/ensure_env.sh" || true
|
||||
if [[ -f "${HOME}/.4nk_template/.env" ]]; then
|
||||
set -a
|
||||
. "${HOME}/.4nk_template/.env"
|
||||
set +a
|
||||
fi
|
||||
|
||||
TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/tests_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Tests" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
@ -21,13 +30,21 @@ if ((${#missing[@]}==0)); then
|
||||
else
|
||||
echo "- Dossiers manquants:" >> "$SUMMARY_FILE"
|
||||
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
|
||||
if [[ "${AUTO_FIX:-0}" == "1" ]]; then
|
||||
echo >> "$SUMMARY_FILE"
|
||||
echo "## Auto‑corrections" >> "$SUMMARY_FILE"
|
||||
for m in "${missing[@]}"; do
|
||||
mkdir -p "$m" && echo "- Créé: $m" >> "$SUMMARY_FILE"
|
||||
done
|
||||
mkdir -p tests/reports/agents tests/logs || true
|
||||
fi
|
||||
fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Propose un plan court pour renforcer la pyramide de tests (unit, integration, connectivity, external, performance) pour ce template, avec 5 actions.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
12
scripts/agents/versionnage_agent.sh
Normal file → Executable file
12
scripts/agents/versionnage_agent.sh
Normal file → Executable file
@ -5,22 +5,28 @@ TARGET_DIR="${1:-.}"
|
||||
OUTPUT_DIR="${2:-tests/reports/agents}"
|
||||
mkdir -p "$OUTPUT_DIR"
|
||||
SUMMARY_FILE="$OUTPUT_DIR/versionnage_agent.md"
|
||||
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/common.sh" || true
|
||||
|
||||
echo "# Agent Versionnage" > "$SUMMARY_FILE"
|
||||
echo >> "$SUMMARY_FILE"
|
||||
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
if [[ "$SCOPE" == "changed" ]]; then
|
||||
relevant=(CHANGELOG.md TEMPLATE_VERSION)
|
||||
any=0; for p in "${relevant[@]}"; do if is_path_changed "$p"; then any=1; break; fi; done
|
||||
if [[ $any -eq 0 ]]; then echo "- Aucun changement versionnage pertinent (SCOPE=changed)." >> "$SUMMARY_FILE"; echo "Rapport: $SUMMARY_FILE"; popd >/dev/null; exit 0; fi
|
||||
fi
|
||||
ok=1
|
||||
for f in CHANGELOG.md TEMPLATE_VERSION; do
|
||||
if [[ ! -f "$f" ]]; then echo "- Manquant: $f" >> "$SUMMARY_FILE"; ok=0; fi
|
||||
done
|
||||
if [[ $ok -eq 1 ]]; then echo "- CHANGELOG et TEMPLATE_VERSION présents." >> "$SUMMARY_FILE"; fi
|
||||
|
||||
PROMPT=$(cat <<'P'
|
||||
PROMPT=$(cat <<'EOF'
|
||||
Décris la procédure d’alignement version ↔ changelog ↔ tag git (latest vs wip) et conditions de blocage release.
|
||||
P
|
||||
EOF
|
||||
)
|
||||
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
|
||||
|
||||
echo "Rapport: $SUMMARY_FILE"
|
||||
popd >/dev/null
|
||||
|
1
scripts/checks/version_alignment.sh
Normal file → Executable file
1
scripts/checks/version_alignment.sh
Normal file → Executable file
@ -19,3 +19,4 @@ fi
|
||||
|
||||
echo "Version alignment OK"
|
||||
|
||||
|
||||
|
2
scripts/deploy/setup.sh
Normal file → Executable file
2
scripts/deploy/setup.sh
Normal file → Executable file
@ -67,7 +67,7 @@ OPENAI_API_BASE=https://api.openai.com/v1
|
||||
OPENAI_TEMPERATURE=0.2
|
||||
|
||||
# Gitea (release via API)
|
||||
GITEA_BASE_URL=https://git.4nkweb.com
|
||||
BASE_URL=https://git.4nkweb.com
|
||||
RELEASE_TOKEN=
|
||||
EOF
|
||||
fi
|
||||
|
15
scripts/dev/run_container.sh
Executable file
15
scripts/dev/run_container.sh
Executable file
@ -0,0 +1,15 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
IMAGE_NAME="4nk-template-dev:debian"
|
||||
DOCKERFILE="docker/Dockerfile.debian"
|
||||
|
||||
echo "[build] ${IMAGE_NAME}"
|
||||
docker build -t "${IMAGE_NAME}" -f "${DOCKERFILE}" .
|
||||
|
||||
echo "[run] launching container and executing agents"
|
||||
docker run --rm -it \
|
||||
-v "${PWD}:/work" -w /work \
|
||||
"${IMAGE_NAME}" \
|
||||
"scripts/agents/run.sh; ls -la tests/reports/agents || true"
|
||||
|
14
scripts/dev/run_project_ci.sh
Executable file
14
scripts/dev/run_project_ci.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
# Build et lance le conteneur unifié (runner+agents) sur ce projet
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
ROOT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
||||
cd "$ROOT_DIR"
|
||||
|
||||
# Build image
|
||||
docker compose -f docker-compose.ci.yml build
|
||||
|
||||
# Exécuter agents par défaut
|
||||
RUNNER_MODE="${RUNNER_MODE:-agents}" BASE_URL="${BASE_URL:-}" REGISTRATION_TOKEN="${REGISTRATION_TOKEN:-}" \
|
||||
docker compose -f docker-compose.ci.yml up --remove-orphans --abort-on-container-exit
|
0
scripts/env/ensure_env.sh
vendored
Normal file → Executable file
0
scripts/env/ensure_env.sh
vendored
Normal file → Executable file
19
scripts/local/install_hooks.sh
Executable file
19
scripts/local/install_hooks.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/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)."
|
22
scripts/local/install_host_deps.sh
Executable file
22
scripts/local/install_host_deps.sh
Executable file
@ -0,0 +1,22 @@
|
||||
#!/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."
|
||||
|
25
scripts/local/merge_branch.sh
Executable file
25
scripts/local/merge_branch.sh
Executable file
@ -0,0 +1,25 @@
|
||||
#!/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"
|
11
scripts/local/precommit.sh
Executable file
11
scripts/local/precommit.sh
Executable file
@ -0,0 +1,11 @@
|
||||
#!/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)"
|
21
scripts/local/prepush.sh
Executable file
21
scripts/local/prepush.sh
Executable file
@ -0,0 +1,21 @@
|
||||
#!/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)"
|
20
scripts/local/release_local.sh
Executable file
20
scripts/local/release_local.sh
Executable file
@ -0,0 +1,20 @@
|
||||
#!/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"
|
51
scripts/local/run_agents_for_project.sh
Executable file
51
scripts/local/run_agents_for_project.sh
Executable file
@ -0,0 +1,51 @@
|
||||
#!/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 ==="
|
1
scripts/release/guard.sh
Normal file → Executable file
1
scripts/release/guard.sh
Normal file → Executable file
@ -64,3 +64,4 @@ esac
|
||||
|
||||
echo "[release-guard] OK"
|
||||
|
||||
|
||||
|
25
scripts/scripts/auto-ssh-push.sh
Normal file → Executable file
25
scripts/scripts/auto-ssh-push.sh
Normal file → Executable file
@ -26,8 +26,23 @@ fi
|
||||
echo "✅ Authentification SSH réussie"
|
||||
|
||||
# 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() {
|
||||
local branch=${1:-$(git branch --show-current)}
|
||||
local branch
|
||||
branch=${1:-$(get_current_branch)}
|
||||
local commit_message=${2:-"Auto-commit $(date '+%Y-%m-%d %H:%M:%S')"}
|
||||
|
||||
echo "🚀 Push automatique sur la branche: $branch"
|
||||
@ -35,7 +50,7 @@ auto_push() {
|
||||
# Ajouter tous les changements
|
||||
git add .
|
||||
|
||||
# Ne pas commiter si rien à commiter
|
||||
# Ne pas commiter si rien à commite
|
||||
if [[ -z "$(git diff --cached --name-only)" ]]; then
|
||||
echo "ℹ️ Aucun changement indexé. Skip commit/push."
|
||||
return 0
|
||||
@ -54,7 +69,7 @@ auto_push() {
|
||||
# Fonction pour push avec message personnalisé
|
||||
push_with_message() {
|
||||
local message="$1"
|
||||
local branch=${2:-$(git branch --show-current)}
|
||||
local branch=${2:-$(get_current_branch)}
|
||||
|
||||
echo "💬 Push avec message: $message"
|
||||
auto_push "$branch" "$message"
|
||||
@ -62,7 +77,7 @@ push_with_message() {
|
||||
|
||||
# Fonction pour push rapide (sans message)
|
||||
quick_push() {
|
||||
local branch=${1:-$(git branch --show-current)}
|
||||
local branch=${1:-$(get_current_branch)}
|
||||
auto_push "$branch"
|
||||
}
|
||||
|
||||
@ -77,7 +92,7 @@ push_branch() {
|
||||
|
||||
# Fonction pour push et merge vers main
|
||||
push_and_merge() {
|
||||
local source_branch=${1:-$(git branch --show-current)}
|
||||
local source_branch=${1:-$(get_current_branch)}
|
||||
local target_branch=${2:-main}
|
||||
|
||||
echo "🔄 Push et merge $source_branch -> $target_branch"
|
||||
|
4
scripts/scripts/init-ssh-env.sh
Normal file → Executable file
4
scripts/scripts/init-ssh-env.sh
Normal file → Executable file
@ -44,8 +44,8 @@ fi
|
||||
|
||||
# 4. 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 branch --show-current); }; f'
|
||||
git config --global alias.quick-push '!f() { git add . && git commit -m "Update $(date)" && git push origin $(git branch --show-current); }; f'
|
||||
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.quick-push '!f() { git add . && git commit -m "Update $(date)" && git push origin $(git rev-parse --abbrev-ref HEAD); }; f'
|
||||
print_success "Alias Git configurés"
|
||||
|
||||
# 5. Rendu exécutable des scripts si chemin standard
|
||||
|
0
scripts/scripts/setup-ssh-ci.sh
Normal file → Executable file
0
scripts/scripts/setup-ssh-ci.sh
Normal file → Executable file
1
scripts/security/audit.sh
Normal file → Executable file
1
scripts/security/audit.sh
Normal file → Executable file
@ -34,3 +34,4 @@ fi
|
||||
echo "[security-audit] terminé rc=$rc"
|
||||
exit $rc
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
Ce répertoire décrit la stratégie et l’organisation des tests exigées par le template 4NK.
|
||||
|
||||
## Pyramide de tests
|
||||
|
||||
- Unit: validation des unités logicielles
|
||||
- Integration: interactions multi-composants
|
||||
- Connectivity: réseau et endpoints
|
||||
@ -10,16 +11,20 @@ Ce répertoire décrit la stratégie et l’organisation des tests exigées par
|
||||
- Performance: charge et temps de réponse
|
||||
|
||||
## Exécution
|
||||
|
||||
- Local: exécuter les suites pertinentes et déposer les résultats dans `tests/reports`
|
||||
- CI: orchestrée par `.gitea/workflows/ci.yml`
|
||||
|
||||
## Journaux et rapports
|
||||
|
||||
- `tests/logs`: journaux d’exécution
|
||||
- `tests/reports`: rapports synthétiques
|
||||
|
||||
## Nettoyage
|
||||
|
||||
Utiliser `tests/cleanup.sh` après exécution.
|
||||
|
||||
## Critères d’acceptation
|
||||
|
||||
- Zéro échec avant commit
|
||||
- Documentation associée à jour dans `docs/TESTING.md`
|
||||
|
Loading…
x
Reference in New Issue
Block a user