forked from dlemstra/Magick.NET
-
Notifications
You must be signed in to change notification settings - Fork 0
/
publish.shared.ps1
98 lines (76 loc) · 3.67 KB
/
publish.shared.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Copyright Dirk Lemstra https://github.com/dlemstra/Magick.NET.
# Licensed under the Apache License, Version 2.0.
. $PSScriptRoot\..\tools\windows\utils.ps1
function addFile($xml, $source, $target) {
$files = $xml.package.files
$namespaceManager = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xml.NameTable
$namespaceManager.AddNamespace("nuspec", $xml.DocumentElement.NamespaceURI)
if ($xml.SelectSingleNode("//nuspec:file[@target='$target']", $namespaceManager) -ne $null) {
Write-Host "Skipping '$source' because '$target' was already added"
return
}
Write-Host "Adding '$source' as '$target'"
$file = $xml.CreateElement("file", $xml.DocumentElement.NamespaceURI)
$srcAtt = $xml.CreateAttribute("src")
$srcAtt.Value = $source
[void]$file.Attributes.Append($srcAtt)
$targetAtt = $xml.CreateAttribute("target")
$targetAtt.Value = $target
[void]$file.Attributes.Append($targetAtt)
[void]$files.AppendChild($file)
}
function addLibrary($xml, $library, $quantumName, $platform, $targetFramework) {
$libraryName = $library
if ($quantumName -ne "") {
$libraryName = "$library-$quantumName-$platform"
}
$source = fullPath "src\$library\bin\Release$quantumName\$platform\$targetFramework\$libraryName.dll"
$target = "lib\$targetFramework\$libraryName.dll"
addFile $xml $source $target
$source = fullPath "src\$library\bin\Release$quantumName\$platform\$targetFramework\$libraryName.xml"
$target = "lib\$targetFramework\$libraryName.xml"
addFile $xml $source $target
}
function copyNuGetPackages($destination) {
Remove-Item $destination -Recurse -ErrorAction Ignore
[void](New-Item -ItemType directory -Path $destination)
Copy-Item "*.nupkg" $destination
}
function createAndSignNuGetPackage($xml, $library, $version, $pfxPassword) {
$fileName = fullPath "publish\$library.nuspec"
$xml.Save($fileName)
$nuget = fullPath "tools\windows\nuget.exe"
& $nuget pack $fileName -NoPackageAnalysis
checkExitCode "Failed to create NuGet package"
if ($pfxPassword.Length -gt 0) {
$nupkgFile = fullPath "$library*.nupkg"
$certificate = fullPath "build\windows\ImageMagick.pfx"
& $nuget sign $nupkgFile -CertificatePath "$certificate" -CertificatePassword "$pfxPassword" -Timestamper http://sha256timestamp.ws.symantec.com/sha256/timestamp
checkExitCode "Failed to sign NuGet package"
}
}
function loadAndInitNuSpec($library, $version, $commit) {
$fileName = fullPath "publish\$library.nuspec"
$xml = [xml](Get-Content $fileName)
$namespaceManager = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xml.NameTable
$namespaceManager.AddNamespace("nuspec", $xml.DocumentElement.NamespaceURI)
if ($version.StartsWith("0.")) {
$xml.package.metadata.version = $version
$nodes = $xml.SelectNodes("//nuspec:dependency[@id='Magick.NET.Core']", $namespaceManager)
foreach ($node in $nodes) {
$node.SetAttribute("version", $version)
}
}
$repository = $xml.SelectSingleNode("//nuspec:repository", $namespaceManager)
$repository.SetAttribute("commit", $commit)
return $xml
}
function removetargetFramework($xml, $targetFramework) {
$namespaceManager = New-Object -TypeName "Xml.XmlNamespaceManager" -ArgumentList $xml.NameTable
$namespaceManager.AddNamespace("nuspec", $xml.DocumentElement.NamespaceURI)
$group = $xml.SelectSingleNode("//nuspec:group[@targetFramework='$targetFramework']", $namespaceManager)
if ($group -ne $null) {
Write-Host "Removing target framework '$targetFramework'"
$group.ParentNode.RemoveChild($group)
}
}