#!/bin/sh # desktop-version.sh -- Version aus dem letzten Freigabe-Tag in # tauri.conf.json und Cargo.toml schreiben (Phase 18, D-07). # # Die Wahrheit der Client-Version ist der Freigabe-Tag (git describe), nicht # eine im Repository eingecheckte Zahl -- dieses Skript liest den Tag und # schreibt ihn vor jedem Bau in beide Dateien. Geschrieben wird IMMER die # reine Form X.Y.Z, nie eine Vorab- oder Metadaten-Form (Pitfall 2: NSIS' # VIProductVersion/VIFileVersion sind rein numerisch, das ist eine # Windows-Ressourcen-Vorgabe, keine Tauri-Entscheidung). Die # Beta-vs-Freigabe-Unterscheidung lebt ausschliesslich im Dateinamen-Suffix # und in manifest.json (desktop-collect.sh), nicht hier. # # DESKTOP_TAG dient nur der lokalen Probe (siehe unten); im CI ist # `fetch-depth: 0` Pflicht, sonst findet `git describe` keinen Tag. # # Option --print: nur die ermittelte Version ausgeben, nichts schreiben. # # Dieses Skript kennt kein Secret. set -eu CONF="apps/desktop/src-tauri/tauri.conf.json" CARGO="apps/desktop/src-tauri/Cargo.toml" PRINT_ONLY=0 if [ "${1:-}" = "--print" ]; then PRINT_ONLY=1 fi if [ -n "${DESKTOP_TAG:-}" ]; then TAG="$DESKTOP_TAG" else if ! TAG="$(git describe --tags --abbrev=0 --match 'v[0-9]*' 2>/dev/null)"; then echo "Kein erreichbarer Freigabe-Tag (v*) -- im CI ist fetch-depth: 0 Pflicht." >&2 exit 1 fi fi VERSION="${TAG#v}" if ! printf '%s' "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then echo "Tag '$TAG' ergibt keine reine X.Y.Z-Version ('$VERSION') -- Vorab-/Metadatenformen werden nie geschrieben (Pitfall 2)." >&2 exit 1 fi if [ "$PRINT_ONLY" = "1" ]; then printf '%s\n' "$VERSION" exit 0 fi jq --arg v "$VERSION" '.version = $v' "$CONF" > "$CONF.tmp" && mv "$CONF.tmp" "$CONF" sed -i "s/^version = \".*\"/version = \"$VERSION\"/" "$CARGO" echo "Desktop-Version gesetzt: $VERSION (aus Tag $TAG)"