feat(ci,agents,docs): conteneur unifié runner+agents, AUTO_FIX, SCOPE, docs MAJ
This commit is contained in:
parent
a624d091a0
commit
dc92b4082a
15
README.md
15
README.md
@ -44,6 +44,21 @@ 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`)
|
||||
|
@ -1,16 +0,0 @@
|
||||
version: "3.8"
|
||||
services:
|
||||
dev:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: docker/Dockerfile.debian
|
||||
image: 4nk-template-dev:debian
|
||||
container_name: 4nk-template-dev
|
||||
stdin_open: true
|
||||
tty: true
|
||||
working_dir: /work
|
||||
volumes:
|
||||
- ./:/work
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
entrypoint: ["/bin/bash","-lc"]
|
||||
command: ["sleep infinity"]
|
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
|
||||
|
2
docs/INDEX.md
Normal file
2
docs/INDEX.md
Normal file
@ -0,0 +1,2 @@
|
||||
# Index
|
||||
|
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,6 +12,7 @@ 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
|
||||
|
||||
@ -23,6 +24,11 @@ Ce guide décrit comment utiliser et intégrer les agents de conformité (qualit
|
||||
- `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`
|
||||
|
||||
## 4. Agents disponibles
|
||||
|
||||
- Documentation (`documentation`): fichiers essentiels et index
|
||||
@ -53,12 +59,20 @@ 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
|
||||
|
@ -3,9 +3,21 @@
|
||||
## 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: 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)
|
||||
|
||||
## 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 +29,17 @@
|
||||
- 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)
|
||||
|
||||
## Gestion locale des secrets (~/.4nk_template/.env)
|
||||
|
||||
- Modèle fourni: `scripts/env/.env.template` (clés sans valeurs)
|
||||
|
@ -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
|
||||
```
|
||||
|
@ -25,15 +25,17 @@
|
||||
### Runner Gitea (labels)
|
||||
|
||||
- Configurez votre runner avec labels: `self-hosted,linux`
|
||||
- Exemple (act_runner):
|
||||
- Enregistrement: `./act_runner register --labels "self-hosted,linux"`
|
||||
- Service: définissez `RUNNER_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
|
||||
|
||||
|
@ -25,8 +25,12 @@ Ce document explique comment utiliser le template pour initier, documenter, cont
|
||||
|
||||
- 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`
|
||||
- Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement`
|
||||
- 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
|
||||
- Agents utiles en premier passage: `documentation`, `quality-technique`, `open-source`, `securite`, `deploiement`
|
||||
|
||||
## 5. Qualité et CI
|
||||
|
||||
|
19
scripts/agents/common.sh
Normal file
19
scripts/agents/common.sh
Normal 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 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
|
||||
}
|
@ -5,11 +5,17 @@ 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
|
||||
|
@ -5,12 +5,18 @@ 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
|
||||
|
@ -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
|
||||
|
@ -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,6 +21,25 @@ 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 <<'EOF'
|
||||
|
@ -5,6 +5,7 @@ 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"
|
||||
@ -14,6 +15,11 @@ Définis des principes front: code splitting (React.lazy/Suspense), centralisati
|
||||
EOF
|
||||
)
|
||||
pushd "$TARGET_DIR" >/dev/null
|
||||
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"
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -9,6 +9,9 @@ if [[ -f "${HOME}/.4nk_template/.env" ]]; then
|
||||
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"
|
||||
|
@ -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 += '- Pre-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 et 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
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -13,6 +13,7 @@ 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"
|
||||
@ -29,6 +30,14 @@ 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 <<'EOF'
|
||||
|
@ -5,11 +5,17 @@ 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
|
||||
|
Loading…
x
Reference in New Issue
Block a user