Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/sn4k3/UVtools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'build/CreateRelease.WPF.ps1')
-rw-r--r--build/CreateRelease.WPF.ps1244
1 files changed, 244 insertions, 0 deletions
diff --git a/build/CreateRelease.WPF.ps1 b/build/CreateRelease.WPF.ps1
new file mode 100644
index 0000000..e2f658c
--- /dev/null
+++ b/build/CreateRelease.WPF.ps1
@@ -0,0 +1,244 @@
+# When using System.IO.Compression.ZipFile.CreateFromDirectory in PowerShell, it still uses backslashes in the zip paths
+# despite this https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-ziparchiveentry-fullname-path-separator
+
+# Based upon post by Seth Jackson https://sethjackson.github.io/2016/12/17/path-separators/
+
+#
+# PowerShell 5 (WMF5) & 6
+# Using class Keyword https://msdn.microsoft.com/powershell/reference/5.1/Microsoft.PowerShell.Core/about/about_Classes
+#
+# https://gist.github.com/lantrix/738ebfa616d5222a8b1db947793bc3fc
+#
+
+####################################
+### Fix Zip slash ###
+####################################
+Add-Type -AssemblyName System.Text.Encoding
+Add-Type -AssemblyName System.IO.Compression.FileSystem
+
+class FixedEncoder : System.Text.UTF8Encoding {
+ FixedEncoder() : base($true) { }
+
+ [byte[]] GetBytes([string] $s)
+ {
+ $s = $s.Replace("\", "/");
+ return ([System.Text.UTF8Encoding]$this).GetBytes($s);
+ }
+}
+
+# Script working directory
+Set-Location $PSScriptRoot\..
+
+####################################
+### Configuration ###
+####################################
+$enableMSI = $true
+#$buildOnly = $null
+#$buildOnly = "win-x64"
+# Profilling
+$stopWatch = New-Object -TypeName System.Diagnostics.Stopwatch
+$deployStopWatch = New-Object -TypeName System.Diagnostics.Stopwatch
+$stopWatch.Start()
+
+
+# Variables
+$software = "UVtools"
+$project = "UVtools.WPF"
+$buildWith = "Release"
+$netFolder = "net5.0"
+$releaseFolder = "$project\bin\$buildWith\$netFolder"
+$objFolder = "$project\obj\$buildWith\$netFolder"
+$publishFolder = "publish"
+$platformsFolder = "UVtools.Platforms"
+
+$macIcns = "UVtools.CAD/UVtools.icns"
+
+#$version = (Get-Command "$releaseFolder\UVtools.dll").FileVersionInfo.ProductVersion
+$projectXml = [Xml] (Get-Content "$project\$project.csproj")
+$version = "$($projectXml.Project.PropertyGroup.Version)".Trim();
+if([string]::IsNullOrWhiteSpace($version)){
+ Write-Error "Can not detect the UVtools version, does $project\$project.csproj exists?"
+ exit
+}
+
+# MSI Variables
+$installers = @("UVtools.InstallerMM", "UVtools.Installer")
+$msiSourceFile = "UVtools.Installer\bin\Release\UVtools.msi"
+$msbuild = "`"${env:ProgramFiles(x86)}\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\MSBuild.exe`" /t:Build /p:Configuration=$buildWith /p:MSIProductVersion=$version"
+
+Write-Output "
+####################################
+### UVtools builder & deployer ###
+####################################
+Version: $version [$buildWith]
+"
+
+####################################
+### Clean up previous publish ###
+####################################
+# Clean up previous publish
+Remove-Item $publishFolder -Recurse -ErrorAction Ignore # Clean
+
+####################################
+### Self-contained runtimes ###
+####################################
+$runtimes =
+@{
+ "win-x64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @("UVtools.sh")
+ "include" = @()
+ }
+ "linux-x64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @()
+ "include" = @("libcvextern.so")
+ }
+ "arch-x64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @()
+ "include" = @("libcvextern.so")
+ }
+ "rhel-x64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @()
+ "include" = @("libcvextern.so")
+ }
+ "linux-arm64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @()
+ "include" = @("libcvextern.so")
+ }
+ #"unix-x64" = @{
+ # "extraCmd" = "-p:PublishReadyToRun=true"
+ # "exclude" = @("x86", "x64", "libcvextern.dylib")
+ #}
+ "osx-x64" = @{
+ "extraCmd" = "-p:PublishReadyToRun=true"
+ "exclude" = @()
+ "include" = @("libcvextern.dylib")
+ }
+}
+
+foreach ($obj in $runtimes.GetEnumerator()) {
+ if(![string]::IsNullOrWhiteSpace($buildOnly) -and !$buildOnly.Equals($obj.Name)) {continue}
+ # Configuration
+ $deployStopWatch.Restart()
+ $runtime = $obj.Name; # runtime name
+ $extraCmd = $obj.extraCmd; # extra cmd to run with dotnet
+ $targetZip = "$publishFolder/${software}_${runtime}_v$version.zip" # Target zip filename
+
+ # Deploy
+ Write-Output "################################
+Building: $runtime"
+ dotnet publish $project -o "$publishFolder/$runtime" -c $buildWith -r $runtime $extraCmd
+ if(!$runtime.Equals('win-x64'))
+ {
+ # Fix permissions
+ wsl chmod +x "$publishFolder/$runtime/UVtools" `|`| :
+ wsl chmod +x "$publishFolder/$runtime/UVtools.sh" `|`| :
+ }
+
+ # Cleanup
+ Remove-Item "$releaseFolder\$runtime" -Recurse -ErrorAction Ignore
+ Remove-Item "$objFolder\$runtime" -Recurse -ErrorAction Ignore
+ Write-Output "$releaseFolder\$runtime"
+
+ foreach ($excludeObj in $obj.Value.exclude) {
+ Write-Output "Excluding: $excludeObj"
+ Remove-Item "$publishFolder\$runtime\$excludeObj" -Recurse -ErrorAction Ignore
+ }
+
+ foreach ($includeObj in $obj.Value.include) {
+ Write-Output "Including: $includeObj"
+ Copy-Item "$platformsFolder\$runtime\$includeObj" -Destination "$publishFolder\$runtime" -Recurse -ErrorAction Ignore
+ }
+
+ Write-Output "Compressing $runtime to: $targetZip"
+ Write-Output $targetZip "$publishFolder/$runtime"
+
+ if($runtime.Equals('osx-x64')){
+ $macAppFolder = "${software}.app"
+ $macPublishFolder = "$publishFolder/${macAppFolder}"
+ $macInfoplist = "$platformsFolder/$runtime/Info.plist"
+ $macOutputInfoplist = "$macPublishFolder/Contents"
+ $macTargetZipLegacy = "$publishFolder/${software}_${runtime}-legacy_v$version.zip"
+
+ New-Item -ItemType directory -Path "$macPublishFolder"
+ New-Item -ItemType directory -Path "$macPublishFolder/Contents"
+ New-Item -ItemType directory -Path "$macPublishFolder/Contents/MacOS"
+ New-Item -ItemType directory -Path "$macPublishFolder/Contents/Resources"
+
+
+ Copy-Item "$macIcns" -Destination "$macPublishFolder/Contents/Resources"
+ ((Get-Content -Path "$macInfoplist") -replace '#VERSION',"$version") | Set-Content -Path "$macOutputInfoplist/Info.plist"
+ wsl cp -a "$publishFolder/$runtime/." "$macPublishFolder/Contents/MacOS"
+
+ wsl cd "$publishFolder/" `&`& pwd `&`& zip -r "../$targetZip" "$macAppFolder/*"
+ wsl cd "$publishFolder/$runtime" `&`& pwd `&`& zip -r "../../$macTargetZipLegacy" .
+
+ }
+ else {
+ wsl cd "$publishFolder/$runtime" `&`& pwd `&`& zip -r "../../$targetZip" .
+ }
+
+ # Zip
+ #Write-Output "Compressing $runtime to: $targetZip"
+ #Write-Output $targetZip "$publishFolder/$runtime"
+ #[System.IO.Compression.ZipFile]::CreateFromDirectory("$publishFolder\$runtime", $targetZip, [System.IO.Compression.CompressionLevel]::Optimal, $false, [FixedEncoder]::new())
+ #wsl cd "$publishFolder/$runtime" `&`& pwd `&`& chmod +x -f "./$software" `|`| : `&`& zip -r "../../$targetZip" "."
+ $deployStopWatch.Stop()
+ Write-Output "Took: $($deployStopWatch.Elapsed)
+################################
+"
+}
+
+# Universal package
+<#
+$deployStopWatch.Restart()
+$runtime = "universal-x86-x64"
+$targetZip = "$publishFolder\${software}_${runtime}_v$version.zip"
+
+Write-Output "################################
+Building: $runtime"
+dotnet build $project -c $buildWith
+
+Write-Output "Compressing $runtime to: $targetZip"
+[System.IO.Compression.ZipFile]::CreateFromDirectory($releaseFolder, $targetZip, [System.IO.Compression.CompressionLevel]::Optimal, $false, [FixedEncoder]::new())
+Write-Output "Took: $($deployStopWatch.Elapsed)
+################################
+"
+$stopWatch.Stop()
+#>
+
+# MSI Installer for Windows
+if($enableMSI)
+{
+ $deployStopWatch.Restart()
+ $runtime = 'win-x64'
+ $msiTargetFile = "$publishFolder\${software}_${runtime}_v$version.msi"
+ Write-Output "################################
+ Building: $runtime MSI Installer"
+
+ foreach($installer in $installers)
+ {
+ # Clean and build MSI
+ Remove-Item "$installer\obj" -Recurse -ErrorAction Ignore
+ Remove-Item "$installer\bin" -Recurse -ErrorAction Ignore
+ iex "& $msbuild $installer\$installer.wixproj"
+ }
+
+ Write-Output "Coping $runtime MSI to: $msiTargetFile"
+ Copy-Item $msiSourceFile $msiTargetFile
+
+ Write-Output "Took: $($deployStopWatch.Elapsed)
+ ################################
+ "
+}
+
+
+Write-Output "
+####################################
+### Completed ###
+####################################
+In: $($stopWatch.Elapsed)" \ No newline at end of file