Files
rmtPocketWatcher/flutter_app/build_windows.ps1
HRiggs 110c5d99a1
Some checks failed
Flutter Release / get-version (push) Successful in 7s
Flutter Release / build-windows (push) Failing after 9s
Flutter Release / create-release (push) Has been cancelled
Flutter Release / build-android (push) Has been cancelled
Signing, Installer, New Workflows
2025-12-15 00:05:29 -05:00

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
}