-
Notifications
You must be signed in to change notification settings - Fork 79
/
LatestInstallerPathResolver.java
102 lines (92 loc) · 3.71 KB
/
LatestInstallerPathResolver.java
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
package jenkins.plugins.nodejs.tools.pathresolvers;
import java.text.MessageFormat;
import jenkins.plugins.nodejs.tools.CPU;
import jenkins.plugins.nodejs.tools.InstallerPathResolver;
import jenkins.plugins.nodejs.tools.NodeJSVersion;
import jenkins.plugins.nodejs.tools.NodeJSVersionRange;
import jenkins.plugins.nodejs.tools.Platform;
/**
* Calculate the name of the installer for the specified version according the
* architecture and CPU of the destination node.
*
* @author fcamblor
* @author Nikolas Falco
*/
public class LatestInstallerPathResolver implements InstallerPathResolver {
private static final String EXTENSION = "tar.gz";
private static final String EXTENSION_ZIP = "zip";
private static final String EXTENSION_MSI = "msi";
private static final NodeJSVersionRange[] MSI_RANGES = new NodeJSVersionRange[] { new NodeJSVersionRange("[0, 4.5)"),
new NodeJSVersionRange("[5, 6.2]") };
/*
* (non-Javadoc)
* @see jenkins.plugins.nodejs.tools.InstallerPathResolver#resolvePathFor(java.lang.String, jenkins.plugins.nodejs.tools.Platform, jenkins.plugins.nodejs.tools.CPU)
*/
@Override
public String resolvePathFor(String version, Platform platform, CPU cpu) {
String path = "";
String os = null;
String arch;
String extension;
boolean isMSI = false;
switch (platform) {
case WINDOWS:
isMSI = isMSI(version);
if (!isMSI) {
os = "win";
extension = EXTENSION_ZIP;
} else {
extension = EXTENSION_MSI;
}
break;
case LINUX:
os = "linux";
extension = EXTENSION;
break;
case OSX:
os = "darwin";
extension = EXTENSION;
break;
default:
throw new IllegalArgumentException("Unresolvable nodeJS installer for version=" + version + ", platform=" + platform.name());
}
switch (cpu) {
case i386:
if (platform == Platform.OSX && NodeJSVersion.parseVersion(version).compareTo(new NodeJSVersion(4, 0, 0)) >= 0) {
throw new IllegalArgumentException("Unresolvable nodeJS installer for version=" + version + ", cpu=" + cpu.name() + ", platform=" + platform.name());
}
arch = "x86";
break;
case amd64:
if (isMSI && NodeJSVersion.parseVersion(version).compareTo(new NodeJSVersion(4, 0, 0)) < 0) {
path = "x64/";
}
arch = "x64";
break;
case arm64:
case armv6l:
case armv7l:
if (NodeJSVersion.parseVersion(version).compareTo(new NodeJSVersion(4, 0, 0)) < 0) {
throw new IllegalArgumentException("Unresolvable nodeJS installer for version=" + version + ", cpu=" + cpu.name() + ", platform=" + platform.name());
}
arch = cpu.name();
break;
default:
throw new IllegalArgumentException("Unresolvable nodeJS installer for version=" + version + ", cpu=" + cpu.name());
}
if (os == null) {
return MessageFormat.format("{0}node-v{1}-{2}.{3}", path, version, arch, extension);
} else {
return MessageFormat.format("{0}node-v{1}-{2}-{3}.{4}", path, version, os, arch, extension);
}
}
public boolean isMSI(String version) {
NodeJSVersion currentVersion = new NodeJSVersion(version);
for (NodeJSVersionRange msiRange : MSI_RANGES) {
if (msiRange.includes(currentVersion)) {
return true;
}
}
return false;
}
}