CodeCharter im CI ist Pflicht. CodeCharter 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
codecharter validate || {
echo "❌ CodeCharter rules invalid. Fix .codecharter/rules/ before committing."
exit 1
}
# Optional: volle Analyse, nur Errors
codecharter analyze . --fail-on error --output console || {
echo ""
echo "❌ CodeCharter found blocking issues."
echo "Run 'codecharter 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: codecharter-validate
name: CodeCharter validate rules
entry: codecharter validate
language: system
pass_filenames: false
files: ^\.codecharter/
- id: codecharter-analyze
name: CodeCharter analyze
entry: codecharter 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"
codecharter 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. Spart euch 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
codecharter analyze MySolution.sln --fail-on error
Empfohlene Strategie
| Schritt | Hook |
|---|---|
pre-commit |
codecharter validate (eine Sekunde) |
pre-push |
codecharter analyze . --fail-on error (warm Cache: ein paar Sekunden) |
| CI | codecharter 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.