Skip to content

Commit 9871695

Browse files
committed
Support Tencent Kona JDK (#671)
1 parent 67fbd72 commit 9871695

File tree

9 files changed

+726
-6
lines changed

9 files changed

+726
-6
lines changed

.github/workflows/e2e-versions.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,17 @@ jobs:
3030
'microsoft',
3131
'semeru',
3232
'corretto',
33-
'dragonwell'
33+
'dragonwell',
34+
'kona'
3435
] # internally 'adopt-hotspot' is the same as 'adopt'
3536
version: ['21', '11', '17']
3637
exclude:
3738
- distribution: microsoft
3839
version: 8
3940
- distribution: dragonwell
4041
os: macos-13
42+
- distribution: kona
43+
version: 21
4144
include:
4245
- distribution: oracle
4346
os: macos-13

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ Currently, the following distributions are supported:
108108
| `semeru` | IBM Semeru Runtime Open Edition | [Link](https://developer.ibm.com/languages/java/semeru-runtimes/downloads/) | [Link](https://openjdk.java.net/legal/gplv2+ce.html) |
109109
| `oracle` | Oracle JDK | [Link](https://www.oracle.com/java/technologies/downloads/) | [Link](https://java.com/freeuselicense)
110110
| `dragonwell` | Alibaba Dragonwell JDK | [Link](https://dragonwell-jdk.io/) | [Link](https://www.aliyun.com/product/dragonwell/)
111+
| `kona` | Tencent Kona JDK | [Link](https://tencent.github.io/konajdk/) | [Link](https://tencent.github.io/konajdk/LICENSE.txt)
111112

112113
**NOTE:** The different distributors can provide discrepant list of available versions / supported configurations. Please refer to the official documentation to see the list of supported versions.
113114

@@ -257,6 +258,7 @@ In the example above multiple JDKs are installed for the same job. The result af
257258
- [Amazon Corretto](docs/advanced-usage.md#Amazon-Corretto)
258259
- [Oracle](docs/advanced-usage.md#Oracle)
259260
- [Alibaba Dragonwell](docs/advanced-usage.md#Alibaba-Dragonwell)
261+
- [Tencent Kona](docs/advanced-usage.md#Tencent-Kona)
260262
- [Installing custom Java package type](docs/advanced-usage.md#Installing-custom-Java-package-type)
261263
- [Installing custom Java architecture](docs/advanced-usage.md#Installing-custom-Java-architecture)
262264
- [Installing custom Java distribution from local file](docs/advanced-usage.md#Installing-Java-from-local-file)

__tests__/data/kona.json

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
{
2+
"8": [
3+
{
4+
"version": "8.0.19",
5+
"jdkVersion": "8u422",
6+
"latest": true,
7+
"baseUrl": "https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/",
8+
"files": [
9+
{
10+
"os": "linux",
11+
"arch": "aarch64",
12+
"filename": "TencentKona8.0.19.b1_jdk_linux-aarch64_8u422.tar.gz",
13+
"checksum": "ef031cc28012413ee771c318c6986bfb1dd80b16962ae073d775e269397f6580"
14+
},
15+
{
16+
"os": "linux",
17+
"arch": "x86_64",
18+
"filename": "TencentKona8.0.19.b1_jdk_linux-x86_64_8u422.tar.gz",
19+
"checksum": "57866cb132fc551028257dd1a6ad65650ca0436a1811f30c53ad67844e35c781"
20+
},
21+
{
22+
"os": "macos",
23+
"arch": "aarch64",
24+
"filename": "TencentKona8.0.19.b1_jdk_macosx-aarch64_8u422_notarized.tar.gz",
25+
"checksum": "4c9c169b983fc0b1fd2bbcdd40daa410c72c10ad360d6a61957270c9bdbd96d9"
26+
},
27+
{
28+
"os": "macos",
29+
"arch": "x86_64",
30+
"filename": "TencentKona8.0.19.b1_jdk_macosx-x86_64_8u422_notarized.tar.gz",
31+
"checksum": "9f9be00fb2259bc6ea0b117cb96041b12b39fdf537991af75e9e475e73c6b40f"
32+
},
33+
{
34+
"os": "windows",
35+
"arch": "x86_64",
36+
"filename": "TencentKona8.0.19.b1_jdk_windows-x86_64_8u422_signed.zip",
37+
"checksum": "afc16c4d048f6c90099841e16ad50314ae710340ec057ef19c845f5d43b6ee9e"
38+
}
39+
]
40+
}
41+
],
42+
"11": [
43+
{
44+
"version": "11.0.24",
45+
"jdkVersion": "11.0.24",
46+
"latest": true,
47+
"baseUrl": "https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/",
48+
"files": [
49+
{
50+
"os": "linux",
51+
"arch": "aarch64",
52+
"filename": "TencentKona-11.0.24.b1-jdk_linux-aarch64.tar.gz",
53+
"checksum": "505aa9e39c6fd9dab20443c0b4ed8fb1fedb40109c52b00edeaa7774c6fe9de9"
54+
},
55+
{
56+
"os": "linux",
57+
"arch": "x86_64",
58+
"filename": "TencentKona-11.0.24.b1-jdk_linux-x86_64.tar.gz",
59+
"checksum": "63ff8d821a2b0eef02aa257a959e53150e02865f8eb143feca1b40179d94a3f3"
60+
},
61+
{
62+
"os": "macos",
63+
"arch": "aarch64",
64+
"filename": "TencentKona-11.0.24.b1_jdk_macosx-aarch64_notarized.tar.gz",
65+
"checksum": "e8a6c493a9922fbabc712fa70a50260f001d9202e3370224eabc27adfcf008de"
66+
},
67+
{
68+
"os": "macos",
69+
"arch": "x86_64",
70+
"filename": "TencentKona-11.0.24.b1_jdk_macosx-x86_64_notarized.tar.gz",
71+
"checksum": "c8316cc8388faaa3d898f412a63ef42efbad243a01eaef37f6a19d77e4cd7956"
72+
},
73+
{
74+
"os": "windows",
75+
"arch": "x86_64",
76+
"filename": "TencentKona-11.0.24.b1_jdk_windows-x86_64_signed.zip",
77+
"checksum": "222b135f637af85e3092921a9c9bfc45a743944c179e4170d93e4eea82165858"
78+
}
79+
]
80+
}
81+
],
82+
"17": [
83+
{
84+
"version": "17.0.12",
85+
"jdkVersion": "17.0.12",
86+
"latest": true,
87+
"baseUrl": "https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/",
88+
"files": [
89+
{
90+
"os": "linux",
91+
"arch": "aarch64",
92+
"filename": "TencentKona-17.0.12.b1-jdk_linux-aarch64.tar.gz",
93+
"checksum": "bf65e9b3ab5781a5bb9ddfe5a6032efa8f099f48d85b5dcec686e5a4c0647fea"
94+
},
95+
{
96+
"os": "linux",
97+
"arch": "x86_64",
98+
"filename": "TencentKona-17.0.12.b1-jdk_linux-x86_64.tar.gz",
99+
"checksum": "b8b6706c3710777240696c672168c8065d7a77c2199238ace7caffe353deab27"
100+
},
101+
{
102+
"os": "macos",
103+
"arch": "aarch64",
104+
"filename": "TencentKona-17.0.12.b1_jdk_macosx-aarch64_notarized.tar.gz",
105+
"checksum": "d1f5653e2e8c7a0febeeadd13d7f4270076c0b4bde3785d4a93a9444c69800b5"
106+
},
107+
{
108+
"os": "macos",
109+
"arch": "x86_64",
110+
"filename": "TencentKona-17.0.12.b1_jdk_macosx-x86_64_notarized.tar.gz",
111+
"checksum": "870678cabbabd6970e8f9d0a7fafa8d87597f71d9f581d0f0d103879101e97bc"
112+
},
113+
{
114+
"os": "windows",
115+
"arch": "x86_64",
116+
"filename": "TencentKona-17.0.12.b1_jdk_windows-x86_64_signed.zip",
117+
"checksum": "0a0bc7c10cd9d0852f368674d02ee6d39200ef4d8857904004b677a15937e412"
118+
}
119+
]
120+
}
121+
]
122+
}
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
import {KonaDistribution} from '../../src/distributions/kona/installer';
2+
3+
import manifestData from '../data/kona.json';
4+
5+
function mockDistr(
6+
version: string,
7+
os: string,
8+
arch: string,
9+
packageType: string
10+
): KonaDistribution {
11+
const distribution = new KonaDistribution({
12+
version: version,
13+
architecture: arch,
14+
packageType: packageType,
15+
checkLatest: false
16+
});
17+
18+
distribution['getOs'] = () => os;
19+
distribution['fetchReleaseInfo'] = async () => manifestData;
20+
21+
return distribution;
22+
}
23+
24+
describe('Check getAvailableReleases', () => {
25+
it.each([
26+
['8', 'linux', 'aarch64', 'linux-aarch64'],
27+
['8.0.19', 'macos', 'x86_64', 'macosx-x86_64'],
28+
['11', 'linux', 'x86_64', 'linux-x86_64'],
29+
['11.0.24', 'macos', 'aarch64', 'macosx-aarch64'],
30+
['17.0.12', 'windows', 'x86_64', 'windows-x86_64']
31+
])(
32+
'should get releases with the specified version "%s", OS "%s" and arch "%s"',
33+
async (
34+
version: string,
35+
os: string,
36+
arch: string,
37+
expectedPattern: string
38+
) => {
39+
const distribution = mockDistr(version, os, arch, 'jdk');
40+
41+
const releases = await distribution['getAvailableReleases']();
42+
expect(releases).not.toBeNull();
43+
expect(releases.length).toBe(3);
44+
releases.forEach((release, index) =>
45+
expect(releases[index].downloadUrl).toContain(expectedPattern)
46+
);
47+
}
48+
);
49+
});
50+
51+
describe('Check findPackageForDownload', () => {
52+
it.each([
53+
[
54+
'8',
55+
'linux',
56+
'aarch64',
57+
'https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/TencentKona8.0.19.b1_jdk_linux-aarch64_8u422.tar.gz'
58+
],
59+
[
60+
'8.0.19',
61+
'linux',
62+
'x86_64',
63+
'https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/TencentKona8.0.19.b1_jdk_linux-x86_64_8u422.tar.gz'
64+
],
65+
[
66+
'8.0.19',
67+
'macos',
68+
'aarch64',
69+
'https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/TencentKona8.0.19.b1_jdk_macosx-aarch64_8u422_notarized.tar.gz'
70+
],
71+
[
72+
'8.0.19',
73+
'macos',
74+
'x86_64',
75+
'https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/TencentKona8.0.19.b1_jdk_macosx-x86_64_8u422_notarized.tar.gz'
76+
],
77+
[
78+
'8.0.19',
79+
'windows',
80+
'x86_64',
81+
'https://github.com/Tencent/TencentKona-8/releases/download/8.0.19-GA/TencentKona8.0.19.b1_jdk_windows-x86_64_8u422_signed.zip'
82+
],
83+
84+
[
85+
'11',
86+
'linux',
87+
'aarch64',
88+
'https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/TencentKona-11.0.24.b1-jdk_linux-aarch64.tar.gz'
89+
],
90+
[
91+
'11.0.24',
92+
'linux',
93+
'x86_64',
94+
'https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/TencentKona-11.0.24.b1-jdk_linux-x86_64.tar.gz'
95+
],
96+
[
97+
'11.0.24',
98+
'macos',
99+
'aarch64',
100+
'https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/TencentKona-11.0.24.b1_jdk_macosx-aarch64_notarized.tar.gz'
101+
],
102+
[
103+
'11.0.24',
104+
'macos',
105+
'x86_64',
106+
'https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/TencentKona-11.0.24.b1_jdk_macosx-x86_64_notarized.tar.gz'
107+
],
108+
[
109+
'11.0.24',
110+
'windows',
111+
'x86_64',
112+
'https://github.com/Tencent/TencentKona-11/releases/download/kona11.0.24/TencentKona-11.0.24.b1_jdk_windows-x86_64_signed.zip'
113+
],
114+
115+
[
116+
'17',
117+
'linux',
118+
'aarch64',
119+
'https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/TencentKona-17.0.12.b1-jdk_linux-aarch64.tar.gz'
120+
],
121+
[
122+
'17.0.12',
123+
'linux',
124+
'x86_64',
125+
'https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/TencentKona-17.0.12.b1-jdk_linux-x86_64.tar.gz'
126+
],
127+
[
128+
'17.0.12',
129+
'macos',
130+
'aarch64',
131+
'https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/TencentKona-17.0.12.b1_jdk_macosx-aarch64_notarized.tar.gz'
132+
],
133+
[
134+
'17.0.12',
135+
'macos',
136+
'x86_64',
137+
'https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/TencentKona-17.0.12.b1_jdk_macosx-x86_64_notarized.tar.gz'
138+
],
139+
[
140+
'17.0.12',
141+
'windows',
142+
'x86_64',
143+
'https://github.com/Tencent/TencentKona-17/releases/download/TencentKona-17.0.12/TencentKona-17.0.12.b1_jdk_windows-x86_64_signed.zip'
144+
]
145+
])(
146+
'should return the download URL with the specified version "%s", OS "%s" and arch "%s"',
147+
async (version: string, os: string, arch: string, expectedUrl: string) => {
148+
const distribution = mockDistr(version, os, arch, 'jdk');
149+
150+
const availableRelease = await distribution['findPackageForDownload'](
151+
version
152+
);
153+
expect(availableRelease).not.toBeNull();
154+
expect(availableRelease.url).toBe(expectedUrl);
155+
}
156+
);
157+
});
158+
159+
describe('No release is found', () => {
160+
it.each([
161+
['8', 'linux', 'x86'],
162+
['17', 'solaris', 'x86_64'],
163+
['21', 'linux', 'x86_64']
164+
])(
165+
`should throw an error due to no release with the specified version "%s", os "%s" and arch "%s"`,
166+
async (version: string, os: string, arch: string) => {
167+
const distribution = mockDistr(version, os, arch, 'jdk');
168+
169+
await expect(
170+
distribution['findPackageForDownload'](version)
171+
).rejects.toThrow(
172+
`No Kona release for the specified version "${version}" on OS "${os}" and arch "${arch}".`
173+
);
174+
}
175+
);
176+
});
177+
178+
describe('The package type must be jdk', () => {
179+
it('should throw an error due to the specified package type is not jdk', async () => {
180+
const version = '8.0.19';
181+
const os = 'linux';
182+
const arch = 'x86_64';
183+
const distribution = mockDistr(version, os, arch, 'jre');
184+
185+
await expect(
186+
distribution['findPackageForDownload'](version)
187+
).rejects.toThrow('Kona provides jdk only');
188+
});
189+
});

0 commit comments

Comments
 (0)