-
Notifications
You must be signed in to change notification settings - Fork 1
/
UpdatePackageQuality.ps1
102 lines (92 loc) · 5.21 KB
/
UpdatePackageQuality.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
########################################################################################################################
# Name : UpdatePackageQuality.ps1 #
# #
# Description : Updates the Nuget/Npm package quality after successful deployment. #
# As you can't push a package directly to TFS package View, you need to first push/publish and then #
# promote to a view. #
# #
# Arguments : PackageDescriptor - specifies the quality name to be updated #
# Possible options for Service quality are: #
# - 'Alpha' #
# - 'Beta' #
# - 'RC' #
# : PackageFeedName - specifies the Package feed name #
# #
# Version : 1.0 - Initial version. #
########################################################################################################################
# https://github.com/renevanosnabrugge/VSTS-SetPackageQuality/blob/master/Set-PackageQuality.ps1
# http://TfsServer:8080/tfs/Projects/_packaging/FeedName/nuget/v3/index.json
param
(
[parameter(Mandatory, Position=1, HelpMessage="Package feed name.")]
$PackageFeedName,
[parameter(Mandatory, Position=2, HelpMessage="Package quality descriptor as per feed view.")]
[ValidateSet("alpha", "beta", "rc")]
$PackageDescriptor
)
$tfsProjectUri = ${Env:System.TeamProject}
$tfsCollectionUri = $tfsProjectUri.substring(0, $tfsProjectUri.LastIndexOf('/'))
$basepackageurl = ("$tfsCollectionUri/{0}/{1}/nuget/v3/index.json" -f "_packaging", "$PackageFeedName")
function Set-PackageQuality
{
[CmdletBinding()]
[OutputType([object])]
param
(
[string] $feedType="nuget",
[string] $feedName="",
[string] $packageId="",
[string] $packageVersion="",
[string] $packageQuality=""
)
#API URL is slightly different for npm vs. nuget...
# http://TfsServer:8080/tfs/Projects/_apis/packaging/Feeds/FeedName/packages/6ed4b255-ef74-4dda-aa10-520a4e1df06a/Versions/f847e27c-e0cb-4fad-a5c2-f0af1d3c4d1d
switch($feedType)
{
"npm" { $releaseViewURL = "$basepackageurl/$feedName/npm/$packageId/versions/$($packageVersion)?api-version=3.0-preview.1" }
"nuget" { $releaseViewURL = "$tfsCollectionUri/_apis/packaging/Feeds/$feedName/packages/$packageId/versions/$($packageVersion)?api-version=3.0-preview.1"}
default { $releaseViewURL = "$tfsCollectionUri/_apis/packaging/Feeds/$feedName/packages/$packageId/versions/$($packageVersion)?api-version=3.0-preview.1"}
}
$json = @{
views = @{
op = "add"
path = "/views/-"
value = "$packageQuality"
}
}
$response = Invoke-RestMethod -Uri $releaseViewURL -ContentType "application/json" -Method Patch -UseDefaultCredentials -Body (ConvertTo-Json $json)
return $response
}
# Enumerate packages in specified Feed
$allPackagesApiUrl = ($tfsCollectionUri + "/_apis/packaging/Feeds/" + $PackageFeedName + "/packages")
$allPackages = Invoke-RestMethod -Uri $allPackagesApiUrl -ContentType "application/json" -Method Get -UseDefaultCredentials -Body (ConvertTo-Json $json)
foreach($package in $allPackages.value)
{
$pkgId = $package.id
$pkgName = $package.name
foreach($versionObject in $package.versions)
{
$pkgVersionId = $versionObject.id
$pkgVersion = $versionObject.version
if($pkgVersion.indexOf("-alpha") -gt 0)
{
$pkgDescriptor = 'ALPHA'
}
elseif($pkgVersion.indexOf("-beta") -gt 0)
{
$pkgDescriptor = 'BETA'
}
elseif($pkgVersion.indexOf("-rc") -gt 0)
{
$pkgDescriptor = 'RC'
}
else
{
$pkgDescriptor = 'FINAL'
}
}
# Promote the package to specified Quality Descriptor
Write-Verbose -Message "Promoting package $pkgName to $PackageDescriptor view." -Verbose
Set-PackageQuality -feedName $PackageFeedName -packageId $pkgId -packageVersion $pkgVersionId -packageQuality $PackageDescriptor
Write-Verbose -Message "Promoted package $pkgName to $PackageDescriptor view." -Verbose
}