96 lines
3.5 KiB
Bash
Executable File
96 lines
3.5 KiB
Bash
Executable File
#!/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 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
|