#!/usr/bin/env bash # Paketiert ein Release aus einem vorhandenen Tag. # # Auf Windows-Buildmaschinen ist -c core.autocrlf=false zwingend -- sonst landen # CRLF-Zeilenenden im Tarball und die Shell-Skripte scheitern auf dem Ziel mit # "bad interpreter". Das ist real passiert. # # Der Name kommt aus dem Repository, nicht aus einer festen Zeichenkette: die # beiden Anwendungen liegen in getrennten Repositorien, und ein # Lizenzserver-Release, das "tesm-..." heisst, verwechselt man genau einmal. set -euo pipefail TAG="${1:?Verwendung: release.sh vX.Y.Z [name]}" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" REPO_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" # Vorgabe: der Name des Repositoriums. Genau den erwartet der Bootstrap von # update.sh als Anhangsnamen ("$repo-$TAG.tar.gz"). Die Anwendung heisst nicht # immer so: im Repositorium tesm-license-master liegt die Anwendung # "tesm-license", und ein Anhang unter deren Namen waere nie zu finden. if [[ -n "${2:-}" ]]; then NAME="$2" else HERKUNFT="$(git -C "$REPO_DIR" config --get remote.origin.url 2>/dev/null || true)" if [[ -n "$HERKUNFT" ]]; then NAME="$(basename "$HERKUNFT" .git)" else # Ohne Gegenseite: die einzige Anwendung im Baum, sonst das Verzeichnis. mapfile -t APPS < <(ls -1 "$REPO_DIR/apps" 2>/dev/null || true) if [[ ${#APPS[@]} -eq 1 ]]; then NAME="${APPS[0]}"; else NAME="$(basename "$REPO_DIR")"; fi fi fi OUT="$NAME-$TAG.tar.gz" git -c core.autocrlf=false -C "$REPO_DIR" archive --format=tar.gz --prefix="$NAME/" -o "$OUT" "$TAG" echo "Erzeugt: $OUT" file "$OUT" echo "Pruefsumme:"; sha256sum "$OUT"