Files
schalli 614289a350 feat(18-01): Task 2 — Version aus dem Freigabe-Tag, Basislinie 1.1.0
desktop-version.sh (D-07): schreibt die reine X.Y.Z-Form des letzten
Freigabe-Tags in tauri.conf.json und Cargo.toml; --print nur zur
Anzeige, keine Vorab-/Metadatenform wird je geschrieben (Pitfall 2 —
NSIS-Ressourcen sind rein numerisch). Negativproben (v1.2.3-beta
abgelehnt, v2.0.0 akzeptiert aber ungeschrieben) bestehen.

Basislinie 1.1.0 (aktueller Tag v1.1.0) in tauri.conf.json, Cargo.toml,
Cargo.lock (cargo check) und package.json eingecheckt — die Wahrheit im
CI bleibt der Tag, dies ist nur die Vorgabe fuer lokale Baue.

Frischer AppImage-Bau mit der Basislinie bestaetigt: desktop-collect.sh
liefert jetzt Tessera-1.1.0.AppImage samt Manifest.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 16:10:07 +02:00

54 lines
1.8 KiB
Bash
Executable File

#!/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)"