#!/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 der einzigen Anwendung im Baum, sonst der Verzeichnisname. if [[ -n "${2:-}" ]]; then NAME="$2" else 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 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"