39 lines
1.6 KiB
Bash
39 lines
1.6 KiB
Bash
#!/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"
|