4NK_template/scripts/agents/quality_tech.sh

96 lines
3.6 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"
SUMMARY_FILE="$OUTPUT_DIR/quality_tech.md"
# Checks de base (adaptés à ce template)
mapfile -t required_files < <(cat <<'REQ'
README.md
LICENSE
CONTRIBUTING.md
CODE_OF_CONDUCT.md
CHANGELOG.md
docs/INDEX.md
docs/ARCHITECTURE.md
docs/TESTING.md
.gitea/workflows/ci.yml
REQ
)
pushd "$TARGET_DIR" >/dev/null
missing=()
for f in "${required_files[@]}"; do
[[ -f "$f" ]] || missing+=("$f")
done
echo "# Agent Qualité technique" > "$SUMMARY_FILE"
echo >> "$SUMMARY_FILE"
echo "## Résultats locaux" >> "$SUMMARY_FILE"
if ((${#missing[@]}==0)); then
echo "- Tous les fichiers requis sont présents." >> "$SUMMARY_FILE"
else
echo "- Fichiers manquants:" >> "$SUMMARY_FILE"
for m in "${missing[@]}"; do echo " - $m" >> "$SUMMARY_FILE"; done
fi
# Détection des langages et contrôles besteffort
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lang_detect.sh"
echo >> "$SUMMARY_FILE"
echo "## Contrôles automatiques (besteffort)" >> "$SUMMARY_FILE"
if [[ "$HAS_RUST" -eq 1 && "$HAS_CARGO" -eq 1 ]]; then
(cargo check -q && echo "- Rust: cargo check OK" >> "$SUMMARY_FILE") || echo "- Rust: cargo check a signalé des problèmes" >> "$SUMMARY_FILE"
fi
if [[ "$HAS_GO" -eq 1 && "$HAS_GO_BIN" -eq 1 ]]; then
(go vet ./... >/dev/null 2>&1 && echo "- Go: go vet OK" >> "$SUMMARY_FILE") || echo "- Go: go vet a signalé des problèmes" >> "$SUMMARY_FILE"
fi
if [[ "$HAS_NODE" -eq 1 && "$HAS_NPX" -eq 1 ]]; then
(npx -y --yes -- eslint . >/dev/null 2>&1 && echo "- Node: eslint OK" >> "$SUMMARY_FILE") || echo "- Node: eslint non exécuté ou problèmes" >> "$SUMMARY_FILE"
if [[ "$HAS_TYPESCRIPT" -eq 1 ]]; then
(npx -y --yes -- tsc --noEmit >/dev/null 2>&1 && echo "- TS: tsc --noEmit OK" >> "$SUMMARY_FILE") || echo "- TS: tsc a signalé des problèmes" >> "$SUMMARY_FILE"
fi
fi
if [[ "$HAS_PYTHON" -eq 1 ]]; then
if command -v ruff >/dev/null 2>&1; then
(ruff . >/dev/null 2>&1 && echo "- Python: ruff OK" >> "$SUMMARY_FILE") || echo "- Python: ruff a signalé des problèmes" >> "$SUMMARY_FILE"
elif command -v flake8 >/dev/null 2>&1; then
(flake8 . >/dev/null 2>&1 && echo "- Python: flake8 OK" >> "$SUMMARY_FILE") || echo "- Python: flake8 a signalé des problèmes" >> "$SUMMARY_FILE"
else
echo "- Python: aucun linter détecté (ruff/flake8)" >> "$SUMMARY_FILE"
fi
fi
if [[ "$HAS_SHELL_BASH" -eq 1 ]]; then
if [[ "$HAS_SHELLCHECK" -eq 1 ]]; then
(git -C "$TARGET_DIR" ls-files '*.sh' | xargs -r shellcheck >/dev/null 2>&1 && echo "- Shell: shellcheck OK" >> "$SUMMARY_FILE") || echo "- Shell: shellcheck a signalé des problèmes" >> "$SUMMARY_FILE"
else
echo "- Shell: shellcheck non disponible" >> "$SUMMARY_FILE"
fi
fi
if [[ "$HAS_SHELL_PWSH" -eq 1 && "$HAS_PWSH" -eq 1 ]]; then
echo "- PowerShell: PSScriptAnalyzer recommandé" >> "$SUMMARY_FILE"
fi
# IA (optionnelle)
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.
EOF
)
scripts/agents/ai_prompt.sh "$PROMPT" >> "$SUMMARY_FILE" || true
echo "Rapport: $SUMMARY_FILE"
popd >/dev/null