meldestelle/config/quality/check-no-hardcoded-versions.sh
StefanMoCoAt 8155707ba1 chore(ci, quality): introduce PR Guard workflow to detect hardcoded dependency versions
- Added `check-no-hardcoded-versions.sh` script to enforce centralized dependency version management.
- Configured GitHub Actions workflow (`pr-guard.yml`) to run the script on pull requests.
2026-01-31 18:45:24 +01:00

49 lines
2.1 KiB
Bash
Raw 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
# Guard: prevent hardcodierte Versionsangaben in Modul-Builddateien
# Erlaubt sind ausschließlich:
# - Zentrale Verwaltung in gradle/libs.versions.toml
# - Referenzen über libs.* Aliases oder ${libs.versions.*.get()} im :platform BOM
# - Ausnahmen müssen dokumentiert sein und mit // ALLOW_VERSION_JUSTIFIED kommentiert werden
ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
echo "[PR-GUARD] Prüfe auf hartcodierte Versionen in build.gradle(.kts) Dateien..."
# 1) Finde Abhängigkeits-Notation mit expliziter Versionsnummer z.B. "group:artifact:1.2.3"
# Erlaube explizit Einträge, die mit einem Kommentar ALLOW_VERSION_JUSTIFIED versehen sind
VIOLATIONS_A=$(grep -RIn \
--include='build.gradle' --include='build.gradle.kts' \
-E '"[^"\$]+:[0-9]+\.[0-9]+' \
--exclude-dir='.git' \
--exclude-dir='build' \
--exclude-dir='.gradle' \
--exclude='**/platform-bom/build.gradle.kts' \
--exclude='**/platform-dependencies/build.gradle.kts' \
"$ROOT_DIR" | grep -v 'ALLOW_VERSION_JUSTIFIED' || true)
# 2) Finde version = "1.2.3" in Gradle-Dateien (selten genutzt, aber absichern)
VIOLATIONS_B=$(grep -RIn \
--include='build.gradle' --include='build.gradle.kts' \
-E 'version\s*=\s*"[0-9]+\.[0-9]+' \
--exclude-dir='.git' \
--exclude-dir='build' \
--exclude-dir='.gradle' \
"$ROOT_DIR" | grep -v 'ALLOW_VERSION_JUSTIFIED' || true)
# 3) Ausnahmen: zentrale Dateien sind erlaubt
# - gradle/libs.versions.toml (nicht in include)
# - :platform BOM darf ${libs.versions.*.get()} verwenden (kein Match)
if [[ -n "$VIOLATIONS_A" || -n "$VIOLATIONS_B" ]]; then
echo "[PR-GUARD] Verletzungen gefunden (hartcodierte Versionen):"
[[ -n "$VIOLATIONS_A" ]] && echo "$VIOLATIONS_A"
[[ -n "$VIOLATIONS_B" ]] && echo "$VIOLATIONS_B"
echo "\n[HINWEIS] Bitte Versionen in gradle/libs.versions.toml pflegen und über libs.* / Platform-BOM referenzieren."
echo "[AUSNAHME] Falls zwingend erforderlich, kommentiere die betroffene Zeile mit // ALLOW_VERSION_JUSTIFIED und dokumentiere die Ausnahme in docs/01_Architecture/README.md."
exit 1
fi
echo "[PR-GUARD] OK keine hartcodierten Versionen gefunden."