mirror of
https://github.com/actions/setup-java.git
synced 2025-04-21 10:26:46 +00:00
Currently the resolved version is cached. For example something like 8.0.141. On other hand when a version is looked up in the cache the string provided by the user is used. This may lead to unexpected behavior. 1.8 will not match 8.0.141. Normalizing the version string before looking up in the tool cache will solve the problem. The normalized version (8.x) will match the entry in the cache as expected. Normalizing the string in the beginning of the flow won't hurt as it is a valid version specification. What is more it the user can supply the normalized version directly so the code should be able to work with it.
173 lines
5.6 KiB
TypeScript
173 lines
5.6 KiB
TypeScript
import io = require('@actions/io');
|
|
import fs = require('fs');
|
|
import path = require('path');
|
|
import child_process = require('child_process');
|
|
|
|
const toolDir = path.join(__dirname, 'runner', 'tools');
|
|
const tempDir = path.join(__dirname, 'runner', 'temp');
|
|
const javaDir = path.join(__dirname, 'runner', 'java');
|
|
|
|
process.env['RUNNER_TOOL_CACHE'] = toolDir;
|
|
process.env['RUNNER_TEMP'] = tempDir;
|
|
import * as installer from '../src/installer';
|
|
|
|
let javaFilePath = '';
|
|
let javaUrl = '';
|
|
if (process.platform === 'win32') {
|
|
javaFilePath = path.join(javaDir, 'java_win.zip');
|
|
javaUrl =
|
|
'https://download.java.net/java/GA/jdk12/33/GPL/openjdk-12_windows-x64_bin.zip';
|
|
} else if (process.platform === 'darwin') {
|
|
javaFilePath = path.join(javaDir, 'java_mac.tar.gz');
|
|
javaUrl =
|
|
'https://download.java.net/java/GA/jdk12/33/GPL/openjdk-12_osx-x64_bin.tar.gz';
|
|
} else {
|
|
javaFilePath = path.join(javaDir, 'java_linux.tar.gz');
|
|
javaUrl =
|
|
'https://download.java.net/java/GA/jdk12/33/GPL/openjdk-12_linux-x64_bin.tar.gz';
|
|
}
|
|
|
|
describe('installer tests', () => {
|
|
beforeAll(async () => {
|
|
await io.rmRF(toolDir);
|
|
await io.rmRF(tempDir);
|
|
if (!fs.existsSync(`${javaFilePath}.complete`)) {
|
|
// Download java
|
|
await io.mkdirP(javaDir);
|
|
|
|
console.log('Downloading java');
|
|
child_process.execSync(`curl "${javaUrl}" > "${javaFilePath}"`);
|
|
// Write complete file so we know it was successful
|
|
fs.writeFileSync(`${javaFilePath}.complete`, 'content');
|
|
}
|
|
}, 300000);
|
|
|
|
afterAll(async () => {
|
|
try {
|
|
await io.rmRF(toolDir);
|
|
await io.rmRF(tempDir);
|
|
} catch {
|
|
console.log('Failed to remove test directories');
|
|
}
|
|
}, 100000);
|
|
|
|
it('Installs version of Java from jdkFile if no matching version is installed', async () => {
|
|
await installer.getJava('12', 'x64', javaFilePath, 'jdk');
|
|
const JavaDir = path.join(toolDir, 'jdk', '12.0.0', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Throws if invalid directory to jdk', async () => {
|
|
let thrown = false;
|
|
try {
|
|
await installer.getJava('1000', 'x64', 'bad path', 'jdk');
|
|
} catch {
|
|
thrown = true;
|
|
}
|
|
expect(thrown).toBe(true);
|
|
});
|
|
|
|
it('Downloads java if no file given', async () => {
|
|
await installer.getJava('8.0.102', 'x64', '', 'jdk');
|
|
const JavaDir = path.join(toolDir, 'jdk', '8.0.102', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Downloads java with 1.x syntax', async () => {
|
|
await installer.getJava('1.10', 'x64', '', 'jdk');
|
|
const JavaDir = path.join(toolDir, 'jdk', '10.0.2', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Downloads java with normal semver syntax', async () => {
|
|
await installer.getJava('9.0.x', 'x64', '', 'jdk');
|
|
const JavaDir = path.join(toolDir, 'jdk', '9.0.7', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Downloads java if package is jre', async () => {
|
|
await installer.getJava('8.0.222', 'x64', '', 'jre');
|
|
const JavaDir = path.join(toolDir, 'jre', '8.0.222', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Downloads java if package is jdk+fx', async () => {
|
|
await installer.getJava('8.0.222', 'x64', '', 'jdk+fx');
|
|
const JavaDir = path.join(toolDir, 'jdk+fx', '8.0.222', 'x64');
|
|
|
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
|
}, 100000);
|
|
|
|
it('Throws if invalid java package is specified', async () => {
|
|
let thrown = false;
|
|
try {
|
|
await installer.getJava('8.0.222', 'x64', '', 'bad jdk');
|
|
} catch {
|
|
thrown = true;
|
|
}
|
|
expect(thrown).toBe(true);
|
|
});
|
|
|
|
it('Throws if invalid directory to jdk', async () => {
|
|
let thrown = false;
|
|
try {
|
|
await installer.getJava('1000', 'x64', 'bad path', 'jdk');
|
|
} catch {
|
|
thrown = true;
|
|
}
|
|
expect(thrown).toBe(true);
|
|
});
|
|
|
|
it('Uses version of Java installed in cache', async () => {
|
|
const JavaDir: string = path.join(toolDir, 'jdk', '250.0.0', 'x64');
|
|
await io.mkdirP(JavaDir);
|
|
fs.writeFileSync(`${JavaDir}.complete`, 'hello');
|
|
// This will throw if it doesn't find it in the cache (because no such version exists)
|
|
await installer.getJava(
|
|
'250',
|
|
'x64',
|
|
'path shouldnt matter, found in cache',
|
|
'jdk'
|
|
);
|
|
return;
|
|
});
|
|
|
|
it('Uses 1.x version of Java installed in cache', async () => {
|
|
const JavaDir: string = path.join(toolDir, 'jdk', '8.0.181', 'x64');
|
|
await io.mkdirP(JavaDir);
|
|
fs.writeFileSync(`${JavaDir}.complete`, 'hello');
|
|
// This will throw if it doesn't find it in the cache
|
|
await installer.getJava(
|
|
'1.8',
|
|
'x64',
|
|
'path shouldnt matter, found in cache',
|
|
'jdk'
|
|
);
|
|
return;
|
|
});
|
|
|
|
it('Doesnt use version of Java that was only partially installed in cache', async () => {
|
|
const JavaDir: string = path.join(toolDir, 'jdk', '251.0.0', 'x64');
|
|
await io.mkdirP(JavaDir);
|
|
let thrown = false;
|
|
try {
|
|
// This will throw if it doesn't find it in the cache (because no such version exists)
|
|
await installer.getJava('251', 'x64', 'bad path', 'jdk');
|
|
} catch {
|
|
thrown = true;
|
|
}
|
|
expect(thrown).toBe(true);
|
|
return;
|
|
});
|
|
});
|