Build und Deploy getrennt: gemeinsames build.sh, Deploy-Skripte pro OS

build.sh baut nur noch (OS-Weiche für die Bundle-Liste: macOS app,dmg,
Linux deb,rpm, Git-Bash nsis); die macOS-Nachbereitung (lsregister,
.noindex) zieht nach deploy-macos.sh um. deploy-linux.sh installiert das
jüngste Bundle (dnf: rpm -Uvh --force, apt: dpkg -i),
deploy-windows.ps1 startet den NSIS-Installer.
This commit is contained in:
marcus hinz
2026-07-20 10:57:25 +02:00
parent b9d006184a
commit a1c95dae4a
4 changed files with 76 additions and 19 deletions
+20 -19
View File
@@ -1,4 +1,7 @@
#!/usr/bin/env bash
# Gemeinsamer Release-Build für macOS/Linux (Windows: unter Git-Bash läuft
# auch dieses Script). Baut nur — ausrollen macht das jeweilige
# deploy-<os>-Script.
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
@@ -8,22 +11,20 @@ export RUSTUP_HOME="$HOME/tools/.rustup"
export PATH="$CARGO_HOME/bin:$PATH"
cd "$DIR"
# CI=true: DMG ohne Finder-AppleScript (Fenster-Layout) bauen — das Script
# wäre aus Nicht-GUI-Shells TCC-blockiert.
CI=true npm run tauri build -- --bundles app,dmg "$@"
# Dev-Bundle in ein .noindex-Verzeichnis schieben und aus Launch Services
# austragen — Spotlight indiziert .noindex-Ordner nicht, damit erscheint im
# Starter/Spotlight nur die installierte Kopie unter ~/Applications.
BUNDLE="$DIR/src-tauri/target/release/bundle/macos"
NOINDEX="$DIR/src-tauri/target/release/bundle/macos.noindex"
LSREGISTER=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
# lsregister -u meldet -10814, wenn das Bundle nicht registriert ist —
# erwartetes Ergebnis, kein Fehler.
"$LSREGISTER" -u "$BUNDLE/ai-control.app" || true
rm -rf "$NOINDEX/ai-control.app"
mkdir -p "$NOINDEX"
mv "$BUNDLE/ai-control.app" "$NOINDEX/"
"$LSREGISTER" -u "$NOINDEX/ai-control.app" || true
echo "DMG: $(ls "$DIR"/src-tauri/target/release/bundle/dmg/*.dmg)"
case "$(uname -s)" in
Darwin)
# CI=true: DMG ohne Finder-AppleScript (Fenster-Layout) bauen — das Script
# wäre aus Nicht-GUI-Shells TCC-blockiert.
CI=true npm run tauri build -- --bundles app,dmg "$@"
;;
Linux)
npm run tauri build -- --bundles deb,rpm "$@"
;;
MINGW* | MSYS*)
npm run tauri build -- --bundles nsis "$@"
;;
*)
echo "unbekanntes OS: $(uname -s)" >&2
exit 1
;;
esac
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env bash
# Linux-Deploy nach build.sh: jüngstes Paket-Bundle installieren.
# dnf-Systeme: rpm -Uvh --force (installiert auch dieselbe Version neu),
# apt-Systeme: dpkg -i. Braucht sudo.
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUNDLE="$DIR/src-tauri/target/release/bundle"
if command -v dnf >/dev/null; then
PKG="$(ls -t "$BUNDLE"/rpm/ai-control-*.rpm | head -1)"
sudo rpm -Uvh --force "$PKG"
elif command -v dpkg >/dev/null; then
PKG="$(ls -t "$BUNDLE"/deb/ai-control_*.deb | head -1)"
sudo dpkg -i "$PKG"
else
echo "weder dnf noch dpkg gefunden" >&2
exit 1
fi
echo "installiert: $PKG"
echo "Haupt-App übers Tray beenden und neu starten (Migration läuft beim Start)."
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
# macOS-Deploy nach build.sh: Dev-Bundle aus Launch Services austragen und in
# ein .noindex-Verzeichnis schieben — Spotlight indiziert .noindex nicht, damit
# erscheint im Starter/Spotlight nur die installierte Kopie. Installiert wird
# über das DMG (Pfad am Ende).
set -euo pipefail
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BUNDLE="$DIR/src-tauri/target/release/bundle/macos"
NOINDEX="$DIR/src-tauri/target/release/bundle/macos.noindex"
LSREGISTER=/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister
# lsregister -u meldet -10814, wenn das Bundle nicht registriert ist —
# erwartetes Ergebnis, kein Fehler.
"$LSREGISTER" -u "$BUNDLE/ai-control.app" || true
rm -rf "$NOINDEX/ai-control.app"
mkdir -p "$NOINDEX"
mv "$BUNDLE/ai-control.app" "$NOINDEX/"
"$LSREGISTER" -u "$NOINDEX/ai-control.app" || true
echo "DMG: $(ls "$DIR"/src-tauri/target/release/bundle/dmg/*.dmg)"
+13
View File
@@ -0,0 +1,13 @@
# Windows-Deploy nach dem Build (--bundles nsis): jüngsten Installer starten.
$ErrorActionPreference = "Stop"
$dir = Split-Path -Parent $MyInvocation.MyCommand.Path
$installer = Get-ChildItem "$dir\src-tauri\target\release\bundle\nsis\ai-control_*-setup.exe" |
Sort-Object LastWriteTime -Descending | Select-Object -First 1
if (-not $installer) {
Write-Error "kein Installer gefunden — erst build.sh (Git-Bash) mit nsis-Bundle laufen lassen"
}
Start-Process -Wait $installer.FullName
Write-Output "installiert: $($installer.Name)"