#!/bin/bash # Benchmark: total code-quality issues across backend + frontend (lower is better). # Fixed linter set — see .auto/prompt.md. Never tune this file to game counts. set -euo pipefail cd "$(dirname "$0")/.." start=$(date +%s) # ---------- Backend: golangci-lint, repo config + fixed best-practice extras ---------- EXTRA_LINTERS="errorlint,errname,nilnil,forcetypeassert,copyloopvar,intrange,mirror,perfsprint,prealloc,usestdlibvars,modernize,sloglint,canonicalheader,nosprintfhostport,recvcheck,wastedassign" golang_out=$(golangci-lint run --enable="$EXTRA_LINTERS" 2>&1 || true) golang_total=0 while IFS= read -r line; do if [[ "$line" =~ ^\*\ ([a-zA-Z0-9_]+):\ ([0-9]+)$ ]]; then name="${BASH_REMATCH[1]}" n="${BASH_REMATCH[2]}" golang_total=$((golang_total + n)) echo "METRIC golint_${name}=$n" fi done <<< "$golang_out" echo "METRIC golint_total=$golang_total" # ---------- Frontend: eslint (repo gate) ---------- cd frontend eslint_out=$(pnpm exec eslint . --max-warnings 0 2>&1 || true) eslint_problems=0; eslint_errors=0; eslint_warnings=0 if [[ "$eslint_out" =~ ([0-9]+)\ problems? ]]; then eslint_problems="${BASH_REMATCH[1]}"; fi if [[ "$eslint_out" =~ \(([0-9]+)\ errors?, ]]; then eslint_errors="${BASH_REMATCH[1]}"; fi if [[ "$eslint_out" =~ ,\ ([0-9]+)\ warnings? ]]; then eslint_warnings="${BASH_REMATCH[1]}"; fi echo "METRIC eslint_problems=$eslint_problems" echo "METRIC eslint_errors=$eslint_errors" echo "METRIC eslint_warnings=$eslint_warnings" # ---------- Frontend: tsc (repo gate) ---------- tsc_out=$(pnpm exec tsc --noEmit --jsx preserve 2>&1 || true) tsc_errors=$(grep -cE "error TS" <<< "$tsc_out" || true) echo "METRIC tsc_errors=$tsc_errors" end=$(date +%s) total=$((golang_total + eslint_problems + tsc_errors)) echo "METRIC total_issues=$total" echo "METRIC measure_s=$((end - start))"