- Notifications
You must be signed in to change notification settings - Fork 231
/
Copy pathCalculateNewPreviewVersion.ps1
78 lines (67 loc) · 3.2 KB
/
CalculateNewPreviewVersion.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
Param(
[string]$owner,
[string]$repo,
[string]$previewStr
)
Write-Host"Calculating new Preview Version:"-ForegroundColor Magenta;
$newVersionStr;
$releasesUrl="https://api.github.com/repos/$($owner)/$($repo)/releases";
Write-Host"Getting list of releases with '$($releasesUrl)'"-ForegroundColor Blue;
$releasesJSON=Invoke-RestMethod-Uri $releasesUrl-Method Get;
if ($releasesJSON.Count-eq0) {
Write-Host"Unable to get releases list with '$($releasesUrl)'"-ForegroundColor Red;
Write-Host"NOTE: This Script cannot handle the first release"-ForegroundColor Cyan;
EXIT1;
}
$lastReleaseJSON=$releasesJSON[0];
$lastReleaseVersionStr=$lastReleaseJSON.tag_name;
$isPreRelease=$lastReleaseJSON.prerelease;
if ([string]::IsNullOrEmpty($lastReleaseVersionStr)) {
Write-Host"Unable read the last release tag name"-ForegroundColor Red;
Write-Host"Last Release Data:"-ForegroundColor Cyan;
Write-Host-Object $lastReleaseJSON-ForegroundColor Cyan;
EXIT1;
}
if ([string]::IsNullOrEmpty($isPreRelease)) {
Write-Host"Unable read the last release is pre-release or not"-ForegroundColor Red;
Write-Host"Last Release Data:"-ForegroundColor Cyan;
Write-Host-Object $lastReleaseJSON-ForegroundColor Cyan;
EXIT1;
}
$isPreRelease=$isPreRelease-as [bool];
$versionArr=$lastReleaseVersionStr.split(".");
if ($isPreRelease) {
if (!$versionArr[2].Contains("-$($previewStr)")) {
Write-Host"Lastest release '$($lastReleaseVersionStr)' is mentioned as pre-release but '$($previewStr)' is missing in version string"-ForegroundColor Red;
Write-Host"Last Release Data:"-ForegroundColor Cyan;
Write-Host-Object $lastReleaseJSON-ForegroundColor Cyan;
EXIT1;
}
$previewVersionStr=$versionArr[$versionArr.Count-1];
$previewVersion=$previewVersionStr-as [int];
$newPreviewVersion=$previewVersion+1;
$versionArr[$versionArr.Count-1] =$newPreviewVersion;
$newVersionStr=$versionArr-join".";
Write-Host"Current version is '$($lastReleaseVersionStr)'"-ForegroundColor Blue;
Write-Host"New calculated version is '$($newVersionStr)'"-ForegroundColor Green;
}
else {
if ($versionArr[2].Contains("-$($previewStr)")) {
Write-Host"Lastest release '$($lastReleaseVersionStr)' is mentioned as production release but version string has '$($previewStr)'"-ForegroundColor Red;
Write-Host"Last Release Data:"-ForegroundColor Cyan;
Write-Host-Object $lastReleaseJSON-ForegroundColor Cyan;
EXIT1;
}
$minorVersionStr=$versionArr[1];
$minorVersion=$minorVersionStr-as [int];
$newMinorVersion=$minorVersion+1;
$newPatchVersion=0;
$newPreviewVersion=1;
$versionArr[1] =$newMinorVersion;
$versionArr[2] ="$($newPatchVersion)-$($previewStr).$($newPreviewVersion)";
$newVersionStr=$versionArr-join".";
Write-Host"Current version is '$($lastReleaseVersionStr)'"-ForegroundColor Blue;
Write-Host"New calculated version is '$($newVersionStr)'"-ForegroundColor Green;
}
Write-Host"##vso[task.setvariable variable=NEW_VERSION_STRING]$($newVersionStr)";
Write-Host"Updated new version in global variable"-ForegroundColor Green;