Skip to content

Pre-Commit-Hooks

CodeCharter schon lokal vor dem Commit laufen lassen.

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.