84 lines
3.7 KiB
Bash
84 lines
3.7 KiB
Bash
# 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"
|
||
}
|