This commit is contained in:
Your Name
2026-08-22 10:46:13 +08:00
parent c06d293424
commit 43e5411b6a
39 changed files with 1607 additions and 300 deletions
+53 -5
View File
@@ -17,8 +17,12 @@ $Executable = Join-Path $Artifact "DoctorWorkstation.exe"
$DistributionRoot = Join-Path $ProjectRoot "dist"
$ReleaseLauncherTemplate = Join-Path $ProjectRoot "packaging\windows\start_release.bat"
$ReleaseLauncher = Join-Path $DistributionRoot "Start_DoctorWorkstation.bat"
$InstallerDefinition = Join-Path $ProjectRoot "packaging\windows\doctor_workstation.iss"
$EnsureInstallerCompiler = Join-Path $PSScriptRoot "ensure_inno_setup.ps1"
$InstallerMessagesFile = Join-Path $ProjectRoot ".build-tools\inno-languages\ChineseSimplified.isl"
$ProjectMetadata = Join-Path $ProjectRoot "pyproject.toml"
$MediaSmokeHook = Join-Path $ProjectRoot "packaging\runtime_media_smoke.py"
$WindowsIcon = Join-Path $ProjectRoot "resources\branding\app-icon.ico"
function Test-BuildPython {
param([Parameter(Mandatory = $true)][string]$Candidate)
@@ -51,7 +55,10 @@ try {
(Join-Path $ProjectRoot "uv.lock"),
$ProjectMetadata,
$MediaSmokeHook,
$ReleaseLauncherTemplate
$WindowsIcon,
$ReleaseLauncherTemplate,
$InstallerDefinition,
$EnsureInstallerCompiler
)) {
if (-not (Test-Path -LiteralPath $RequiredFile -PathType Leaf)) {
throw "Required build file is missing: $RequiredFile"
@@ -76,7 +83,7 @@ try {
-not (Test-BuildPython -Candidate $FallbackPython)) {
throw "Neither uv nor a usable Python environment with build dependencies was found."
}
Write-Host "Windows package entry validation passed."
Write-Host "Windows package entry validation passed. No artifacts were generated."
exit 0
}
@@ -161,6 +168,8 @@ try {
$ReleaseZip = Join-Path $DistributionRoot (
"DoctorWorkstation-Windows-x64-$ProjectVersion.zip"
)
$InstallerBaseName = "DoctorWorkstation-Setup-Windows-x64-$ProjectVersion"
$InstallerArtifact = Join-Path $DistributionRoot "$InstallerBaseName.exe"
$ChecksumFile = Join-Path $DistributionRoot "SHA256SUMS.txt"
Copy-Item -LiteralPath $ReleaseLauncherTemplate -Destination $ReleaseLauncher -Force
if (Test-Path -LiteralPath $ReleaseZip) {
@@ -192,15 +201,54 @@ try {
throw "Packaging completed without the expected ZIP: $ReleaseZip"
}
if (Test-Path -LiteralPath $InstallerArtifact) {
Remove-Item -LiteralPath $InstallerArtifact -Force
}
Write-Host "Preparing the pinned Inno Setup compiler..."
$InnoCompiler = (& $EnsureInstallerCompiler | Select-Object -Last 1)
if (-not $InnoCompiler -or
-not (Test-Path -LiteralPath $InnoCompiler -PathType Leaf)) {
throw "Unable to locate the Inno Setup compiler"
}
if (-not (Test-Path -LiteralPath $InstallerMessagesFile -PathType Leaf)) {
throw "Simplified Chinese installer messages are missing: $InstallerMessagesFile"
}
Write-Host "Creating the Windows installer..."
& $InnoCompiler `
"/DAppVersion=$ProjectVersion" `
"/DSourceDir=$Artifact" `
"/DOutputDir=$DistributionRoot" `
"/DSetupBaseName=$InstallerBaseName" `
"/DChineseMessagesFile=$InstallerMessagesFile" `
"/DAppIconFile=$WindowsIcon" `
$InstallerDefinition
if ($LASTEXITCODE -ne 0) {
throw "Inno Setup failed with exit code $LASTEXITCODE"
}
if (-not (Test-Path -LiteralPath $InstallerArtifact -PathType Leaf)) {
throw "Installer compilation completed without the expected artifact: $InstallerArtifact"
}
$ReleaseHash = (Get-FileHash -LiteralPath $ReleaseZip -Algorithm SHA256).Hash
$ChecksumLine = "$ReleaseHash $([System.IO.Path]::GetFileName($ReleaseZip))`r`n"
$InstallerHash = (Get-FileHash -LiteralPath $InstallerArtifact -Algorithm SHA256).Hash
$ChecksumLines = @(
"$InstallerHash $([System.IO.Path]::GetFileName($InstallerArtifact))",
"$ReleaseHash $([System.IO.Path]::GetFileName($ReleaseZip))"
)
$Utf8WithoutBom = New-Object System.Text.UTF8Encoding($false)
[System.IO.File]::WriteAllText($ChecksumFile, $ChecksumLine, $Utf8WithoutBom)
[System.IO.File]::WriteAllText(
$ChecksumFile,
(($ChecksumLines -join "`r`n") + "`r`n"),
$Utf8WithoutBom
)
Write-Host "Windows package complete." -ForegroundColor Green
Write-Host "Artifact: $Artifact" -ForegroundColor Green
Write-Host "Installer: $InstallerArtifact" -ForegroundColor Green
Write-Host "Release ZIP: $ReleaseZip" -ForegroundColor Green
Write-Host "SHA-256: $ReleaseHash" -ForegroundColor Green
Write-Host "Installer SHA-256: $InstallerHash" -ForegroundColor Green
Write-Host "ZIP SHA-256: $ReleaseHash" -ForegroundColor Green
exit 0
}
catch {