Files
2026-10-13 16:57:13 +02:00

48 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
set -Eeuo pipefail
# Gestuftes Ausrollen (13.10.2026, platform-docs ADR-0043): Kundengeräte
# ziehen die Rollen aus dem Repo ansible-content-stabil, Testorganisationen
# aus ansible-content (main). Dieses Skript gibt einen geprüften Stand von
# main frei, indem es ihn ins stabile Repo vorzieht.
#
# scripts/freigeben.sh zeigt, was freizugeben wäre
# scripts/freigeben.sh <commit> gibt bis einschließlich <commit> frei
#
# Nur vorwärts (kein --force): Ein Zurücksetzen des stabilen Stands ist eine
# bewusste Handarbeit, kein Tippfehler-Risiko dieses Skripts.
STABIL_URL="${TUXFLOTTE_STABIL_URL:-https://git.tuxflotte.de/admin/ansible-content-stabil.git}"
cd "$(git rev-parse --show-toplevel)"
git remote get-url stabil >/dev/null 2>&1 || git remote add stabil "${STABIL_URL}"
git fetch --quiet origin main
git fetch --quiet stabil main
stabil="$(git rev-parse stabil/main)"
echo "Freigegeben (stabil): $(git log -1 --format='%h %ad %s' --date=short "${stabil}")"
if [[ $# -eq 0 ]]; then
offen="$(git log --format=' %h %ad %s' --date=short "${stabil}..origin/main")"
if [[ -z "${offen}" ]]; then
echo "Nichts offen: stabil entspricht main."
else
echo "Noch nicht freigegeben (neueste zuerst):"
echo "${offen}"
echo "Freigeben mit: scripts/freigeben.sh <commit>"
fi
exit 0
fi
ziel="$(git rev-parse --verify "$1^{commit}")"
git merge-base --is-ancestor "${ziel}" origin/main ||
{ echo "Fehler: $1 liegt nicht auf origin/main." >&2; exit 1; }
git merge-base --is-ancestor "${stabil}" "${ziel}" ||
{ echo "Fehler: $1 liegt vor dem freigegebenen Stand (nur vorwärts)." >&2; exit 1; }
[[ "${ziel}" != "${stabil}" ]] || { echo "Schon freigegeben."; exit 0; }
echo "Gebe frei:"
git log --format=' %h %ad %s' --date=short "${stabil}..${ziel}"
git push stabil "${ziel}:refs/heads/main"
echo "Freigegeben bis $(git log -1 --format='%h %s' "${ziel}"). Kundengeräte übernehmen den Stand beim nächsten Check-in."