- Notifications
You must be signed in to change notification settings - Fork 187
/
Copy pathNuspecHelper.ps1
127 lines (108 loc) · 5.78 KB
/
NuspecHelper.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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
functionSet-NuSpecValues(
[parameter(Position=1,Mandatory=$true)][ValidateScript({Test-Path$_-PathType Leaf})][string] $NuSpecFilePath,
[parameter(Position=2,Mandatory=$true)][string] $VersionNumber,
[parameter(Position=3,Mandatory=$true)][string] $IconUrl,
[parameter(Position=4)][hashtable[]] $Dependencies,
[parameter(Position=5)][string[]] $ReleaseNotes) {
$XmlDocument=New-Object System.Xml.XmlDocument
$XmlDocument.Load($NuSpecFilePath)
$MetadataElement= [System.Xml.XmlElement] $XmlDocument.DocumentElement.FirstChild
if($MetadataElement)
{
Set-Dependencies-XmlDocument $XmlDocument-MetadataElement $MetadataElement-Dependencies $Dependencies
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "version"-ElementValue $VersionNumber
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "iconUrl"-ElementValue $IconUrl
if($ReleaseNotes){
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "releaseNotes"-ElementValue $ReleaseNotes
}
}
$XmlDocument.Save($NuSpecFilePath)
}
functionSet-NuSpecValuesFromManifest(
[parameter(Position=1,Mandatory=$true)][ValidateScript({Test-Path$_-PathType Leaf})][string] $NuSpecFilePath,
[parameter(Position=2,Mandatory=$true)][HashTable] $Manifest) {
$XmlDocument=New-Object System.Xml.XmlDocument
$XmlDocument.Load($NuSpecFilePath)
$MetadataElement= [System.Xml.XmlElement] $XmlDocument.DocumentElement.FirstChild
if($MetadataElement)
{
Set-Dependencies-XmlDocument $XmlDocument-MetadataElement $MetadataElement-Dependencies $Manifest["dependencies"]
$Manifest.Remove("dependencies")
if ($Manifest["prerelease"]) {
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "version"-ElementValue "$($Manifest["version"])-$($Manifest["prerelease"])"
} else {
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "version"-ElementValue $Manifest["version"]
}
$Manifest.Remove("version")
$Manifest.Remove("prerelease")
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "projectUrl"-ElementValue $Manifest["projectUri"]
$Manifest.Remove("projectUri")
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "licenseUrl"-ElementValue $Manifest["licenseUri"]
$Manifest.Remove("licenseUri")
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName "iconUrl"-ElementValue $Manifest["iconUri"]
$Manifest.Remove("iconUri")
foreach($NuspecFieldin$Manifest.Keys)
{
Set-ElementValue-XmlDocument $XmlDocument-MetadataElement $MetadataElement-ElementName $NuspecField-ElementValue $Manifest[$NuspecField]
}
}
$XmlDocument.Save($NuSpecFilePath)
}
functionSet-ElementValue(
[System.Xml.XmlDocument] $XmlDocument,
[System.Xml.XmlElement] $MetadataElement,
[string] $ElementName,
[string] $ElementValue) {
if(-not$MetadataElement[$ElementName]){
$NewElement=$XmlDocument.CreateElement($ElementName,$XmlDocument.DocumentElement.NamespaceURI)
$MetadataElement.AppendChild($NewElement) |Out-Null
}
$MetadataElement[$ElementName].InnerText =$ElementValue
}
functionSet-Dependencies(
[System.Xml.XmlDocument] $XmlDocument,
[System.Xml.XmlElement] $MetadataElement,
[hashtable[]] $Dependencies) {
if(-not$MetadataElement["dependencies"]){
$NewDependenciesElement=$XmlDocument.CreateElement("dependencies",$XmlDocument.DocumentElement.NamespaceURI)
$MetadataElement.AppendChild($NewDependenciesElement) |Out-Null
} else {
$MetadataElement["dependencies"].RemoveAll()
}
foreach($Dependencyin$Dependencies){
$NewDependencyElement=$XmlDocument.CreateElement("dependency",$XmlDocument.DocumentElement.NamespaceURI)
$NewDependencyElement.SetAttribute("id",$Dependency.ModuleName)
if ($Dependency.ModuleVersion) {
$FullVersion=$Dependency.PreRelease?"$($Dependency.ModuleVersion)-$($Dependency.PreRelease)" : $Dependency.ModuleVersion
$NewDependencyElement.SetAttribute("version",$FullVersion)
} else {
$FullVersion=$Dependency.PreRelease?"$($Dependency.RequiredVersion)-$($Dependency.PreRelease)" : $Dependency.RequiredVersion
$NewDependencyElement.SetAttribute("version","[$FullVersion]")
}
$MetadataElement["dependencies"].AppendChild($NewDependencyElement) |Out-Null
}
}
functionRemove-Element(
[System.Xml.XmlDocument] $XmlDocument,
[System.Xml.XmlElement] $MetadataElement,
[string] $ElementName) {
if($MetadataElement[$ElementName]){
$MetadataElement.RemoveChild($MetadataElement[$ElementName])
}
}
<#
Remove Markdown Docs Element from the Nuspec File.
This is fixed in autorest code generator
https://github.com/Azure/autorest.powershell/blob/4e5e47e874747ce9cfbf88981538654dd2bafe4f/powershell/generators/nuspec.ts#L42
#>
functionRemove-MarkdownDocsElement(
[parameter(Position=1,Mandatory=$true)]
[ValidateScript({Test-Path$_-PathType Leaf})][string] $NuSpecFilePath){
$XmlDocument=New-Object System.Xml.XmlDocument
$XmlDocument.Load($NuSpecFilePath)
$docsNode=$XmlDocument.DocumentElement.Files.ChildNodes|Where-Object { $_.target-eq'docs'}
$XmlDocument.DocumentElement.Files.RemoveChild($docsNode) |Out-Null
$XmlDocument.Save($NuSpecFilePath)
}