mirror of
https://github.com/actions/setup-java.git
synced 2025-04-19 17:36:45 +00:00
add more capabilities
This commit is contained in:
parent
079229f185
commit
29d5f19da2
4 changed files with 107 additions and 18 deletions
32
.github/workflows/workflow.yml
vendored
32
.github/workflows/workflow.yml
vendored
|
@ -20,7 +20,33 @@ jobs:
|
||||||
- name: npm test
|
- name: npm test
|
||||||
run: npm test
|
run: npm test
|
||||||
|
|
||||||
test:
|
testAdoptOpenJDK:
|
||||||
|
runs-on: ${{ matrix.operating-system }}
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
operating-system: [ubuntu-latest, windows-latest]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Clear tool cache
|
||||||
|
if: runner.os != 'windows'
|
||||||
|
run: mv "${{ runner.tool_cache }}" "${{ runner.tool_cache }}.old"
|
||||||
|
- name: Clear tool cache (Windows)
|
||||||
|
if: runner.os == 'windows'
|
||||||
|
run: move "${{ runner.tool_cache }}" "${{ runner.tool_cache }}.old"
|
||||||
|
- name: Setup Java 13
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
java-version: 13.0.2
|
||||||
|
distro: adoptopenjdk
|
||||||
|
- name: Verify Java 13
|
||||||
|
if: runner.os != 'windows'
|
||||||
|
run: __tests__/verify-java.sh 13.0.2
|
||||||
|
- name: Verify Java 13 (Windows)
|
||||||
|
if: runner.os == 'windows'
|
||||||
|
run: __tests__/verify-java.ps1 13.0.2
|
||||||
|
|
||||||
|
testZulu:
|
||||||
runs-on: ${{ matrix.operating-system }}
|
runs-on: ${{ matrix.operating-system }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
@ -46,6 +72,7 @@ jobs:
|
||||||
if: runner.os == 'windows'
|
if: runner.os == 'windows'
|
||||||
run: __tests__/verify-java.ps1 13.0.2 "${{ steps.setup-java.outputs.path }}" "${{ steps.setup-java.outputs.version }}"
|
run: __tests__/verify-java.ps1 13.0.2 "${{ steps.setup-java.outputs.path }}" "${{ steps.setup-java.outputs.version }}"
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
test-proxy-adopt:
|
test-proxy-adopt:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
|
@ -72,6 +99,9 @@ jobs:
|
||||||
|
|
||||||
|
|
||||||
test-proxy-zulu:
|
test-proxy-zulu:
|
||||||
|
=======
|
||||||
|
test-proxy:
|
||||||
|
>>>>>>> add more capabilities
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: ubuntu:latest
|
image: ubuntu:latest
|
||||||
|
|
12
README.md
12
README.md
|
@ -30,12 +30,12 @@ Examples of version specifications that the java-version parameter will accept:
|
||||||
- A major Java version
|
- A major Java version
|
||||||
|
|
||||||
e.g. ```6, 7, 8, 9, 10, 11, 12, 13, ...```
|
e.g. ```6, 7, 8, 9, 10, 11, 12, 13, ...```
|
||||||
|
|
||||||
- A semver Java version specification (Zulu only)
|
- A semver Java version specification
|
||||||
|
|
||||||
e.g. ```8.0.232, 7.0.181, 11.0.4```
|
e.g. ```8.0.232, 7.0.181, 11.0.4```
|
||||||
|
|
||||||
e.g. ```8.0.x, >11.0.3, >=13.0.1, <8.0.212```
|
e.g. ```8.0.x, >11.0.3, >=13.0.1, <8.0.212``` (Zulu only)
|
||||||
|
|
||||||
- An early access (EA) Java version (Zulu only)
|
- An early access (EA) Java version (Zulu only)
|
||||||
|
|
||||||
|
@ -46,8 +46,8 @@ Examples of version specifications that the java-version parameter will accept:
|
||||||
e.g. ```14.0.0-ea.28, 15.0.0-ea.2``` (syntax for specifying an EA build number)
|
e.g. ```14.0.0-ea.28, 15.0.0-ea.2``` (syntax for specifying an EA build number)
|
||||||
|
|
||||||
Note that, per semver rules, EA builds will be matched by explicit EA version specifications.
|
Note that, per semver rules, EA builds will be matched by explicit EA version specifications.
|
||||||
|
|
||||||
- 1.x syntax (Zulu only)
|
- 1.x syntax
|
||||||
|
|
||||||
e.g. ```1.8``` (same as ```8```)
|
e.g. ```1.8``` (same as ```8```)
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,8 @@ describe('installer tests', () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Downloads java if no file given AdoptOpenJDK', async () => {
|
it('Downloads java if no file given AdoptOpenJDK', async () => {
|
||||||
await installer.getJava('8', 'adoptopenjdk', 'x64', '', 'jdk');
|
await installer.getJava('8.0.252', 'adoptopenjdk', 'x64', '', 'jdk');
|
||||||
const JavaDir = path.join(toolDir, 'jdk', '8.0.0', 'x64');
|
const JavaDir = path.join(toolDir, 'jdk', '8.0.252', 'x64');
|
||||||
|
|
||||||
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
||||||
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
||||||
|
@ -103,7 +103,15 @@ describe('installer tests', () => {
|
||||||
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Downloads java with 1.x syntax', async () => {
|
it('Downloads java with 1.x syntax AdoptOpenJDK', async () => {
|
||||||
|
await installer.getJava('1.13', 'adoptopenjdk', 'x64', '', 'jdk');
|
||||||
|
const JavaDir = path.join(toolDir, 'jdk', '13.0.2', 'x64');
|
||||||
|
|
||||||
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
||||||
|
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
||||||
|
}, 100000);
|
||||||
|
|
||||||
|
it('Downloads java with 1.x syntax Zulu', async () => {
|
||||||
await installer.getJava('1.10', 'zulu', 'x64', '', 'jdk');
|
await installer.getJava('1.10', 'zulu', 'x64', '', 'jdk');
|
||||||
const JavaDir = path.join(toolDir, 'jdk', '10.0.2', 'x64');
|
const JavaDir = path.join(toolDir, 'jdk', '10.0.2', 'x64');
|
||||||
|
|
||||||
|
@ -111,7 +119,15 @@ describe('installer tests', () => {
|
||||||
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
expect(fs.existsSync(path.join(JavaDir, 'bin'))).toBe(true);
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Downloads java with normal semver syntax', async () => {
|
it('Downloads java with normal semver syntax AdoptOpenJDK', async () => {
|
||||||
|
await installer.getJava('13.0.x', 'adoptopenjdk', 'x64', '', 'jdk');
|
||||||
|
const JavaDir = path.join(toolDir, 'jdk', '13.0.2', 'x64');
|
||||||
|
|
||||||
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
||||||
|
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
||||||
|
}, 100000);
|
||||||
|
|
||||||
|
it('Downloads java with normal semver syntax Zulu', async () => {
|
||||||
await installer.getJava('9.0.x', 'zulu', 'x64', '', 'jdk');
|
await installer.getJava('9.0.x', 'zulu', 'x64', '', 'jdk');
|
||||||
const JavaDir = path.join(toolDir, 'jdk', '9.0.7', 'x64');
|
const JavaDir = path.join(toolDir, 'jdk', '9.0.7', 'x64');
|
||||||
|
|
||||||
|
@ -120,8 +136,8 @@ describe('installer tests', () => {
|
||||||
}, 100000);
|
}, 100000);
|
||||||
|
|
||||||
it('Downloads java if package is jre AdoptOpenJDK', async () => {
|
it('Downloads java if package is jre AdoptOpenJDK', async () => {
|
||||||
await installer.getJava('11', 'adoptopenjdk', 'x64', '', 'jre');
|
await installer.getJava('11.0.2', 'adoptopenjdk', 'x64', '', 'jre');
|
||||||
const JavaDir = path.join(toolDir, 'jre', '11.0.0', 'x64');
|
const JavaDir = path.join(toolDir, 'jre', '11.0.2', 'x64');
|
||||||
|
|
||||||
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
expect(fs.existsSync(`${JavaDir}.complete`)).toBe(true);
|
||||||
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
expect(fs.existsSync(path.join(JavaDir, additionalPath, 'bin'))).toBe(true);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as tc from '@actions/tool-cache';
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import * as httpm from '@actions/http-client';
|
||||||
|
|
||||||
export async function getJavaAdoptOpenJDK(
|
export async function getJavaAdoptOpenJDK(
|
||||||
version: string,
|
version: string,
|
||||||
|
@ -9,15 +10,57 @@ export async function getJavaAdoptOpenJDK(
|
||||||
) {
|
) {
|
||||||
core.debug('Downloading JDK from AdoptOpenJDK');
|
core.debug('Downloading JDK from AdoptOpenJDK');
|
||||||
|
|
||||||
|
const http = new httpm.HttpClient('setup-java', undefined, {
|
||||||
|
allowRetries: true,
|
||||||
|
maxRetries: 3
|
||||||
|
});
|
||||||
|
|
||||||
|
const url = `https://api.adoptopenjdk.net/v3/assets/version/${normalizeVersion(
|
||||||
|
version
|
||||||
|
)}?architecture=${arch}&heap_size=normal&image_type=${javaPackage}&jvm_impl=hotspot&os=${OS}&page_size=1&release_type=ga&vendor=adoptopenjdk`;
|
||||||
|
|
||||||
|
const response = await http.get(url);
|
||||||
|
const statusCode = response.message.statusCode || 0;
|
||||||
|
if (statusCode < 200 || statusCode > 299) {
|
||||||
|
let body = '';
|
||||||
|
try {
|
||||||
|
body = await response.readBody();
|
||||||
|
} catch (err) {
|
||||||
|
core.debug(`Unable to read body: ${err.message}`);
|
||||||
|
}
|
||||||
|
const message = `Unexpected HTTP status code '${response.message.statusCode}' when retrieving versions from '${url}'. ${body}`.trim();
|
||||||
|
throw new Error(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
const contents = await response.readBody();
|
||||||
|
|
||||||
|
const parsedContents = JSON.parse(contents)[0];
|
||||||
|
|
||||||
const jdkFile = await tc.downloadTool(
|
const jdkFile = await tc.downloadTool(
|
||||||
`https://api.adoptopenjdk.net/v3/binary/latest/${normalize(
|
parsedContents.binaries[0].package.link
|
||||||
version
|
|
||||||
)}/ga/${OS}/${arch}/${javaPackage}/hotspot/normal/adoptopenjdk`
|
|
||||||
);
|
);
|
||||||
return [jdkFile, version];
|
return [jdkFile, version];
|
||||||
}
|
}
|
||||||
|
|
||||||
function normalize(version: string): string {
|
function normalizeVersion(version: string): string {
|
||||||
if (version == '1.8') return '8';
|
if (version.slice(0, 2) === '1.') {
|
||||||
|
// Trim leading 1. for versions like 1.8
|
||||||
|
version = version.slice(2);
|
||||||
|
if (!version) {
|
||||||
|
throw new Error('1. is not a valid version');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const parsedVersion = version.split('.');
|
||||||
|
let versionNumber: number;
|
||||||
|
if (parsedVersion[1]) {
|
||||||
|
versionNumber = parseInt(parsedVersion[parsedVersion.length - 1]) + 1;
|
||||||
|
version = `%28%2C${version.replace(
|
||||||
|
parsedVersion[parsedVersion.length - 1],
|
||||||
|
versionNumber.toString()
|
||||||
|
)}%29`;
|
||||||
|
} else {
|
||||||
|
versionNumber = parseInt(version) + 1;
|
||||||
|
version = `%28%2C${versionNumber!.toString()}%29`;
|
||||||
|
}
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue