Pre-Commit-Hooks
CodeGuard im CI ist Pflicht. CodeGuard lokal vor dem Commit ist Kür - spart aber Iterations-Zeit, weil ihr nicht erst auf den CI-Build warten müsst um zu sehen ob die Konvention eingehalten ist.
Mit Git-Hooks direkt
.git/hooks/pre-commit:
#!/bin/sh
set -e
# Schneller Check: nur Validierung der Regeln
codeguard validate || {
echo "❌ CodeGuard rules invalid. Fix .codeguard/rules/ before committing."
exit 1
}
# Optional: volle Analyse, nur Errors
codeguard analyze . --fail-on error --output console || {
echo ""
echo "❌ CodeGuard found blocking issues."
echo "Run 'codeguard analyze .' for details, or commit with --no-verify if you really want."
exit 1
}
chmod +x .git/hooks/pre-commit.
Auf Windows: dasselbe Skript funktioniert mit Git for Windows (Git Bash).
Mit pre-commit (das Python-Tool)
Wenn ihr pre-commit sowieso nutzt,
.pre-commit-config.yaml:
repos:
- repo: local
hooks:
- id: codeguard-validate
name: CodeGuard validate rules
entry: codeguard validate
language: system
pass_filenames: false
files: ^\.codeguard/
- id: codeguard-analyze
name: CodeGuard analyze
entry: codeguard analyze . --fail-on error
language: system
pass_filenames: false
types: [csharp]
Mit Husky (Node.js)
Für JS/TS-Repos die zufällig auch C# haben, oder gemischte Teams:
.husky/pre-commit:
#!/usr/bin/env sh
. "$(dirname -- "$0")/_/husky.sh"
codeguard analyze . --fail-on error
Hook nur bei C#-Änderungen ausführen
Eine volle Analyse vor jedem Commit kann auf großen Solutions länger
dauern. Spar dir den Lauf, wenn der Commit keine .cs-Files betrifft:
#!/bin/sh
CHANGED=$(git diff --cached --name-only --diff-filter=ACMR -- '*.cs')
if [ -z "$CHANGED" ]; then
exit 0
fi
codeguard analyze MySolution.sln --fail-on error
Empfohlene Strategie
| Schritt | Hook |
|---|---|
pre-commit |
codeguard validate (eine Sekunde) |
pre-push |
codeguard analyze . --fail-on error (warm Cache: ein paar Sekunden) |
| CI | codeguard analyze . --fail-on error (immer) |
So sind die Hooks im Hot Path schnell und ihr fangt grobe Patzer ab, ohne dass jeder Commit fünfzehn Sekunden dauert.