Files
KX-Bridge-Release/release_lib.sh
2026-08-25 13:27:36 +02:00

84 lines
3.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <version> <tag1> [<tag2> ...]
# 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 <base_tag> <output_file> <title> [<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"
}