177 lines
7.0 KiB
PowerShell
177 lines
7.0 KiB
PowerShell
# rmtPocketWatcher Windows Build Script
|
|
# Creates both standalone executable and MSIX installer
|
|
|
|
param(
|
|
[switch]$Release = $false,
|
|
[switch]$Debug = $false
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Determine build mode
|
|
$BuildMode = if ($Release) { "release" } elseif ($Debug) { "debug" } else { "release" }
|
|
$BuildModeCapital = (Get-Culture).TextInfo.ToTitleCase($BuildMode)
|
|
|
|
Write-Host "Building rmtPocketWatcher for Windows ($BuildModeCapital mode)" -ForegroundColor Green
|
|
Write-Host "=============================================" -ForegroundColor Green
|
|
|
|
# Clean previous builds
|
|
Write-Host "Cleaning previous builds..." -ForegroundColor Yellow
|
|
flutter clean
|
|
if (Test-Path "build") {
|
|
Remove-Item -Recurse -Force "build"
|
|
}
|
|
|
|
# Install dependencies
|
|
Write-Host "Installing dependencies..." -ForegroundColor Yellow
|
|
flutter pub get
|
|
|
|
# Build Flutter Windows app
|
|
Write-Host "Building Flutter Windows app..." -ForegroundColor Yellow
|
|
flutter build windows --$BuildMode
|
|
|
|
# Check if build was successful
|
|
$ExePath = "build\windows\x64\runner\$BuildModeCapital\rmtpocketwatcher.exe"
|
|
if (-not (Test-Path $ExePath)) {
|
|
Write-Error "Build failed - executable not found at $ExePath"
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "✅ Flutter build completed successfully" -ForegroundColor Green
|
|
|
|
# Create standalone executable directory
|
|
$StandaloneDir = "build\windows\standalone"
|
|
Write-Host "Creating standalone executable package..." -ForegroundColor Yellow
|
|
|
|
if (Test-Path $StandaloneDir) {
|
|
Remove-Item -Recurse -Force $StandaloneDir
|
|
}
|
|
New-Item -ItemType Directory -Path $StandaloneDir -Force | Out-Null
|
|
|
|
# Copy all necessary files for standalone distribution
|
|
$SourceDir = "build\windows\x64\runner\$BuildModeCapital"
|
|
Copy-Item -Path "$SourceDir\*" -Destination $StandaloneDir -Recurse -Force
|
|
|
|
# Create version info
|
|
$Version = (Select-String -Path "pubspec.yaml" -Pattern "^version: (.+)$").Matches[0].Groups[1].Value -replace '\+.*', ''
|
|
$VersionInfo = @"
|
|
rmtPocketWatcher v$Version
|
|
Lambda Banking Conglomerate
|
|
Star Citizen AUEC Price Tracker
|
|
|
|
Built: $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')
|
|
Mode: $BuildModeCapital
|
|
|
|
To run: Double-click rmtpocketwatcher.exe
|
|
No installation required - all dependencies included.
|
|
"@
|
|
|
|
$VersionInfo | Out-File -FilePath "$StandaloneDir\VERSION.txt" -Encoding UTF8
|
|
|
|
Write-Host "✅ Standalone executable created at: $StandaloneDir" -ForegroundColor Green
|
|
|
|
# Sign the standalone executable
|
|
$CertPath = "certificates\rmtPocketWatcher.pfx"
|
|
if (Test-Path $CertPath) {
|
|
Write-Host "Signing standalone executable..." -ForegroundColor Yellow
|
|
try {
|
|
.\sign_executable.ps1 -ExePath "$StandaloneDir\rmtpocketwatcher.exe" -Force
|
|
} catch {
|
|
Write-Warning "Failed to sign executable: $($_.Exception.Message)"
|
|
Write-Host "Continuing without signing..." -ForegroundColor Yellow
|
|
}
|
|
} else {
|
|
Write-Host "No certificate found - executable will be unsigned" -ForegroundColor Yellow
|
|
Write-Host "Run .\create_certificate.ps1 to create a self-signed certificate" -ForegroundColor Yellow
|
|
}
|
|
|
|
# Create MSIX installer
|
|
Write-Host "Creating MSIX installer..." -ForegroundColor Yellow
|
|
try {
|
|
# Check for certificate
|
|
$CertPath = "certificates\rmtPocketWatcher.pfx"
|
|
$CertPassword = if ($env:MSIX_CERTIFICATE_PASSWORD) { $env:MSIX_CERTIFICATE_PASSWORD } else { "rmtPocketWatcher2024!" }
|
|
|
|
if (Test-Path $CertPath) {
|
|
Write-Host "Using certificate for signing: $CertPath" -ForegroundColor Cyan
|
|
$env:MSIX_CERTIFICATE_PATH = $CertPath
|
|
$env:MSIX_CERTIFICATE_PASSWORD = $CertPassword
|
|
} else {
|
|
Write-Host "No certificate found - creating unsigned MSIX" -ForegroundColor Yellow
|
|
Write-Host "Run .\create_certificate.ps1 to create a self-signed certificate" -ForegroundColor Yellow
|
|
}
|
|
|
|
flutter pub run msix:create
|
|
|
|
$MsixPath = Get-ChildItem -Path "build\windows\x64\runner\$BuildModeCapital" -Filter "*.msix" | Select-Object -First 1
|
|
if ($MsixPath) {
|
|
Write-Host "✅ MSIX installer created: $($MsixPath.FullName)" -ForegroundColor Green
|
|
|
|
# Sign the MSIX if certificate exists
|
|
if (Test-Path $CertPath) {
|
|
Write-Host "Signing MSIX installer..." -ForegroundColor Yellow
|
|
try {
|
|
$signtool = "${env:ProgramFiles(x86)}\Windows Kits\10\bin\10.0.22621.0\x64\signtool.exe"
|
|
if (-not (Test-Path $signtool)) {
|
|
# Try to find signtool in common locations
|
|
$signtool = Get-ChildItem -Path "${env:ProgramFiles(x86)}\Windows Kits" -Recurse -Name "signtool.exe" | Select-Object -First 1
|
|
if ($signtool) {
|
|
$signtool = "${env:ProgramFiles(x86)}\Windows Kits\$signtool"
|
|
}
|
|
}
|
|
|
|
if (Test-Path $signtool) {
|
|
& $signtool sign /f $CertPath /p $CertPassword /fd SHA256 /tr http://timestamp.digicert.com /td SHA256 $MsixPath.FullName
|
|
if ($LASTEXITCODE -eq 0) {
|
|
Write-Host "✅ MSIX installer signed successfully" -ForegroundColor Green
|
|
} else {
|
|
Write-Warning "Failed to sign MSIX installer"
|
|
}
|
|
} else {
|
|
Write-Warning "SignTool not found - install Windows SDK to enable signing"
|
|
}
|
|
} catch {
|
|
Write-Warning "Failed to sign MSIX: $($_.Exception.Message)"
|
|
}
|
|
}
|
|
} else {
|
|
Write-Warning "MSIX installer creation completed but file not found in expected location"
|
|
}
|
|
} catch {
|
|
Write-Warning "MSIX installer creation failed: $($_.Exception.Message)"
|
|
Write-Host "Continuing with standalone executable only..." -ForegroundColor Yellow
|
|
}
|
|
|
|
# Create distribution archive
|
|
Write-Host "Creating distribution archive..." -ForegroundColor Yellow
|
|
$ArchiveName = "rmtPocketWatcher-Windows-v$Version-$BuildMode.zip"
|
|
$ArchivePath = "build\$ArchiveName"
|
|
|
|
if (Test-Path $ArchivePath) {
|
|
Remove-Item $ArchivePath -Force
|
|
}
|
|
|
|
Compress-Archive -Path "$StandaloneDir\*" -DestinationPath $ArchivePath -CompressionLevel Optimal
|
|
|
|
Write-Host "✅ Distribution archive created: $ArchivePath" -ForegroundColor Green
|
|
|
|
# Summary
|
|
Write-Host "`n🎉 Build completed successfully!" -ForegroundColor Green
|
|
Write-Host "=============================================" -ForegroundColor Green
|
|
Write-Host "Standalone executable: $StandaloneDir\rmtpocketwatcher.exe" -ForegroundColor Cyan
|
|
Write-Host "Distribution archive: $ArchivePath" -ForegroundColor Cyan
|
|
|
|
if ($MsixPath) {
|
|
Write-Host "MSIX installer: $($MsixPath.FullName)" -ForegroundColor Cyan
|
|
}
|
|
|
|
Write-Host "`nTo test the standalone version:" -ForegroundColor Yellow
|
|
Write-Host " cd $StandaloneDir" -ForegroundColor White
|
|
Write-Host " .\rmtpocketwatcher.exe" -ForegroundColor White
|
|
|
|
Write-Host "`nTo distribute:" -ForegroundColor Yellow
|
|
Write-Host " - Share the ZIP file: $ArchiveName" -ForegroundColor White
|
|
Write-Host " - Users extract and run rmtpocketwatcher.exe" -ForegroundColor White
|
|
if ($MsixPath) {
|
|
Write-Host " - Or share the MSIX installer for Windows Store-style installation" -ForegroundColor White
|
|
} |