#!/bin/bash set -euo pipefail cmd=$(jq -r '.tool_input.command // ""') VALID_TYPES="feat|fix|docs|refactor|test|chore|perf|ci|build|style" extract_subject() { local cmd="$1" if echo "$cmd" | grep -qE "cat\s+<<"; then echo "$cmd" | sed -n "/cat </dev/null || echo "") if [ "$branch" = "main" ]; then printf '{"continue":false,"stopReason":"BLOCKIERT: Direkter Commit auf main verboten (globale Regel). Bitte zuerst Feature-Branch erstellen: git checkout -b session/YYYY-MM-DD-titel"}\n' exit 0 fi # Commit-Message: Conventional Commits Format pruefen subject=$(extract_subject "$cmd") if [ -n "$subject" ]; then if ! echo "$subject" | grep -qP "^(${VALID_TYPES})(\\(.+\\))?\\!?:\\s.+"; then printf '{"continue":false,"stopReason":"BLOCKIERT: Commit-Message folgt nicht dem Conventional-Commits-Format. Erwartet: : . Erlaubte Typen: feat, fix, docs, refactor, test, chore, perf, ci, build, style"}\n' exit 0 fi if [ ${#subject} -gt 72 ]; then printf '{"continue":false,"stopReason":"BLOCKIERT: Commit-Message Subject zu lang (%d Zeichen, max 72)."}\n' "${#subject}" exit 0 fi if echo "$subject" | grep -qP '\.\s*$'; then printf '{"continue":false,"stopReason":"BLOCKIERT: Commit-Message Subject darf nicht mit einem Punkt enden."}\n' exit 0 fi fi fi # apt -y verboten if echo "$cmd" | grep -qE '\bapt(-get)?\b' && echo "$cmd" | grep -qE '\bapt(-get)?\b.*\s-y\b'; then printf '{"continue":false,"stopReason":"BLOCKIERT: apt -y ist verboten. Bitte ohne -y ausfuehren, damit du die Zusammenfassung selbst bestaetigen kannst."}\n' exit 0 fi exit 0