fix(agents): LF + heredocs, charge .env conteneur, nettoyage rapports

This commit is contained in:
Nicolas Cantu 2025-08-28 09:47:01 +02:00
parent a5c9c6c742
commit 8316746724
29 changed files with 151 additions and 69 deletions

16
docker-compose.dev.yml Normal file
View File

@ -0,0 +1,16 @@
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"]

View File

@ -3,9 +3,8 @@ FROM debian:12-slim
ENV DEBIAN_FRONTEND=noninteractive ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \ RUN apt-get update \
&& apt-get install -y --no-install-recommends \ && apt-get install -y --no-install-recommends \
bash curl jq ca-certificates git \ bash curl jq ca-certificates git docker.io docker-compose-plugin \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
WORKDIR /work WORKDIR /work
ENTRYPOINT ["/bin/bash","-lc"] ENTRYPOINT ["/bin/bash","-lc"]

View File

@ -5,7 +5,7 @@ services:
container_name: gitea-act-runner container_name: gitea-act-runner
restart: unless-stopped restart: unless-stopped
env_file: env_file:
- ${HOME}/4nk_template/.env - ${USERPROFILE}/.4nk_template/.env
environment: environment:
- GITEA_RUNNER_LABELS=${RUNNER_LABELS:-self-hosted,linux} - GITEA_RUNNER_LABELS=${RUNNER_LABELS:-self-hosted,linux}
- GITEA_RUNNER_NAME=${RUNNER_NAME:-local-runner} - GITEA_RUNNER_NAME=${RUNNER_NAME:-local-runner}

View File

@ -4,6 +4,14 @@ set -euo pipefail
# Utilitaire générique pour appeler l'API OpenAI Chat Completions. # Utilitaire générique pour appeler l'API OpenAI Chat Completions.
# Prérequis: variable d'environnement OPENAI_API_KEY et curl. # 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 for bin in curl jq; do
if ! command -v "$bin" >/dev/null 2>&1; then if ! command -v "$bin" >/dev/null 2>&1; then
echo "$bin manquant. Installez $bin." >&2 echo "$bin manquant. Installez $bin." >&2

View File

@ -16,11 +16,11 @@ else
echo "- Étapes de compilation non détectées dans la CI (à ajouter si nécessaire)." >> "$SUMMARY_FILE" echo "- Étapes de compilation non détectées dans la CI (à ajouter si nécessaire)." >> "$SUMMARY_FILE"
fi 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -15,11 +15,11 @@ if grep -q "security-audit" .gitea/workflows/ci.yml 2>/dev/null; then
echo "- Job CI security-audit détecté." >> "$SUMMARY_FILE" echo "- Job CI security-audit détecté." >> "$SUMMARY_FILE"
fi 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. É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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -17,11 +17,11 @@ for f in docs/DEPLOYMENT.md docs/RELEASE_PLAN.md .gitea/workflows/ci.yml; do
done done
if [[ $ok -eq 1 ]]; then echo "- Prérequis documentaires présents." >> "$SUMMARY_FILE"; fi 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, postdeploy) adaptée à un template CI Gitea. Établis une checklist de déploiement minimale (préchecks, variables, smoke tests, rollback, postdeploy) 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -16,11 +16,11 @@ else
echo "- Aucun fichier de dérogations locales détecté." >> "$SUMMARY_FILE" echo "- Aucun fichier de dérogations locales détecté." >> "$SUMMARY_FILE"
fi 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -22,11 +22,11 @@ else
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
Élabore une liste courte daméliorations documentation (INDEX à jour, traçabilité changes ↔ CHANGELOG, sections sécurité/tests/déploiement). Élabore une liste courte damé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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -19,11 +19,11 @@ else
echo "- Utiliser docx2txt pour extraction et documenter dans docs/INDEX.md" >> "$SUMMARY_FILE" echo "- Utiliser docx2txt pour extraction et documenter dans docs/INDEX.md" >> "$SUMMARY_FILE"
fi 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -18,11 +18,11 @@ else
echo "$csvs" | sed 's/^/ - /' >> "$SUMMARY_FILE" echo "$csvs" | sed 's/^/ - /' >> "$SUMMARY_FILE"
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
À partir des CSV présents (entêtes multilignes possibles), propose une méthode pour définir toutes les colonnes, types et validations, et pointer vers les docs à mettre à jour (API, ARCHITECTURE, USAGE). À partir des CSV présents (entêtes multilignes 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View 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 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 dexemples applicatifs, intro/conclusion) et liste 5 actions damélioration priorisées. Évalue la conformité éditoriale (français, pas dexemples applicatifs, intro/conclusion) et liste 5 actions damé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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -9,12 +9,12 @@ SUMMARY_FILE="$OUTPUT_DIR/frontend_agent.md"
echo "# Agent Frontend" > "$SUMMARY_FILE" echo "# Agent Frontend" > "$SUMMARY_FILE"
echo >> "$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. 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 pushd "$TARGET_DIR" >/dev/null
"scripts/agents/ai_prompt.sh" "$PROMPT" >> "$SUMMARY_FILE" || true scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
echo "Rapport: $SUMMARY_FILE" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -20,11 +20,11 @@ else
echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
fi 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -20,11 +20,11 @@ else
echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done echo "- Manquants:" >> "$SUMMARY_FILE"; for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
Propose une checklist pour préparer louverture open source (gouvernance, CI, sécurité, documentation) compatible avec Gitea. Propose une checklist pour préparer louverture 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -16,11 +16,11 @@ else
echo "- Dossier tests/performance manquant." >> "$SUMMARY_FILE" echo "- Dossier tests/performance manquant." >> "$SUMMARY_FILE"
fi 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -1,6 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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:-.}" TARGET_DIR="${1:-.}"
OUTPUT_DIR="${2:-tests/reports/agents}" OUTPUT_DIR="${2:-tests/reports/agents}"
mkdir -p "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR"
@ -21,11 +29,11 @@ if [[ $issues -eq 0 ]]; then
echo "- Aucun problème formel bloquant détecté." >> "$SUMMARY_FILE" echo "- Aucun problème formel bloquant détecté." >> "$SUMMARY_FILE"
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
Évalue la qualité formelle (français uniquement, typographie, absence dexemples applicatifs, intro/conclusion) et propose 5 recommandations priorisées. Évalue la qualité formelle (français uniquement, typographie, absence dexemples 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -1,6 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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:-.}" TARGET_DIR="${1:-.}"
OUTPUT_DIR="${2:-tests/reports/agents}" OUTPUT_DIR="${2:-tests/reports/agents}"
mkdir -p "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR"
@ -74,11 +82,11 @@ if [[ "$HAS_SHELL_PWSH" -eq 1 && "$HAS_PWSH" -eq 1 ]]; then
fi fi
# IA (optionnelle) # 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -16,11 +16,11 @@ else
echo "- Dossier archive/ manquant (recommandé pour REX)." >> "$SUMMARY_FILE" echo "- Dossier archive/ manquant (recommandé pour REX)." >> "$SUMMARY_FILE"
fi 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, nonrégression) et quand produire un REX. Décris la boucle de triage complète (repro minimale, logs, bissection, hypothèses, tests ciblés, correctif, nonré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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -62,7 +62,7 @@ switch ($Agent) {
$required = @('LICENSE','CONTRIBUTING.md','CODE_OF_CONDUCT.md','docs/OPEN_SOURCE_CHECKLIST.md') $required = @('LICENSE','CONTRIBUTING.md','CODE_OF_CONDUCT.md','docs/OPEN_SOURCE_CHECKLIST.md')
foreach ($f in $required) { if (-not (Test-Path $f)) { $missing += $f } } foreach ($f in $required) { if (-not (Test-Path $f)) { $missing += $f } }
$content = @('# Agent Open Source', '', '## Résultats (fallback PowerShell)') $content = @('# Agent Open Source', '', '## Résultats (fallback PowerShell)')
if ($missing.Count -eq 0) { $content += '- Pré‑requis open source présents.' } if ($missing.Count -eq 0) { $content += '- Pre-requis open source présents.' }
else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } } else { $content += '- Manquants:'; $missing | ForEach-Object { $content += " - $_" } }
Write-Report 'open_source_agent.md' $content Write-Report 'open_source_agent.md' $content
} }
@ -95,7 +95,7 @@ switch ($Agent) {
'ssh-scripts' { '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') $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 } } foreach ($p in $paths) { if (Test-Path $p) { $found += $p } }
$content = @('# Agent SSH & scripts', '', '## Résultats (fallback PowerShell)') $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 ($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.' } if (Test-Path 'docs/SSH_UPDATE.md') { $content += '- docs/SSH_UPDATE.md présent.' }
Write-Report 'ssh_scripts_agent.md' $content Write-Report 'ssh_scripts_agent.md' $content

View File

@ -26,6 +26,7 @@ Agents:
Frontend: frontend Frontend: frontend
Open source et CI: open-source, gitea, versionnage, securite, deploiement Open source et CI: open-source, gitea, versionnage, securite, deploiement
Synchronisation: sync-template, derogations-locales Synchronisation: sync-template, derogations-locales
Runner: runne
all all
Par défaut: all Par défaut: all
USAGE USAGE
@ -34,6 +35,8 @@ USAGE
AGENT="${3:-all}" AGENT="${3:-all}"
case "$AGENT" in case "$AGENT" in
runner)
"$DIR/runner_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
quality-tech|qualite-technique) quality-tech|qualite-technique)
"$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;; "$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
qualite-formelle|fondation) qualite-formelle|fondation)
@ -75,6 +78,7 @@ case "$AGENT" in
derogations-locales) derogations-locales)
"$DIR/derogations_locales_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;; "$DIR/derogations_locales_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" ;;
all) all)
"$DIR/runner_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true
"$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR" "$DIR/quality_tech.sh" "$TARGET_DIR" "$OUTPUT_DIR"
"$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR" "$DIR/qualite_formelle.sh" "$TARGET_DIR" "$OUTPUT_DIR"
"$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true "$DIR/fondation_agent.sh" "$TARGET_DIR" "$OUTPUT_DIR" || true

View 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

View File

@ -21,11 +21,11 @@ else
echo "- scripts/security/audit.sh introuvable ou non exécutable." >> "$SUMMARY_FILE" echo "- scripts/security/audit.sh introuvable ou non exécutable." >> "$SUMMARY_FILE"
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
À partir dun dépôt template, propose 5 contrôles sécurité CI/CD additionnels (secrets, permissions, dépendances, scans) et un ordre de priorité. À partir dun 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -27,11 +27,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 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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -21,11 +21,11 @@ else
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
fi fi
PROMPT=$(cat <<'P' PROMPT=$(cat <<'EOF'
Vérifie lalignement avec larborescence 4NK_node et propose 5 corrections prioritaires (créations/archives/métadonnées) si des écarts sont détectés. Vérifie lalignement avec larborescence 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -22,11 +22,11 @@ else
echo "- Manifeste .4nk-sync.yml manquant." >> "$SUMMARY_FILE" echo "- Manifeste .4nk-sync.yml manquant." >> "$SUMMARY_FILE"
fi 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). 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -1,6 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail 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:-.}" TARGET_DIR="${1:-.}"
OUTPUT_DIR="${2:-tests/reports/agents}" OUTPUT_DIR="${2:-tests/reports/agents}"
mkdir -p "$OUTPUT_DIR" mkdir -p "$OUTPUT_DIR"
@ -23,11 +31,11 @@ else
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
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. 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -16,11 +16,11 @@ for f in CHANGELOG.md TEMPLATE_VERSION; do
done done
if [[ $ok -eq 1 ]]; then echo "- CHANGELOG et TEMPLATE_VERSION présents." >> "$SUMMARY_FILE"; fi 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 dalignement version ↔ changelog ↔ tag git (latest vs wip) et conditions de blocage release. Décris la procédure dalignement 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" echo "Rapport: $SUMMARY_FILE"
popd >/dev/null popd >/dev/null

View File

@ -35,7 +35,7 @@ auto_push() {
# Ajouter tous les changements # Ajouter tous les changements
git add . git add .
# Ne pas commiter si rien à commiter # Ne pas commiter si rien à commite
if [[ -z "$(git diff --cached --name-only)" ]]; then if [[ -z "$(git diff --cached --name-only)" ]]; then
echo " Aucun changement indexé. Skip commit/push." echo " Aucun changement indexé. Skip commit/push."
return 0 return 0