gitploy: outillage de déploiement git (deploy + hotfix transactionnels)

This commit is contained in:
2026-09-07 11:27:03 +02:00
commit 73b8910c73
6 changed files with 437 additions and 0 deletions
+35
View File
@@ -0,0 +1,35 @@
#!/usr/bin/env bash
# Helpers partagés par git-deploy et git-hotfix. À sourcer, pas à exécuter.
# Config git-native (aucun .env)
deploy_source() { git config deploy.source 2>/dev/null || echo master; }
deploy_push() { git config --bool deploy.push 2>/dev/null || echo false; }
# Erreur AVANT toute mutation : on sort sans rien avoir touché.
die() { echo "$*" >&2; exit 1; }
# Refuse de continuer si une opération git est déjà en cours (merge/rebase/…).
assert_clean_git_state() {
local gd; gd=$(git rev-parse --git-dir)
[ ! -e "$gd/MERGE_HEAD" ] || die "Un merge est déjà en cours. Termine-le d'abord."
[ ! -e "$gd/CHERRY_PICK_HEAD" ] || die "Un cherry-pick est en cours. Termine-le d'abord."
[ ! -e "$gd/REVERT_HEAD" ] || die "Un revert est en cours. Termine-le d'abord."
[ -z "$(ls -d "$gd"/rebase-* 2>/dev/null)" ] || die "Un rebase est en cours. Termine-le d'abord."
}
# Affiche l'état + le plan, puis demande confirmation. Non → sortie sans mutation.
confirm() {
echo
echo "── État actuel ─────────────────────────────"
git status --short --branch
echo "── Opérations prévues ──────────────────────"
printf '%s\n' "$1"
echo "────────────────────────────────────────────"
local ans=""
printf "Confirmer ? [O/n] "
read -r ans || ans=""
case "$ans" in
n|N|non|Non|NON|no) echo "✗ Annulé — aucun changement effectué."; exit 0 ;;
*) return 0 ;;
esac
}