generated from nhcarrigan/template
177 lines
5.4 KiB
Bash
Executable File
177 lines
5.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Build script for Windows NSIS installer from WSL2
|
|
# Pure Rust app - no Python dependencies!
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
BUILD_DIR="$PROJECT_ROOT/build"
|
|
INSTALLER_DIR="$BUILD_DIR/installer"
|
|
|
|
echo "========================================"
|
|
echo "Chronara Windows NSIS Build Script"
|
|
echo "(Pure Rust Edition)"
|
|
echo "========================================"
|
|
echo ""
|
|
|
|
# Clean previous build
|
|
echo "[1/5] Cleaning previous build..."
|
|
rm -rf "$BUILD_DIR"
|
|
mkdir -p "$BUILD_DIR"
|
|
mkdir -p "$INSTALLER_DIR"
|
|
|
|
# Create model download info (models downloaded on first run)
|
|
echo "[2/5] Creating model info for first-run download..."
|
|
mkdir -p "$PROJECT_ROOT/src-tauri/resources/models"
|
|
|
|
cat > "$PROJECT_ROOT/src-tauri/resources/models/download-info.json" << 'MODELINFO'
|
|
{
|
|
"llama": {
|
|
"filename": "Llama-3.2-3B-Instruct-Q4_K_M.gguf",
|
|
"url": "https://huggingface.co/bartowski/Llama-3.2-3B-Instruct-GGUF/resolve/main/Llama-3.2-3B-Instruct-Q4_K_M.gguf",
|
|
"size_bytes": 2019377152,
|
|
"description": "Llama 3.2 3B Instruct (Q4_K_M quantization)"
|
|
},
|
|
"whisper": {
|
|
"filename": "ggml-base.en.bin",
|
|
"url": "https://huggingface.co/ggerganov/whisper.cpp/resolve/main/ggml-base.en.bin",
|
|
"size_bytes": 147964211,
|
|
"description": "Whisper Base English model"
|
|
}
|
|
}
|
|
MODELINFO
|
|
echo " Created download-info.json"
|
|
|
|
# Build Tauri app for Windows
|
|
echo "[3/5] Building Tauri app for Windows..."
|
|
cd "$PROJECT_ROOT"
|
|
|
|
# Build frontend
|
|
echo " Building frontend..."
|
|
pnpm install
|
|
pnpm build
|
|
|
|
# Build Tauri with cargo-xwin for Windows MSVC target
|
|
echo " Building Tauri executable (this may take a while)..."
|
|
cd "$PROJECT_ROOT/src-tauri"
|
|
cargo xwin build --release --target x86_64-pc-windows-msvc
|
|
|
|
# Create NSIS installer
|
|
echo "[4/5] Creating NSIS installer..."
|
|
|
|
# Prepare installer staging directory
|
|
STAGE_DIR="$INSTALLER_DIR/stage"
|
|
mkdir -p "$STAGE_DIR"
|
|
mkdir -p "$STAGE_DIR/models"
|
|
|
|
# Copy the executable
|
|
cp "$PROJECT_ROOT/src-tauri/target/x86_64-pc-windows-msvc/release/chronara.exe" "$STAGE_DIR/Chronara.exe"
|
|
|
|
# Copy model download info
|
|
cp "$PROJECT_ROOT/src-tauri/resources/models/download-info.json" "$STAGE_DIR/models/"
|
|
|
|
# Create NSIS script
|
|
cat > "$INSTALLER_DIR/installer.nsi" << 'NSIS_EOF'
|
|
!include "MUI2.nsh"
|
|
!include "FileFunc.nsh"
|
|
|
|
SetCompressor /SOLID lzma
|
|
|
|
Name "Chronara"
|
|
OutFile "Chronara-Setup.exe"
|
|
InstallDir "$PROGRAMFILES64\Chronara"
|
|
InstallDirRegKey HKLM "Software\Chronara" "InstallDir"
|
|
RequestExecutionLevel admin
|
|
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
|
|
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
|
|
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
!insertmacro MUI_UNPAGE_CONFIRM
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
Section "Install"
|
|
SetOutPath "$INSTDIR"
|
|
|
|
; Install main executable
|
|
File "stage\Chronara.exe"
|
|
|
|
; Install models directory (contains download-info.json)
|
|
SetOutPath "$INSTDIR\models"
|
|
File /r "stage\models\*.*"
|
|
|
|
; Create start menu shortcuts
|
|
CreateDirectory "$SMPROGRAMS\Chronara"
|
|
CreateShortcut "$SMPROGRAMS\Chronara\Chronara.lnk" "$INSTDIR\Chronara.exe"
|
|
CreateShortcut "$SMPROGRAMS\Chronara\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
|
|
|
|
; Create desktop shortcut
|
|
CreateShortcut "$DESKTOP\Chronara.lnk" "$INSTDIR\Chronara.exe"
|
|
|
|
; Write registry keys
|
|
WriteRegStr HKLM "Software\Chronara" "InstallDir" "$INSTDIR"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara" "DisplayName" "Chronara"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara" "UninstallString" "$INSTDIR\Uninstall.exe"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara" "Publisher" "NHCarrigan"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara" "DisplayVersion" "0.1.0"
|
|
|
|
; Get installed size
|
|
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
|
|
IntFmt $0 "0x%08X" $0
|
|
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara" "EstimatedSize" "$0"
|
|
|
|
; Create uninstaller
|
|
WriteUninstaller "$INSTDIR\Uninstall.exe"
|
|
SectionEnd
|
|
|
|
Section "Uninstall"
|
|
; Remove files
|
|
RMDir /r "$INSTDIR\models"
|
|
Delete "$INSTDIR\Chronara.exe"
|
|
Delete "$INSTDIR\Uninstall.exe"
|
|
RMDir "$INSTDIR"
|
|
|
|
; Remove shortcuts
|
|
Delete "$SMPROGRAMS\Chronara\Chronara.lnk"
|
|
Delete "$SMPROGRAMS\Chronara\Uninstall.lnk"
|
|
RMDir "$SMPROGRAMS\Chronara"
|
|
Delete "$DESKTOP\Chronara.lnk"
|
|
|
|
; Remove registry keys
|
|
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Chronara"
|
|
DeleteRegKey HKLM "Software\Chronara"
|
|
SectionEnd
|
|
NSIS_EOF
|
|
|
|
# Run NSIS to create installer
|
|
echo "[5/5] Running NSIS..."
|
|
cd "$INSTALLER_DIR"
|
|
makensis installer.nsi
|
|
|
|
# Move installer to output location
|
|
mv "$INSTALLER_DIR/Chronara-Setup.exe" "$BUILD_DIR/"
|
|
|
|
echo ""
|
|
echo "========================================"
|
|
echo "Build complete!"
|
|
echo "========================================"
|
|
echo ""
|
|
echo "Output:"
|
|
echo " Installer: $BUILD_DIR/Chronara-Setup.exe"
|
|
echo ""
|
|
echo "The installer is much smaller now (~15-30MB vs ~500MB+)"
|
|
echo "since we're not bundling Python!"
|
|
echo ""
|
|
echo "First-run behavior:"
|
|
echo " 1. User downloads LLaMA model (~2GB) on first use"
|
|
echo " 2. User downloads Whisper model (~150MB) on first use"
|
|
echo ""
|