961b3c0396
Stable working state after a long iteration session. The plugin now supports:
- Multi-Surface-Select für alle Element-Typen (Türen/Fenster/Treppen/Tragwerk)
- Wand-Z-Drag → unbound mode (UK/OK-Override, Wand vom Geschoss entkoppelt)
- Wand-Z-Drag nimmt verknüpfte Öffnungen mit (Brüstung += delta_z via Idle-Pfad)
- Öffnungs-XY-Drag snapt direktional auf Wand-Tangente
- Öffnungs-Z-Drag passt Brüstung an (Fenster sofort sync, Tür deferred)
- Wand-Delete kaskadiert Öffnungen (deferred via Idle, robust gegen _Rotate/_Move)
- Source-Cascade beim Öffnungs-Delete (deferred analog Wand-Kaskade)
- Listener-Cleanup robust gegen _reset_panels.py Reload (Refs in
_dossier_runtime_event_refs gespeichert, vor Re-Install deregistriert)
- _count_same_id_type filtert IsDeleted (verhindert Source-Duplikat-Bug bei Move)
- Frontend: Brüstungs-Slider für Tür ("Schwelle"), Flügel-Block nur bei Fenster
Plus aus früherer Phase dieser Session:
- Dossier-Launcher Auto-Load via Rhinos StartupCommands-XML
- Default-Pfad zeigt auf gebundeltes startup.py (out-of-the-box für neue User)
- Splash-Window beim Plugin-Load mit native macOS rounded corners
- Diverse Launcher-Verbesserungen (Brüstungs-Default, tauri.conf, capabilities)
Known issue: bei Multi-Select-Move mit vielen Sub-Volumen kann sporadisch
"Unable to transform" auftreten (Rhinos Move-Operation kollidiert mit Wand-
Regen). Tür-spezifischer Defer-Pfad mildert das, Fenster läuft sync.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
105 lines
3.6 KiB
Bash
Executable File
105 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Build + sign Dossier-Launcher fuer den Updater, und emit latest.json.
|
|
#
|
|
# Voraussetzungen:
|
|
# - Private Key liegt unter ~/.tauri/dossier_updater.key
|
|
# (einmalig erzeugen mit:
|
|
# npx tauri signer generate -w ~/.tauri/dossier_updater.key)
|
|
# - Version wurde in src-tauri/tauri.conf.json + package.json hochgezaehlt
|
|
#
|
|
# Ablauf:
|
|
# 1) npx tauri build (mit Signing-Env)
|
|
# 2) liest die erzeugte .sig-Datei
|
|
# 3) schreibt latest.json im launcher-Root mit URLs auf Gitea-Release-Assets
|
|
#
|
|
# Danach manuell:
|
|
# - auf Gitea einen Release mit Tag <VERSION> erstellen
|
|
# - die .app.tar.gz und (optional) die .dmg als Assets hochladen
|
|
# - latest.json committen + auf main pushen
|
|
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
|
|
KEY_PATH="${TAURI_SIGNING_PRIVATE_KEY_PATH:-$HOME/.tauri/dossier_updater.key}"
|
|
GITEA_REPO="https://git.kgva.ch/karim/DOSSIER"
|
|
|
|
# WICHTIG: `npx tauri ...` ohne Namespace zieht ausserhalb dieses Verzeichnisses
|
|
# das uralte tauri@0.15 von npm (das kein `signer` kennt). Wir nutzen den
|
|
# expliziten Paketnamen @tauri-apps/cli — der funktioniert von ueberall und
|
|
# auch innerhalb dieses Verzeichnisses, wo die devDependency ohnehin vorhanden ist.
|
|
TAURI_CLI="npx --yes @tauri-apps/cli"
|
|
|
|
if [ ! -f "$KEY_PATH" ]; then
|
|
echo "Private Key fehlt: $KEY_PATH" >&2
|
|
echo "Einmalig erzeugen mit:" >&2
|
|
echo " $TAURI_CLI signer generate -w $KEY_PATH" >&2
|
|
echo "und den public key (.pub) in src-tauri/tauri.conf.json -> plugins.updater.pubkey eintragen." >&2
|
|
exit 1
|
|
fi
|
|
|
|
VERSION=$(node -p "require('./src-tauri/tauri.conf.json').version")
|
|
PKG_VERSION=$(node -p "require('./package.json').version")
|
|
if [ "$VERSION" != "$PKG_VERSION" ]; then
|
|
echo "Version mismatch: tauri.conf.json=$VERSION package.json=$PKG_VERSION" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ARCH=$(uname -m)
|
|
case "$ARCH" in
|
|
arm64|aarch64) PLATFORM_KEY="darwin-aarch64" ;;
|
|
x86_64) PLATFORM_KEY="darwin-x86_64" ;;
|
|
*) echo "Unsupported arch: $ARCH" >&2; exit 1 ;;
|
|
esac
|
|
|
|
echo "→ Build Dossier $VERSION ($PLATFORM_KEY)"
|
|
TAURI_SIGNING_PRIVATE_KEY="$(cat "$KEY_PATH")" \
|
|
TAURI_SIGNING_PRIVATE_KEY_PASSWORD="" \
|
|
$TAURI_CLI build
|
|
|
|
BUNDLE_DIR="src-tauri/target/release/bundle/macos"
|
|
TAR_GZ=$(ls "$BUNDLE_DIR"/*.app.tar.gz 2>/dev/null | head -n1 || true)
|
|
SIG_FILE="${TAR_GZ}.sig"
|
|
|
|
if [ -z "$TAR_GZ" ] || [ ! -f "$SIG_FILE" ]; then
|
|
echo "Bundle oder Signatur fehlt in $BUNDLE_DIR" >&2
|
|
exit 1
|
|
fi
|
|
|
|
ASSET_NAME=$(basename "$TAR_GZ")
|
|
ASSET_URL_NAME=$(printf '%s' "$ASSET_NAME" | sed 's/ /%20/g')
|
|
SIGNATURE=$(cat "$SIG_FILE")
|
|
PUB_DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
DOWNLOAD_URL="$GITEA_REPO/releases/download/$VERSION/$ASSET_URL_NAME"
|
|
|
|
NOTES=${RELEASE_NOTES:-"Dossier $VERSION"}
|
|
|
|
cat > latest.json <<EOF
|
|
{
|
|
"version": "$VERSION",
|
|
"notes": $(node -e "process.stdout.write(JSON.stringify(process.argv[1]))" "$NOTES"),
|
|
"pub_date": "$PUB_DATE",
|
|
"platforms": {
|
|
"$PLATFORM_KEY": {
|
|
"signature": $(node -e "process.stdout.write(JSON.stringify(process.argv[1]))" "$SIGNATURE"),
|
|
"url": "$DOWNLOAD_URL"
|
|
}
|
|
}
|
|
}
|
|
EOF
|
|
|
|
echo
|
|
echo "✓ Build fertig"
|
|
echo " Bundle: $TAR_GZ"
|
|
echo " Signatur: $SIG_FILE"
|
|
echo " DMG: $(ls src-tauri/target/release/bundle/dmg/*.dmg 2>/dev/null | head -n1 || echo '(keine DMG gefunden)')"
|
|
echo " Platform: $PLATFORM_KEY"
|
|
echo " latest.json wurde im launcher-Root geschrieben."
|
|
echo
|
|
echo "Nächste Schritte:"
|
|
echo " 1) Auf Gitea Release mit Tag $VERSION erstellen und folgende Assets hochladen:"
|
|
echo " - $ASSET_NAME"
|
|
echo " - (optional) DMG für Erstinstallation"
|
|
echo " 2) latest.json committen + auf main pushen:"
|
|
echo " git add launcher/latest.json && git commit -m 'Release $VERSION' && git push origin main"
|