#!/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/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 best‑effort source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lang_detect.sh" echo >> "$SUMMARY_FILE" echo "## Contrôles automatiques (best‑effort)" >> "$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 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