Merge pull request #282 from Okeanos/maven-toolchains-support · actions/setup-java@e150063 (original) (raw)
``
1
`+
import * as fs from 'fs';
`
``
2
`+
import os from 'os';
`
``
3
`+
import * as path from 'path';
`
``
4
`+
import * as core from '@actions/core';
`
``
5
`+
import * as io from '@actions/io';
`
``
6
`+
import * as toolchains from '../src/toolchains';
`
``
7
`+
import { M2_DIR, MVN_TOOLCHAINS_FILE } from '../src/constants';
`
``
8
+
``
9
`+
const m2Dir = path.join(__dirname, M2_DIR);
`
``
10
`+
const toolchainsFile = path.join(m2Dir, MVN_TOOLCHAINS_FILE);
`
``
11
+
``
12
`+
describe('toolchains tests', () => {
`
``
13
`+
let spyOSHomedir: jest.SpyInstance;
`
``
14
`+
let spyInfo: jest.SpyInstance;
`
``
15
+
``
16
`+
beforeEach(async () => {
`
``
17
`+
await io.rmRF(m2Dir);
`
``
18
`+
spyOSHomedir = jest.spyOn(os, 'homedir');
`
``
19
`+
spyOSHomedir.mockReturnValue(__dirname);
`
``
20
`+
spyInfo = jest.spyOn(core, 'info');
`
``
21
`+
spyInfo.mockImplementation(() => null);
`
``
22
`+
}, 300000);
`
``
23
+
``
24
`+
afterAll(async () => {
`
``
25
`+
try {
`
``
26
`+
await io.rmRF(m2Dir);
`
``
27
`+
} catch {
`
``
28
`+
console.log('Failed to remove test directories');
`
``
29
`+
}
`
``
30
`+
jest.resetAllMocks();
`
``
31
`+
jest.clearAllMocks();
`
``
32
`+
jest.restoreAllMocks();
`
``
33
`+
}, 100000);
`
``
34
+
``
35
`+
it('creates toolchains.xml in alternate locations', async () => {
`
``
36
`+
const jdkInfo = {
`
``
37
`+
version: '17',
`
``
38
`+
vendor: 'Eclipse Temurin',
`
``
39
`+
id: 'temurin_17',
`
``
40
`+
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
`
``
41
`+
};
`
``
42
+
``
43
`+
const altHome = path.join(__dirname, 'runner', 'toolchains');
`
``
44
`+
const altToolchainsFile = path.join(altHome, MVN_TOOLCHAINS_FILE);
`
``
45
`+
await io.rmRF(altHome); // ensure it doesn't already exist
`
``
46
+
``
47
`+
await toolchains.createToolchainsSettings({
`
``
48
`+
jdkInfo,
`
``
49
`+
settingsDirectory: altHome,
`
``
50
`+
overwriteSettings: true
`
``
51
`+
});
`
``
52
+
``
53
`+
expect(fs.existsSync(m2Dir)).toBe(false);
`
``
54
`+
expect(fs.existsSync(toolchainsFile)).toBe(false);
`
``
55
+
``
56
`+
expect(fs.existsSync(altHome)).toBe(true);
`
``
57
`+
expect(fs.existsSync(altToolchainsFile)).toBe(true);
`
``
58
`+
expect(fs.readFileSync(altToolchainsFile, 'utf-8')).toEqual(
`
``
59
`+
toolchains.generateToolchainDefinition(
`
``
60
`+
'',
`
``
61
`+
jdkInfo.version,
`
``
62
`+
jdkInfo.vendor,
`
``
63
`+
jdkInfo.id,
`
``
64
`+
jdkInfo.jdkHome
`
``
65
`+
)
`
``
66
`+
);
`
``
67
+
``
68
`+
await io.rmRF(altHome);
`
``
69
`+
}, 100000);
`
``
70
+
``
71
`+
it('creates toolchains.xml with minimal configuration', async () => {
`
``
72
`+
const jdkInfo = {
`
``
73
`+
version: '17',
`
``
74
`+
vendor: 'Eclipse Temurin',
`
``
75
`+
id: 'temurin_17',
`
``
76
`+
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
`
``
77
`+
};
`
``
78
+
``
79
`` +
const result = `
``
``
80
`+
<toolchains xmlns="https://maven.apache.org/TOOLCHAINS/1.1.0"
`
``
81
`+
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
`
``
82
`+
xsi:schemaLocation="https://maven.apache.org/TOOLCHAINS/1.1.0 " title="undefined" rel="noopener noreferrer">https://maven.apache.org/xsd/toolchains-1.1.0.xsd">
`
``
83
`+
`
``
84
`+
jdk
`
``
85
`+
`
``
86
`+
17
`
``
87
`+
Eclipse Temurin
`
``
88
`+
temurin_17
`
``
89
`+
`
``
90
`+
`
``
91
`+
/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64
`
``
92
`+
`
``
93
`+
`
``
94
`` +
`;
``
``
95
+
``
96
`+
await toolchains.createToolchainsSettings({
`
``
97
`+
jdkInfo,
`
``
98
`+
settingsDirectory: m2Dir,
`
``
99
`+
overwriteSettings: true
`
``
100
`+
});
`
``
101
+
``
102
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
103
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
104
`+
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
`
``
105
`+
toolchains.generateToolchainDefinition(
`
``
106
`+
'',
`
``
107
`+
jdkInfo.version,
`
``
108
`+
jdkInfo.vendor,
`
``
109
`+
jdkInfo.id,
`
``
110
`+
jdkInfo.jdkHome
`
``
111
`+
)
`
``
112
`+
);
`
``
113
`+
expect(
`
``
114
`+
toolchains.generateToolchainDefinition(
`
``
115
`+
'',
`
``
116
`+
jdkInfo.version,
`
``
117
`+
jdkInfo.vendor,
`
``
118
`+
jdkInfo.id,
`
``
119
`+
jdkInfo.jdkHome
`
``
120
`+
)
`
``
121
`+
).toEqual(result);
`
``
122
`+
}, 100000);
`
``
123
+
``
124
`+
it('reuses existing toolchains.xml files', async () => {
`
``
125
`+
const jdkInfo = {
`
``
126
`+
version: '17',
`
``
127
`+
vendor: 'Eclipse Temurin',
`
``
128
`+
id: 'temurin_17',
`
``
129
`+
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
`
``
130
`+
};
`
``
131
+
``
132
`` +
const originalFile = `
``
``
133
`+
`
``
134
`+
jdk
`
``
135
`+
`
``
136
`+
1.6
`
``
137
`+
Sun
`
``
138
`+
sun_1.6
`
``
139
`+
`
``
140
`+
`
``
141
`+
/opt/jdk/sun/1.6
`
``
142
`+
`
``
143
`+
`
``
144
`` +
`;
``
``
145
`` +
const result = `
``
``
146
`+
`
``
147
`+
`
``
148
`+
jdk
`
``
149
`+
`
``
150
`+
1.6
`
``
151
`+
Sun
`
``
152
`+
sun_1.6
`
``
153
`+
`
``
154
`+
`
``
155
`+
/opt/jdk/sun/1.6
`
``
156
`+
`
``
157
`+
`
``
158
`+
`
``
159
`+
jdk
`
``
160
`+
`
``
161
`+
17
`
``
162
`+
Eclipse Temurin
`
``
163
`+
temurin_17
`
``
164
`+
`
``
165
`+
`
``
166
`+
/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64
`
``
167
`+
`
``
168
`+
`
``
169
`` +
`;``
``
170
+
``
171
`+
fs.mkdirSync(m2Dir, { recursive: true });
`
``
172
`+
fs.writeFileSync(toolchainsFile, originalFile);
`
``
173
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
174
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
175
+
``
176
`+
await toolchains.createToolchainsSettings({
`
``
177
`+
jdkInfo,
`
``
178
`+
settingsDirectory: m2Dir,
`
``
179
`+
overwriteSettings: true
`
``
180
`+
});
`
``
181
+
``
182
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
183
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
184
`+
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
`
``
185
`+
toolchains.generateToolchainDefinition(
`
``
186
`+
originalFile,
`
``
187
`+
jdkInfo.version,
`
``
188
`+
jdkInfo.vendor,
`
``
189
`+
jdkInfo.id,
`
``
190
`+
jdkInfo.jdkHome
`
``
191
`+
)
`
``
192
`+
);
`
``
193
`+
expect(
`
``
194
`+
toolchains.generateToolchainDefinition(
`
``
195
`+
originalFile,
`
``
196
`+
jdkInfo.version,
`
``
197
`+
jdkInfo.vendor,
`
``
198
`+
jdkInfo.id,
`
``
199
`+
jdkInfo.jdkHome
`
``
200
`+
)
`
``
201
`+
).toEqual(result);
`
``
202
`+
}, 100000);
`
``
203
+
``
204
`+
it('does not overwrite existing toolchains.xml files', async () => {
`
``
205
`+
const jdkInfo = {
`
``
206
`+
version: '17',
`
``
207
`+
vendor: 'Eclipse Temurin',
`
``
208
`+
id: 'temurin_17',
`
``
209
`+
jdkHome: '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64'
`
``
210
`+
};
`
``
211
+
``
212
`` +
const originalFile = `
``
``
213
`+
`
``
214
`+
jdk
`
``
215
`+
`
``
216
`+
1.6
`
``
217
`+
Sun
`
``
218
`+
sun_1.6
`
``
219
`+
`
``
220
`+
`
``
221
`+
/opt/jdk/sun/1.6
`
``
222
`+
`
``
223
`+
`
``
224
`` +
`;
``
``
225
+
``
226
`+
fs.mkdirSync(m2Dir, { recursive: true });
`
``
227
`+
fs.writeFileSync(toolchainsFile, originalFile);
`
``
228
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
229
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
230
+
``
231
`+
await toolchains.createToolchainsSettings({
`
``
232
`+
jdkInfo,
`
``
233
`+
settingsDirectory: m2Dir,
`
``
234
`+
overwriteSettings: false
`
``
235
`+
});
`
``
236
+
``
237
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
238
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
239
`+
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(originalFile);
`
``
240
`+
}, 100000);
`
``
241
+
``
242
`+
it('generates valid toolchains.xml with minimal configuration', () => {
`
``
243
`+
const jdkInfo = {
`
``
244
`+
version: 'JAVA_VERSION',
`
``
245
`+
vendor: 'JAVA_VENDOR',
`
``
246
`+
id: 'VENDOR_VERSION',
`
``
247
`+
jdkHome: 'JAVA_HOME'
`
``
248
`+
};
`
``
249
+
``
250
`` +
const expectedToolchains = `
``
``
251
`+
<toolchains xmlns="https://maven.apache.org/TOOLCHAINS/1.1.0"
`
``
252
`+
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
`
``
253
`+
xsi:schemaLocation="https://maven.apache.org/TOOLCHAINS/1.1.0 " title="undefined" rel="noopener noreferrer">https://maven.apache.org/xsd/toolchains-1.1.0.xsd">
`
``
254
`+
`
``
255
`+
jdk
`
``
256
`+
`
``
257
`+
${jdkInfo.version}
`
``
258
`+
${jdkInfo.vendor}
`
``
259
`+
${jdkInfo.id}
`
``
260
`+
`
``
261
`+
`
``
262
`+
${jdkInfo.jdkHome}
`
``
263
`+
`
``
264
`+
`
``
265
`` +
`;
``
``
266
+
``
267
`+
expect(
`
``
268
`+
toolchains.generateToolchainDefinition(
`
``
269
`+
'',
`
``
270
`+
jdkInfo.version,
`
``
271
`+
jdkInfo.vendor,
`
``
272
`+
jdkInfo.id,
`
``
273
`+
jdkInfo.jdkHome
`
``
274
`+
)
`
``
275
`+
).toEqual(expectedToolchains);
`
``
276
`+
}, 100000);
`
``
277
+
``
278
`+
it('creates toolchains.xml with correct id when none is supplied', async () => {
`
``
279
`+
const version = '17';
`
``
280
`+
const distributionName = 'temurin';
`
``
281
`+
const id = 'temurin_17';
`
``
282
`+
const jdkHome = '/opt/hostedtoolcache/Java_Temurin-Hotspot_jdk/17.0.1-12/x64';
`
``
283
+
``
284
`+
await toolchains.configureToolchains(version, distributionName, jdkHome, undefined);
`
``
285
+
``
286
`+
expect(fs.existsSync(m2Dir)).toBe(true);
`
``
287
`+
expect(fs.existsSync(toolchainsFile)).toBe(true);
`
``
288
`+
expect(fs.readFileSync(toolchainsFile, 'utf-8')).toEqual(
`
``
289
`+
toolchains.generateToolchainDefinition('', version, distributionName, id, jdkHome)
`
``
290
`+
);
`
``
291
`+
}, 100000);
`
``
292
`+
});
`