#!/usr/bin/env bash # # Grobe Erhebung der DORA-Kennzahlen aus Git und der Pipeline. # set -euo pipefail ZEITRAUM="${1:-90}" # Tage SEIT="$(date -d "${ZEITRAUM} days ago" +%Y-%m-%d)" echo "=== Zeitraum: letzte ${ZEITRAUM} Tage ===" # --- 1. Deployment-Frequenz: Tags auf produktiven Releases --- ANZAHL=$(git tag --list 'v*' --sort=-creatordate \ --format='%(creatordate:short) %(refname:short)' \ | awk -v seit="$SEIT" '$1 >= seit' | wc -l) echo "Deployment-Frequenz: ${ANZAHL} in ${ZEITRAUM} Tagen" echo " = $(echo "scale=2; ${ANZAHL}/${ZEITRAUM}" | bc) pro Tag" # --- 2. Lead Time: Commit-Zeit bis Tag-Zeit --- echo echo "Lead Time je Release (Stunden):" git tag --list 'v*' --sort=-creatordate --format='%(refname:short)' \ | head -20 | while read -r tag; do tag_zeit=$(git log -1 --format=%ct "$tag") erster=$(git log --format=%ct "${tag}" --not "${tag}^{}~20" 2>/dev/null | tail -1) [[ -z "$erster" ]] && continue echo " ${tag}: $(( (tag_zeit - erster) / 3600 ))" done # --- 3. Change Failure Rate: Anteil der Releases mit Revert/Hotfix --- FEHLER=$(git log --since="$SEIT" --oneline \ --grep='^revert' --grep='^hotfix' --grep='^fix!' -i -E | wc -l) echo echo "Change Failure Rate: ${FEHLER} von ${ANZAHL}" # --- 4. Time to Restore: aus dem Störungssystem, hier nicht automatisierbar --- echo echo "Time to Restore: aus Postmortems/Ticketsystem ermitteln"