88 lines
3.3 KiB
PowerShell
88 lines
3.3 KiB
PowerShell
|
|
|
||
|
|
[CmdletBinding()]
|
||
|
|
param(
|
||
|
|
[string]$Version,
|
||
|
|
[switch]$SkipFlutterBuild
|
||
|
|
)
|
||
|
|
|
||
|
|
$ErrorActionPreference = 'Stop'
|
||
|
|
|
||
|
|
$ProjectRoot = Split-Path -Parent $PSScriptRoot
|
||
|
|
Set-Location $ProjectRoot
|
||
|
|
. (Join-Path $PSScriptRoot 'version-common.ps1')
|
||
|
|
Write-Host "==> Project root: $ProjectRoot" -ForegroundColor Cyan
|
||
|
|
|
||
|
|
if (-not $Version) {
|
||
|
|
$Version = Get-SmPlayerCurrentVersion -Platform windows -ProjectRoot $ProjectRoot
|
||
|
|
}
|
||
|
|
Write-Host "==> Version: $Version" -ForegroundColor Cyan
|
||
|
|
|
||
|
|
$IsccCandidates = @(
|
||
|
|
"$Env:ProgramFiles\Inno Setup 6\ISCC.exe",
|
||
|
|
"${Env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe",
|
||
|
|
"$Env:LOCALAPPDATA\Programs\Inno Setup 6\ISCC.exe",
|
||
|
|
"$Env:ProgramFiles\Inno Setup 5\ISCC.exe",
|
||
|
|
"${Env:ProgramFiles(x86)}\Inno Setup 5\ISCC.exe",
|
||
|
|
"$Env:LOCALAPPDATA\Programs\Inno Setup 5\ISCC.exe"
|
||
|
|
)
|
||
|
|
$Iscc = $IsccCandidates | Where-Object { Test-Path $_ } | Select-Object -First 1
|
||
|
|
if (-not $Iscc) {
|
||
|
|
$cmd = Get-Command iscc.exe -ErrorAction SilentlyContinue
|
||
|
|
if ($cmd) { $Iscc = $cmd.Source }
|
||
|
|
}
|
||
|
|
if (-not $Iscc) {
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "[X] ISCC.exe not found." -ForegroundColor Red
|
||
|
|
Write-Host " Install: https://jrsoftware.org/isdl.php" -ForegroundColor Yellow
|
||
|
|
Write-Host " Or: winget install -e --id JRSoftware.InnoSetup" -ForegroundColor Yellow
|
||
|
|
exit 1
|
||
|
|
}
|
||
|
|
Write-Host "==> ISCC: $Iscc" -ForegroundColor Cyan
|
||
|
|
|
||
|
|
if (-not $SkipFlutterBuild) {
|
||
|
|
Write-Host '==> flutter pub get' -ForegroundColor Cyan
|
||
|
|
& flutter pub get
|
||
|
|
if ($LASTEXITCODE -ne 0) { throw "flutter pub get failed (exit $LASTEXITCODE)" }
|
||
|
|
|
||
|
|
$prepareFvpScript = Join-Path $PSScriptRoot 'prepare-fvp-windows-deps.ps1'
|
||
|
|
& powershell -ExecutionPolicy Bypass -File $prepareFvpScript
|
||
|
|
if ($LASTEXITCODE -ne 0) {
|
||
|
|
throw "Failed to prepare pinned fvp Windows dependencies (exit $LASTEXITCODE)"
|
||
|
|
}
|
||
|
|
|
||
|
|
$flutterBuildArgs = @('build', 'windows', '--release', '--build-name', $Version)
|
||
|
|
$flutterBuildArgs = Add-SmPlayerVersionDartDefine -Arguments $flutterBuildArgs -Version $Version
|
||
|
|
|
||
|
|
Write-Host "==> flutter $($flutterBuildArgs -join ' ')" -ForegroundColor Cyan
|
||
|
|
$Env:FVP_DEPS_LATEST = $null
|
||
|
|
& flutter @flutterBuildArgs
|
||
|
|
if ($LASTEXITCODE -ne 0) { throw "flutter build failed (exit $LASTEXITCODE)" }
|
||
|
|
} else {
|
||
|
|
Write-Host "==> Skipping flutter build (--SkipFlutterBuild)" -ForegroundColor Yellow
|
||
|
|
}
|
||
|
|
|
||
|
|
$ReleaseDir = Join-Path $ProjectRoot "build\windows\x64\runner\Release"
|
||
|
|
$Exe = Join-Path $ReleaseDir "smplayer.exe"
|
||
|
|
if (-not (Test-Path $Exe)) {
|
||
|
|
throw "Build artifact not found: $Exe (re-run without -SkipFlutterBuild)"
|
||
|
|
}
|
||
|
|
|
||
|
|
$Iss = Join-Path $ProjectRoot "installer\sm_emby.iss"
|
||
|
|
$OutputDir = Join-Path $ProjectRoot "build\installer"
|
||
|
|
New-Item -ItemType Directory -Force -Path $OutputDir | Out-Null
|
||
|
|
|
||
|
|
Write-Host "==> Building installer" -ForegroundColor Cyan
|
||
|
|
& $Iscc "/DAppVersion=$Version" $Iss
|
||
|
|
if ($LASTEXITCODE -ne 0) { throw "ISCC failed (exit $LASTEXITCODE)" }
|
||
|
|
|
||
|
|
$Setup = Join-Path $OutputDir "smplayer-setup-$Version-x64.exe"
|
||
|
|
if (Test-Path $Setup) {
|
||
|
|
$size = (Get-Item $Setup).Length / 1MB
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "[OK] Installer generated:" -ForegroundColor Green
|
||
|
|
Write-Host " $Setup" -ForegroundColor Green
|
||
|
|
Write-Host (" Size: {0:N2} MB" -f $size) -ForegroundColor Green
|
||
|
|
} else {
|
||
|
|
Write-Host "[!] Expected artifact missing, check $OutputDir" -ForegroundColor Yellow
|
||
|
|
}
|