-
Notifications
You must be signed in to change notification settings - Fork 2.6k
/
versionutilities.ts
74 lines (60 loc) · 2.75 KB
/
versionutilities.ts
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
"use strict";
import * as path from 'path';
import * as semver from 'semver';
import * as tl from 'azure-pipelines-task-lib/task';
import * as toolLib from 'azure-pipelines-tool-lib';
import { VersionInfo } from "./models"
export function versionCompareFunction(versionA: string, versionB: string): number {
if (!toolLib.isExplicitVersion(versionA) || !toolLib.isExplicitVersion(versionB)) {
throw tl.loc("VersionsCanNotBeCompared", versionA, versionB);
}
return semver.compare(versionA, versionB);
}
export function compareChannelVersion(channelVersionA: string, channelVersionB: string): number {
if (!channelVersionA || !channelVersionB) {
throw "One channel version is missing"
}
let channelVersionAParts = channelVersionA.split(".");
let channelVersionBParts = channelVersionB.split(".");
if (channelVersionAParts.length != 2 || channelVersionBParts.length != 2) {
throw tl.loc("ChannelVersionsNotComparable", channelVersionA, channelVersionB)
}
let channelAMajorVersion = Number.parseInt(channelVersionAParts[0]);
let channelAMinorVersion = Number.parseInt(channelVersionAParts[1]);
let channelBMajorVersion = Number.parseInt(channelVersionBParts[0]);
let channelBMinorVersion = Number.parseInt(channelVersionBParts[1]);
if (Number.isNaN(channelAMajorVersion) || Number.isNaN(channelAMinorVersion) || Number.isNaN(channelBMajorVersion) || Number.isNaN(channelBMinorVersion)) {
throw tl.loc("ChannelVersionsNotComparable", channelVersionA, channelVersionB);
}
if (channelAMajorVersion != channelBMajorVersion) {
return channelAMajorVersion > channelBMajorVersion ? 1 : -1;
}
else if (channelAMinorVersion != channelBMinorVersion) {
return channelAMinorVersion > channelBMinorVersion ? 1 : -1;
}
return 0;
}
export function getMatchingVersionFromList(versionInfoList: VersionInfo[], versionSpec: string, includePreviewVersions: boolean = false): VersionInfo {
let versionList: string[] = [];
versionInfoList.forEach(versionInfo => {
if (versionInfo && versionInfo.getVersion()) {
versionList.push(versionInfo.getVersion());
}
});
if (versionList.length > 0) {
let matchedVersion = semver.maxSatisfying(versionList, versionSpec, { includePrerelease: includePreviewVersions });
if (matchedVersion) {
return versionInfoList.find(versionInfo => {
return versionInfo.getVersion() == matchedVersion
});
}
}
return null;
}
export const Constants = {
"sdk": "sdk",
"runtime": "runtime",
"relativeRuntimePath": path.join("shared", "Microsoft.NETCore.App"),
"relativeSdkPath": "sdk",
"relativeGlobalToolPath": path.join(".dotnet", "tools")
}