# release_lib.sh – gemeinsame Logging-/Docker-/Changelog-Helper für release.sh und # docker-publish-testing.sh. Wird per `source` eingebunden, kein eigenständiges Skript # (kein Shebang, kein `set -euo pipefail` hier – das übernimmt der aufrufende Caller). # ── Farben ─────────────────────────────────────────────────────────────────── RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' info() { echo -e "${CYAN}[release]${NC} $*"; } success() { echo -e "${GREEN}[release]${NC} $*"; } warn() { echo -e "${YELLOW}[release]${NC} $*"; } error() { echo -e "${RED}[release]${NC} $*" >&2; exit 1; } # docker_build_push [ ...] # Baut das kx-bridge-Image lokal via buildx (kxbuilder, 3 Plattformen) und pusht es # direkt in die Gitea-Registry. Ersetzt die vormals CI-seitige Build-Logik aus # release.yml/nightly.yml/testing.yml 1:1 (gleiche Flags, gleicher Builder-Name). docker_build_push() { local version="$1"; shift local -a tag_args=() for t in "$@"; do tag_args+=( -t "gitea.it-drui.de/viewit/kx-bridge:${t}" ); done [[ ${#tag_args[@]} -eq 0 ]] && error "docker_build_push: keine Tags angegeben" info "Docker buildx: kxbuilder aktivieren …" docker buildx inspect kxbuilder --bootstrap >/dev/null 2>&1 || { docker buildx create --name kxbuilder --driver docker-container --use docker buildx inspect kxbuilder --bootstrap } docker buildx use kxbuilder info "QEMU/binfmt sicherstellen …" docker run --rm --privileged tonistiigi/binfmt:latest --install all >/dev/null grep -q '"gitea.it-drui.de"' ~/.docker/config.json 2>/dev/null \ || error "Nicht bei gitea.it-drui.de eingeloggt — 'docker login gitea.it-drui.de' zuerst ausführen" info "docker buildx build --push (${tag_args[*]}) für Version $version …" ( cd "$DEV_REPO" && docker buildx build \ --platform linux/amd64,linux/arm64,linux/arm/v7 \ --push \ --provenance=false \ --no-cache \ "${tag_args[@]}" \ . ) success "Docker-Image gepusht: ${tag_args[*]}" } # author_changelog_entry [<seed_content_file>] # Öffnet $EDITOR auf einem Draft, vorausgefüllt mit dem Git-Log-Delta seit <base_tag> # (als Kommentar) plus optional dem Inhalt von <seed_content_file> (z.B. bestehende # NIGHTLY_CHANGELOG.md) als Startpunkt. Schreibt das editierte Ergebnis (Kommentarzeilen # entfernt) nach <output_file>. Bricht ab wenn nichts Sinnvolles übrig bleibt. author_changelog_entry() { local base="$1" outfile="$2" title="$3" seed_file="${4:-}" local draft draft=$(mktemp) { echo "# ${title}" echo "# Editiere den Text unten (oder ersetze ihn komplett)." echo "# Zeilen die mit '#' beginnen werden entfernt." echo "#" echo "# Roher Commit-Delta seit ${base:-<Repo-Anfang>} zur Orientierung:" gen_changelog "$base" | sed 's/^/# /' echo "#" if [[ -n "$seed_file" && -s "$seed_file" ]]; then echo "# ── Bestehender Inhalt (z.B. NIGHTLY_CHANGELOG.md) als Ausgangspunkt: ──" cat "$seed_file" else echo "### New" echo "- " echo "" echo "### Fixed" echo "- " fi } > "$draft" "${EDITOR:-nano}" "$draft" grep -v '^#' "$draft" > "$outfile" if [[ ! -s "$outfile" ]] || ! grep -q '^- ' "$outfile"; then rm -f "$draft" error "Changelog-Eintrag leer/kein Bullet gefunden — Release abgebrochen." fi rm -f "$draft" }