Compare commits
1 Commits
v2.2.0
...
rename-v2-
Author | SHA1 | Date | |
---|---|---|---|
6191f55d32 |
37
.github/workflows/e2e-local-file.yml
vendored
37
.github/workflows/e2e-local-file.yml
vendored
@ -84,40 +84,3 @@ jobs:
|
|||||||
- name: Verify Java version
|
- name: Verify Java version
|
||||||
run: bash __tests__/verify-java.sh "11.0" "${{ steps.setup-java.outputs.path }}"
|
run: bash __tests__/verify-java.sh "11.0" "${{ steps.setup-java.outputs.path }}"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
setup-java-local-file-temurin:
|
|
||||||
name: Validate installation from local file Eclipse Temurin
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: Download Eclipse Temurin file
|
|
||||||
run: |
|
|
||||||
if ($IsLinux) {
|
|
||||||
$downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_linux_hotspot_11.0.12_7.tar.gz"
|
|
||||||
$localFilename = "java_package.tar.gz"
|
|
||||||
} elseif ($IsMacOS) {
|
|
||||||
$downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_mac_hotspot_11.0.12_7.tar.gz"
|
|
||||||
$localFilename = "java_package.tar.gz"
|
|
||||||
} elseif ($IsWindows) {
|
|
||||||
$downloadUrl = "https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.12%2B7/OpenJDK11U-jdk_x64_windows_hotspot_11.0.12_7.zip"
|
|
||||||
$localFilename = "java_package.zip"
|
|
||||||
}
|
|
||||||
echo "LocalFilename=$localFilename" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
|
|
||||||
(New-Object System.Net.WebClient).DownloadFile($downloadUrl, "$env:RUNNER_TEMP/$localFilename")
|
|
||||||
shell: pwsh
|
|
||||||
- name: setup-java
|
|
||||||
uses: ./
|
|
||||||
id: setup-java
|
|
||||||
with:
|
|
||||||
distribution: 'jdkfile'
|
|
||||||
jdkFile: ${{ runner.temp }}/${{ env.LocalFilename }}
|
|
||||||
java-version: '11.0.0-ea'
|
|
||||||
architecture: x64
|
|
||||||
- name: Verify Java version
|
|
||||||
run: bash __tests__/verify-java.sh "11.0.12" "${{ steps.setup-java.outputs.path }}"
|
|
||||||
shell: bash
|
|
||||||
|
49
.github/workflows/e2e-versions.yml
vendored
49
.github/workflows/e2e-versions.yml
vendored
@ -9,9 +9,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
schedule:
|
|
||||||
- cron: '0 */12 * * *'
|
|
||||||
workflow_dispatch:
|
|
||||||
jobs:
|
jobs:
|
||||||
setup-java-major-versions:
|
setup-java-major-versions:
|
||||||
name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
|
name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
|
||||||
@ -20,8 +18,8 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
distribution: ['adopt', 'adopt-openj9', 'temurin', 'zulu'] # internally 'adopt-hotspot' is the same as 'adopt'
|
distribution: ['adopt', 'zulu']
|
||||||
version: ['8', '11', '16']
|
version: ['8', '11', '15']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -58,15 +56,6 @@ jobs:
|
|||||||
- distribution: 'adopt'
|
- distribution: 'adopt'
|
||||||
version: '12.0.2+10.1'
|
version: '12.0.2+10.1'
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
- distribution: 'temurin'
|
|
||||||
version: '16.0.2+7'
|
|
||||||
os: macos-latest
|
|
||||||
- distribution: 'temurin'
|
|
||||||
version: '16.0.2+7'
|
|
||||||
os: windows-latest
|
|
||||||
- distribution: 'temurin'
|
|
||||||
version: '16.0.2+7'
|
|
||||||
os: ubuntu-latest
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -88,7 +77,7 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
distribution: ['adopt', 'temurin', 'zulu']
|
distribution: ['adopt', 'zulu']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@ -147,28 +136,6 @@ jobs:
|
|||||||
run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
|
run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
|
||||||
shell: bash
|
shell: bash
|
||||||
|
|
||||||
setup-java-ea-versions-temurin:
|
|
||||||
name: temurin ${{ matrix.version }} (jdk-x64) - ${{ matrix.os }}
|
|
||||||
needs: setup-java-major-minor-versions
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
|
||||||
version: ['17-ea']
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: setup-java
|
|
||||||
uses: ./
|
|
||||||
id: setup-java
|
|
||||||
with:
|
|
||||||
java-version: ${{ matrix.version }}
|
|
||||||
distribution: temurin
|
|
||||||
- name: Verify Java
|
|
||||||
run: bash __tests__/verify-java.sh "${{ matrix.version }}" "${{ steps.setup-java.outputs.path }}"
|
|
||||||
shell: bash
|
|
||||||
|
|
||||||
setup-java-custom-package-type:
|
setup-java-custom-package-type:
|
||||||
name: ${{ matrix.distribution }} ${{ matrix.version }} (${{ matrix.java-package }}-x64) - ${{ matrix.os }}
|
name: ${{ matrix.distribution }} ${{ matrix.version }} (${{ matrix.java-package }}-x64) - ${{ matrix.os }}
|
||||||
needs: setup-java-major-minor-versions
|
needs: setup-java-major-minor-versions
|
||||||
@ -177,10 +144,10 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
distribution: ['adopt', 'temurin', 'zulu']
|
distribution: ['adopt', 'zulu']
|
||||||
java-package: ['jre']
|
java-package: ['jre']
|
||||||
version:
|
version:
|
||||||
- '16.0'
|
- '15.0'
|
||||||
include:
|
include:
|
||||||
- distribution: 'zulu'
|
- distribution: 'zulu'
|
||||||
java-package: jre+fx
|
java-package: jre+fx
|
||||||
@ -190,10 +157,6 @@ jobs:
|
|||||||
java-package: jdk+fx
|
java-package: jdk+fx
|
||||||
version: '8.0.242'
|
version: '8.0.242'
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
exclude:
|
|
||||||
# Eclipse Temurin currently doesn't publish JREs, only JDKs
|
|
||||||
- distribution: 'temurin'
|
|
||||||
java-package: 'jre'
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
|
28
.github/workflows/release-new-action-version.yml
vendored
28
.github/workflows/release-new-action-version.yml
vendored
@ -1,28 +0,0 @@
|
|||||||
name: Release new action version
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [released]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
TAG_NAME:
|
|
||||||
description: 'Tag name that the major tag will point to'
|
|
||||||
required: true
|
|
||||||
|
|
||||||
env:
|
|
||||||
TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }}
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
update_tag:
|
|
||||||
name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes
|
|
||||||
environment:
|
|
||||||
name: releaseNewActionVersion
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Update the ${{ env.TAG_NAME }} tag
|
|
||||||
id: update-major-tag
|
|
||||||
uses: actions/publish-action@v0.1.0
|
|
||||||
with:
|
|
||||||
source-tag: ${{ env.TAG_NAME }}
|
|
||||||
slack-webhook: ${{ secrets.SLACK_WEBHOOK }}
|
|
23
README.md
23
README.md
@ -13,11 +13,11 @@ This action provides the following functionality for GitHub Actions runners:
|
|||||||
- Registering problem matchers for error output
|
- Registering problem matchers for error output
|
||||||
|
|
||||||
## V2 vs V1
|
## V2 vs V1
|
||||||
- V2 supports custom distributions and provides support for Zulu OpenJDK, Adopt OpenJDK and Eclipse Temurin out of the box. V1 supports only Zulu OpenJDK
|
- V2 supports custom distributions and provides support for Zulu OpenJDK and Adopt OpenJDK out of the box. V1 supports only Zulu OpenJDK
|
||||||
- V2 requires you to specify distribution along with the version. V1 defaults to Zulu OpenJDK, only version input is required. Follow [the migration guide](docs/switching-to-v2.md) to switch from V1 to V2
|
- V2 requires you to specify distribution along with the version. V1 defaults to Zulu OpenJDK, only version input is required. Follow [the migration guide](docs/switching-to-v2.md) to switch from V1 to V2
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
Inputs `java-version` and `distribution` are mandatory. See [Supported distributions](#supported-distributions) section for a list of available options.
|
Inputs `java-version` and `distribution` are mandatory. See [Supported distributions](../README.md#Supported-distributions) section for a list of available options.
|
||||||
|
|
||||||
### Basic
|
### Basic
|
||||||
**Adopt OpenJDK**
|
**Adopt OpenJDK**
|
||||||
@ -31,17 +31,6 @@ steps:
|
|||||||
- run: java -cp java HelloWorldApp
|
- run: java -cp java HelloWorldApp
|
||||||
```
|
```
|
||||||
|
|
||||||
**Eclipse Temurin**
|
|
||||||
```yaml
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
|
||||||
java-version: '8'
|
|
||||||
- run: java -cp java HelloWorldApp
|
|
||||||
```
|
|
||||||
|
|
||||||
**Zulu OpenJDK**
|
**Zulu OpenJDK**
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
@ -64,9 +53,7 @@ Currently, the following distributions are supported:
|
|||||||
| Keyword | Distribution | Official site | License |
|
| Keyword | Distribution | Official site | License |
|
||||||
|-|-|-|-|
|
|-|-|-|-|
|
||||||
| `zulu` | Zulu OpenJDK | [Link](https://www.azul.com/downloads/zulu-community/?package=jdk) | [Link](https://www.azul.com/products/zulu-and-zulu-enterprise/zulu-terms-of-use/) |
|
| `zulu` | Zulu OpenJDK | [Link](https://www.azul.com/downloads/zulu-community/?package=jdk) | [Link](https://www.azul.com/products/zulu-and-zulu-enterprise/zulu-terms-of-use/) |
|
||||||
| `adopt` or `adopt-hotspot` | Adopt OpenJDK Hotspot | [Link](https://adoptopenjdk.net/) | [Link](https://adoptopenjdk.net/about.html)
|
| `adopt` | Adopt OpenJDK | [Link](https://adoptopenjdk.net/) | [Link](https://adoptopenjdk.net/about.html)
|
||||||
| `adopt-openj9` | Adopt OpenJDK OpenJ9 | [Link](https://adoptopenjdk.net/) | [Link](https://adoptopenjdk.net/about.html)
|
|
||||||
| `temurin` | Eclipse Temurin | [Link](https://adoptium.net/) | [Link](https://adoptium.net/about.html)
|
|
||||||
|
|
||||||
**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.
|
**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.
|
||||||
|
|
||||||
@ -123,8 +110,8 @@ jobs:
|
|||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
The scripts and documentation in this project are released under the [MIT License](LICENSE).
|
The scripts and documentation in this project are released under the [MIT License](LICENSE)
|
||||||
|
|
||||||
## Contributions
|
## Contributions
|
||||||
|
|
||||||
Contributions are welcome! See [Contributor's Guide](CONTRIBUTING.md)
|
Contributions are welcome! See [Contributor's Guide](docs/contributors.md)
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,8 @@
|
|||||||
import { HttpClient } from '@actions/http-client';
|
import { HttpClient } from '@actions/http-client';
|
||||||
|
|
||||||
import { AdoptDistribution, AdoptImplementation } from '../../src/distributions/adopt/installer';
|
import * as semver from 'semver';
|
||||||
|
|
||||||
|
import { AdoptDistribution } from '../../src/distributions/adopt/installer';
|
||||||
import { JavaInstallerOptions } from '../../src/distributions/base-models';
|
import { JavaInstallerOptions } from '../../src/distributions/base-models';
|
||||||
|
|
||||||
let manifestData = require('../data/adopt.json') as [];
|
let manifestData = require('../data/adopt.json') as [];
|
||||||
@ -26,54 +28,26 @@ describe('getAvailableVersions', () => {
|
|||||||
it.each([
|
it.each([
|
||||||
[
|
[
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
||||||
AdoptImplementation.Hotspot,
|
'os=mac&architecture=x64&image_type=jdk&release_type=ga&page_size=20&page=0'
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ version: '11', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
{ version: '11', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
||||||
AdoptImplementation.Hotspot,
|
'os=mac&architecture=x86&image_type=jdk&release_type=ga&page_size=20&page=0'
|
||||||
'os=mac&architecture=x86&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jre', checkLatest: false },
|
{ version: '11', architecture: 'x64', packageType: 'jre', checkLatest: false },
|
||||||
AdoptImplementation.Hotspot,
|
'os=mac&architecture=x64&image_type=jre&release_type=ga&page_size=20&page=0'
|
||||||
'os=mac&architecture=x64&image_type=jre&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
{ version: '11-ea', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
{ version: '11-ea', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
||||||
AdoptImplementation.Hotspot,
|
'os=mac&architecture=x64&image_type=jdk&release_type=ea&page_size=20&page=0'
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ea&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
AdoptImplementation.OpenJ9,
|
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ga&jvm_impl=openj9&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '11', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
|
||||||
AdoptImplementation.OpenJ9,
|
|
||||||
'os=mac&architecture=x86&image_type=jdk&release_type=ga&jvm_impl=openj9&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jre', checkLatest: false },
|
|
||||||
AdoptImplementation.OpenJ9,
|
|
||||||
'os=mac&architecture=x64&image_type=jre&release_type=ga&jvm_impl=openj9&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '11-ea', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
AdoptImplementation.OpenJ9,
|
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ea&jvm_impl=openj9&page_size=20&page=0'
|
|
||||||
]
|
]
|
||||||
])(
|
])(
|
||||||
'build correct url for %s',
|
'build correct url for %s',
|
||||||
async (
|
async (installerOptions: JavaInstallerOptions, expectedParameters) => {
|
||||||
installerOptions: JavaInstallerOptions,
|
const distribution = new AdoptDistribution(installerOptions);
|
||||||
impl: AdoptImplementation,
|
|
||||||
expectedParameters
|
|
||||||
) => {
|
|
||||||
const distribution = new AdoptDistribution(installerOptions, impl);
|
|
||||||
const baseUrl = 'https://api.adoptopenjdk.net/v3/assets/version/%5B1.0,100.0%5D';
|
const baseUrl = 'https://api.adoptopenjdk.net/v3/assets/version/%5B1.0,100.0%5D';
|
||||||
const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptopenjdk&heap_size=normal&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`;
|
const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptopenjdk&heap_size=normal&jvm_impl=hotspot&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`;
|
||||||
distribution['getPlatformOption'] = () => 'mac';
|
distribution['getPlatformOption'] = () => 'mac';
|
||||||
|
|
||||||
await distribution['getAvailableVersions']();
|
await distribution['getAvailableVersions']();
|
||||||
@ -102,32 +76,16 @@ describe('getAvailableVersions', () => {
|
|||||||
result: []
|
result: []
|
||||||
});
|
});
|
||||||
|
|
||||||
const distribution = new AdoptDistribution(
|
const distribution = new AdoptDistribution({
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
version: '11',
|
||||||
AdoptImplementation.Hotspot
|
architecture: 'x64',
|
||||||
);
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
const availableVersions = await distribution['getAvailableVersions']();
|
const availableVersions = await distribution['getAvailableVersions']();
|
||||||
expect(availableVersions).not.toBeNull();
|
expect(availableVersions).not.toBeNull();
|
||||||
expect(availableVersions.length).toBe(manifestData.length * 2);
|
expect(availableVersions.length).toBe(manifestData.length * 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
it.each([
|
|
||||||
[AdoptImplementation.Hotspot, 'jdk', 'Java_Adopt_jdk'],
|
|
||||||
[AdoptImplementation.Hotspot, 'jre', 'Java_Adopt_jre'],
|
|
||||||
[AdoptImplementation.OpenJ9, 'jdk', 'Java_Adopt-OpenJ9_jdk'],
|
|
||||||
[AdoptImplementation.OpenJ9, 'jre', 'Java_Adopt-OpenJ9_jre']
|
|
||||||
])(
|
|
||||||
'find right toolchain folder',
|
|
||||||
(impl: AdoptImplementation, packageType: string, expected: string) => {
|
|
||||||
const distribution = new AdoptDistribution(
|
|
||||||
{ version: '11', architecture: 'x64', packageType: packageType, checkLatest: false },
|
|
||||||
impl
|
|
||||||
);
|
|
||||||
|
|
||||||
// @ts-ignore - because it is protected
|
|
||||||
expect(distribution.toolcacheFolderName).toBe(expected);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('findPackageForDownload', () => {
|
describe('findPackageForDownload', () => {
|
||||||
@ -144,20 +102,24 @@ describe('findPackageForDownload', () => {
|
|||||||
['15.0.1+9', '15.0.1+9'],
|
['15.0.1+9', '15.0.1+9'],
|
||||||
['15.0.1+9.1', '15.0.1+9.1']
|
['15.0.1+9.1', '15.0.1+9.1']
|
||||||
])('version is resolved correctly %s -> %s', async (input, expected) => {
|
])('version is resolved correctly %s -> %s', async (input, expected) => {
|
||||||
const distribution = new AdoptDistribution(
|
const distribution = new AdoptDistribution({
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
version: '11',
|
||||||
AdoptImplementation.Hotspot
|
architecture: 'x64',
|
||||||
);
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
distribution['getAvailableVersions'] = async () => manifestData;
|
||||||
const resolvedVersion = await distribution['findPackageForDownload'](input);
|
const resolvedVersion = await distribution['findPackageForDownload'](input);
|
||||||
expect(resolvedVersion.version).toBe(expected);
|
expect(resolvedVersion.version).toBe(expected);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('version is found but binaries list is empty', async () => {
|
it('version is found but binaries list is empty', async () => {
|
||||||
const distribution = new AdoptDistribution(
|
const distribution = new AdoptDistribution({
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
version: '11',
|
||||||
AdoptImplementation.Hotspot
|
architecture: 'x64',
|
||||||
);
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
distribution['getAvailableVersions'] = async () => manifestData;
|
||||||
await expect(distribution['findPackageForDownload']('9.0.8')).rejects.toThrowError(
|
await expect(distribution['findPackageForDownload']('9.0.8')).rejects.toThrowError(
|
||||||
/Could not find satisfied version for SemVer */
|
/Could not find satisfied version for SemVer */
|
||||||
@ -165,10 +127,12 @@ describe('findPackageForDownload', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('version is not found', async () => {
|
it('version is not found', async () => {
|
||||||
const distribution = new AdoptDistribution(
|
const distribution = new AdoptDistribution({
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
version: '11',
|
||||||
AdoptImplementation.Hotspot
|
architecture: 'x64',
|
||||||
);
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
distribution['getAvailableVersions'] = async () => manifestData;
|
||||||
await expect(distribution['findPackageForDownload']('7.x')).rejects.toThrowError(
|
await expect(distribution['findPackageForDownload']('7.x')).rejects.toThrowError(
|
||||||
/Could not find satisfied version for SemVer */
|
/Could not find satisfied version for SemVer */
|
||||||
@ -176,10 +140,12 @@ describe('findPackageForDownload', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('version list is empty', async () => {
|
it('version list is empty', async () => {
|
||||||
const distribution = new AdoptDistribution(
|
const distribution = new AdoptDistribution({
|
||||||
{ version: '11', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
version: '11',
|
||||||
AdoptImplementation.Hotspot
|
architecture: 'x64',
|
||||||
);
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
distribution['getAvailableVersions'] = async () => [];
|
distribution['getAvailableVersions'] = async () => [];
|
||||||
await expect(distribution['findPackageForDownload']('11')).rejects.toThrowError(
|
await expect(distribution['findPackageForDownload']('11')).rejects.toThrowError(
|
||||||
/Could not find satisfied version for SemVer */
|
/Could not find satisfied version for SemVer */
|
||||||
|
@ -1,164 +0,0 @@
|
|||||||
import { HttpClient } from '@actions/http-client';
|
|
||||||
|
|
||||||
import {
|
|
||||||
TemurinDistribution,
|
|
||||||
TemurinImplementation
|
|
||||||
} from '../../src/distributions/temurin/installer';
|
|
||||||
import { JavaInstallerOptions } from '../../src/distributions/base-models';
|
|
||||||
|
|
||||||
let manifestData = require('../data/temurin.json') as [];
|
|
||||||
|
|
||||||
describe('getAvailableVersions', () => {
|
|
||||||
let spyHttpClient: jest.SpyInstance;
|
|
||||||
|
|
||||||
beforeEach(() => {
|
|
||||||
spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
|
|
||||||
spyHttpClient.mockReturnValue({
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {},
|
|
||||||
result: []
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.resetAllMocks();
|
|
||||||
jest.clearAllMocks();
|
|
||||||
jest.restoreAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[
|
|
||||||
{ version: '16', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot,
|
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '16', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot,
|
|
||||||
'os=mac&architecture=x86&image_type=jdk&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '16', architecture: 'x64', packageType: 'jre', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot,
|
|
||||||
'os=mac&architecture=x64&image_type=jre&release_type=ga&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
],
|
|
||||||
[
|
|
||||||
{ version: '16-ea', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot,
|
|
||||||
'os=mac&architecture=x64&image_type=jdk&release_type=ea&jvm_impl=hotspot&page_size=20&page=0'
|
|
||||||
]
|
|
||||||
])(
|
|
||||||
'build correct url for %s',
|
|
||||||
async (
|
|
||||||
installerOptions: JavaInstallerOptions,
|
|
||||||
impl: TemurinImplementation,
|
|
||||||
expectedParameters
|
|
||||||
) => {
|
|
||||||
const distribution = new TemurinDistribution(installerOptions, impl);
|
|
||||||
const baseUrl = 'https://api.adoptium.net/v3/assets/version/%5B1.0,100.0%5D';
|
|
||||||
const expectedUrl = `${baseUrl}?project=jdk&vendor=adoptium&heap_size=normal&sort_method=DEFAULT&sort_order=DESC&${expectedParameters}`;
|
|
||||||
distribution['getPlatformOption'] = () => 'mac';
|
|
||||||
|
|
||||||
await distribution['getAvailableVersions']();
|
|
||||||
|
|
||||||
expect(spyHttpClient.mock.calls).toHaveLength(1);
|
|
||||||
expect(spyHttpClient.mock.calls[0][0]).toBe(expectedUrl);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
it('load available versions', async () => {
|
|
||||||
spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
|
|
||||||
spyHttpClient
|
|
||||||
.mockReturnValueOnce({
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {},
|
|
||||||
result: manifestData
|
|
||||||
})
|
|
||||||
.mockReturnValueOnce({
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {},
|
|
||||||
result: manifestData
|
|
||||||
})
|
|
||||||
.mockReturnValueOnce({
|
|
||||||
statusCode: 200,
|
|
||||||
headers: {},
|
|
||||||
result: []
|
|
||||||
});
|
|
||||||
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '8', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot
|
|
||||||
);
|
|
||||||
const availableVersions = await distribution['getAvailableVersions']();
|
|
||||||
expect(availableVersions).not.toBeNull();
|
|
||||||
expect(availableVersions.length).toBe(manifestData.length * 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it.each([
|
|
||||||
[TemurinImplementation.Hotspot, 'jdk', 'Java_Temurin-Hotspot_jdk'],
|
|
||||||
[TemurinImplementation.Hotspot, 'jre', 'Java_Temurin-Hotspot_jre']
|
|
||||||
])(
|
|
||||||
'find right toolchain folder',
|
|
||||||
(impl: TemurinImplementation, packageType: string, expected: string) => {
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '8', architecture: 'x64', packageType: packageType, checkLatest: false },
|
|
||||||
impl
|
|
||||||
);
|
|
||||||
|
|
||||||
// @ts-ignore - because it is protected
|
|
||||||
expect(distribution.toolcacheFolderName).toBe(expected);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('findPackageForDownload', () => {
|
|
||||||
it.each([
|
|
||||||
['8', '8.0.302+8'],
|
|
||||||
['16', '16.0.2+7'],
|
|
||||||
['16.0', '16.0.2+7'],
|
|
||||||
['16.0.2', '16.0.2+7'],
|
|
||||||
['8.x', '8.0.302+8'],
|
|
||||||
['x', '16.0.2+7']
|
|
||||||
])('version is resolved correctly %s -> %s', async (input, expected) => {
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '8', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot
|
|
||||||
);
|
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
|
||||||
const resolvedVersion = await distribution['findPackageForDownload'](input);
|
|
||||||
expect(resolvedVersion.version).toBe(expected);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('version is found but binaries list is empty', async () => {
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '9.0.8', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot
|
|
||||||
);
|
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
|
||||||
await expect(distribution['findPackageForDownload']('9.0.8')).rejects.toThrowError(
|
|
||||||
/Could not find satisfied version for SemVer */
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('version is not found', async () => {
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '7.x', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot
|
|
||||||
);
|
|
||||||
distribution['getAvailableVersions'] = async () => manifestData;
|
|
||||||
await expect(distribution['findPackageForDownload']('7.x')).rejects.toThrowError(
|
|
||||||
/Could not find satisfied version for SemVer */
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('version list is empty', async () => {
|
|
||||||
const distribution = new TemurinDistribution(
|
|
||||||
{ version: '8', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
|
||||||
TemurinImplementation.Hotspot
|
|
||||||
);
|
|
||||||
distribution['getAvailableVersions'] = async () => [];
|
|
||||||
await expect(distribution['findPackageForDownload']('8')).rejects.toThrowError(
|
|
||||||
/Could not find satisfied version for SemVer */
|
|
||||||
);
|
|
||||||
});
|
|
||||||
});
|
|
215
dist/setup/index.js
vendored
215
dist/setup/index.js
vendored
@ -1476,32 +1476,23 @@ exports.string = string;
|
|||||||
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.getJavaDistribution = void 0;
|
exports.getJavaDistribution = void 0;
|
||||||
const installer_1 = __webpack_require__(144);
|
const installer_1 = __webpack_require__(584);
|
||||||
const installer_2 = __webpack_require__(393);
|
const installer_2 = __webpack_require__(144);
|
||||||
const installer_3 = __webpack_require__(584);
|
const installer_3 = __webpack_require__(393);
|
||||||
const installer_4 = __webpack_require__(852);
|
|
||||||
var JavaDistribution;
|
var JavaDistribution;
|
||||||
(function (JavaDistribution) {
|
(function (JavaDistribution) {
|
||||||
JavaDistribution["Adopt"] = "adopt";
|
JavaDistribution["Adopt"] = "adopt";
|
||||||
JavaDistribution["AdoptHotspot"] = "adopt-hotspot";
|
|
||||||
JavaDistribution["AdoptOpenJ9"] = "adopt-openj9";
|
|
||||||
JavaDistribution["Temurin"] = "temurin";
|
|
||||||
JavaDistribution["Zulu"] = "zulu";
|
JavaDistribution["Zulu"] = "zulu";
|
||||||
JavaDistribution["JdkFile"] = "jdkfile";
|
JavaDistribution["JdkFile"] = "jdkfile";
|
||||||
})(JavaDistribution || (JavaDistribution = {}));
|
})(JavaDistribution || (JavaDistribution = {}));
|
||||||
function getJavaDistribution(distributionName, installerOptions, jdkFile) {
|
function getJavaDistribution(distributionName, installerOptions, jdkFile) {
|
||||||
switch (distributionName) {
|
switch (distributionName) {
|
||||||
case JavaDistribution.JdkFile:
|
case JavaDistribution.JdkFile:
|
||||||
return new installer_1.LocalDistribution(installerOptions, jdkFile);
|
return new installer_2.LocalDistribution(installerOptions, jdkFile);
|
||||||
case JavaDistribution.Adopt:
|
case JavaDistribution.Adopt:
|
||||||
case JavaDistribution.AdoptHotspot:
|
return new installer_1.AdoptDistribution(installerOptions);
|
||||||
return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.Hotspot);
|
|
||||||
case JavaDistribution.AdoptOpenJ9:
|
|
||||||
return new installer_3.AdoptDistribution(installerOptions, installer_3.AdoptImplementation.OpenJ9);
|
|
||||||
case JavaDistribution.Temurin:
|
|
||||||
return new installer_4.TemurinDistribution(installerOptions, installer_4.TemurinImplementation.Hotspot);
|
|
||||||
case JavaDistribution.Zulu:
|
case JavaDistribution.Zulu:
|
||||||
return new installer_2.ZuluDistribution(installerOptions);
|
return new installer_3.ZuluDistribution(installerOptions);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -26898,7 +26889,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
Object.defineProperty(exports, "__esModule", { value: true });
|
||||||
exports.AdoptDistribution = exports.AdoptImplementation = void 0;
|
exports.AdoptDistribution = void 0;
|
||||||
const core = __importStar(__webpack_require__(470));
|
const core = __importStar(__webpack_require__(470));
|
||||||
const tc = __importStar(__webpack_require__(139));
|
const tc = __importStar(__webpack_require__(139));
|
||||||
const fs_1 = __importDefault(__webpack_require__(747));
|
const fs_1 = __importDefault(__webpack_require__(747));
|
||||||
@ -26906,15 +26897,9 @@ const path_1 = __importDefault(__webpack_require__(622));
|
|||||||
const semver_1 = __importDefault(__webpack_require__(876));
|
const semver_1 = __importDefault(__webpack_require__(876));
|
||||||
const base_installer_1 = __webpack_require__(83);
|
const base_installer_1 = __webpack_require__(83);
|
||||||
const util_1 = __webpack_require__(322);
|
const util_1 = __webpack_require__(322);
|
||||||
var AdoptImplementation;
|
|
||||||
(function (AdoptImplementation) {
|
|
||||||
AdoptImplementation["Hotspot"] = "Hotspot";
|
|
||||||
AdoptImplementation["OpenJ9"] = "OpenJ9";
|
|
||||||
})(AdoptImplementation = exports.AdoptImplementation || (exports.AdoptImplementation = {}));
|
|
||||||
class AdoptDistribution extends base_installer_1.JavaBase {
|
class AdoptDistribution extends base_installer_1.JavaBase {
|
||||||
constructor(installerOptions, jvmImpl) {
|
constructor(installerOptions) {
|
||||||
super(`Adopt-${jvmImpl}`, installerOptions);
|
super('Adopt', installerOptions);
|
||||||
this.jvmImpl = jvmImpl;
|
|
||||||
}
|
}
|
||||||
findPackageForDownload(version) {
|
findPackageForDownload(version) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
@ -26959,14 +26944,6 @@ class AdoptDistribution extends base_installer_1.JavaBase {
|
|||||||
return { version: javaRelease.version, path: javaPath };
|
return { version: javaRelease.version, path: javaPath };
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
get toolcacheFolderName() {
|
|
||||||
if (this.jvmImpl === AdoptImplementation.Hotspot) {
|
|
||||||
// exclude Hotspot postfix from distribution name because Hosted runners have pre-cached Adopt OpenJDK under "Java_Adopt_jdk"
|
|
||||||
// for more information see: https://github.com/actions/setup-java/pull/155#discussion_r610451063
|
|
||||||
return `Java_Adopt_${this.packageType}`;
|
|
||||||
}
|
|
||||||
return super.toolcacheFolderName;
|
|
||||||
}
|
|
||||||
getAvailableVersions() {
|
getAvailableVersions() {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const platform = this.getPlatformOption();
|
const platform = this.getPlatformOption();
|
||||||
@ -26979,13 +26956,13 @@ class AdoptDistribution extends base_installer_1.JavaBase {
|
|||||||
`project=jdk`,
|
`project=jdk`,
|
||||||
'vendor=adoptopenjdk',
|
'vendor=adoptopenjdk',
|
||||||
`heap_size=normal`,
|
`heap_size=normal`,
|
||||||
|
`jvm_impl=hotspot`,
|
||||||
'sort_method=DEFAULT',
|
'sort_method=DEFAULT',
|
||||||
'sort_order=DESC',
|
'sort_order=DESC',
|
||||||
`os=${platform}`,
|
`os=${platform}`,
|
||||||
`architecture=${arch}`,
|
`architecture=${arch}`,
|
||||||
`image_type=${imageType}`,
|
`image_type=${imageType}`,
|
||||||
`release_type=${releaseType}`,
|
`release_type=${releaseType}`
|
||||||
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
||||||
].join('&');
|
].join('&');
|
||||||
// need to iterate through all pages to retrieve the list of all versions
|
// need to iterate through all pages to retrieve the list of all versions
|
||||||
// Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop
|
// Adopt API doesn't provide way to retrieve the count of pages to iterate so infinity loop
|
||||||
@ -39877,175 +39854,7 @@ module.exports = new Type('tag:yaml.org,2002:omap', {
|
|||||||
/* 849 */,
|
/* 849 */,
|
||||||
/* 850 */,
|
/* 850 */,
|
||||||
/* 851 */,
|
/* 851 */,
|
||||||
/* 852 */
|
/* 852 */,
|
||||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
||||||
}) : (function(o, m, k, k2) {
|
|
||||||
if (k2 === undefined) k2 = k;
|
|
||||||
o[k2] = m[k];
|
|
||||||
}));
|
|
||||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
||||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
||||||
}) : function(o, v) {
|
|
||||||
o["default"] = v;
|
|
||||||
});
|
|
||||||
var __importStar = (this && this.__importStar) || function (mod) {
|
|
||||||
if (mod && mod.__esModule) return mod;
|
|
||||||
var result = {};
|
|
||||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
||||||
__setModuleDefault(result, mod);
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
||||||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
||||||
return new (P || (P = Promise))(function (resolve, reject) {
|
|
||||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
||||||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
||||||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
||||||
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
||||||
});
|
|
||||||
};
|
|
||||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
||||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
||||||
};
|
|
||||||
Object.defineProperty(exports, "__esModule", { value: true });
|
|
||||||
exports.TemurinDistribution = exports.TemurinImplementation = void 0;
|
|
||||||
const core = __importStar(__webpack_require__(470));
|
|
||||||
const tc = __importStar(__webpack_require__(139));
|
|
||||||
const fs_1 = __importDefault(__webpack_require__(747));
|
|
||||||
const path_1 = __importDefault(__webpack_require__(622));
|
|
||||||
const semver_1 = __importDefault(__webpack_require__(876));
|
|
||||||
const base_installer_1 = __webpack_require__(83);
|
|
||||||
const util_1 = __webpack_require__(322);
|
|
||||||
var TemurinImplementation;
|
|
||||||
(function (TemurinImplementation) {
|
|
||||||
TemurinImplementation["Hotspot"] = "Hotspot";
|
|
||||||
})(TemurinImplementation = exports.TemurinImplementation || (exports.TemurinImplementation = {}));
|
|
||||||
class TemurinDistribution extends base_installer_1.JavaBase {
|
|
||||||
constructor(installerOptions, jvmImpl) {
|
|
||||||
super(`Temurin-${jvmImpl}`, installerOptions);
|
|
||||||
this.jvmImpl = jvmImpl;
|
|
||||||
}
|
|
||||||
findPackageForDownload(version) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
const availableVersionsRaw = yield this.getAvailableVersions();
|
|
||||||
const availableVersionsWithBinaries = availableVersionsRaw
|
|
||||||
.filter(item => item.binaries.length > 0)
|
|
||||||
.map(item => {
|
|
||||||
// normalize 17.0.0-beta+33.0.202107301459 to 17.0.0+33.0.202107301459 for earlier access versions
|
|
||||||
const formattedVersion = this.stable
|
|
||||||
? item.version_data.semver
|
|
||||||
: item.version_data.semver.replace('-beta+', '+');
|
|
||||||
return {
|
|
||||||
version: formattedVersion,
|
|
||||||
url: item.binaries[0].package.link
|
|
||||||
};
|
|
||||||
});
|
|
||||||
const satisfiedVersions = availableVersionsWithBinaries
|
|
||||||
.filter(item => util_1.isVersionSatisfies(version, item.version))
|
|
||||||
.sort((a, b) => {
|
|
||||||
return -semver_1.default.compareBuild(a.version, b.version);
|
|
||||||
});
|
|
||||||
const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
|
|
||||||
if (!resolvedFullVersion) {
|
|
||||||
const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', ');
|
|
||||||
const availableOptionsMessage = availableOptions
|
|
||||||
? `\nAvailable versions: ${availableOptions}`
|
|
||||||
: '';
|
|
||||||
throw new Error(`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`);
|
|
||||||
}
|
|
||||||
return resolvedFullVersion;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
downloadTool(javaRelease) {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
let javaPath;
|
|
||||||
let extractedJavaPath;
|
|
||||||
core.info(`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`);
|
|
||||||
const javaArchivePath = yield tc.downloadTool(javaRelease.url);
|
|
||||||
core.info(`Extracting Java archive...`);
|
|
||||||
let extension = util_1.getDownloadArchiveExtension();
|
|
||||||
extractedJavaPath = yield util_1.extractJdkFile(javaArchivePath, extension);
|
|
||||||
const archiveName = fs_1.default.readdirSync(extractedJavaPath)[0];
|
|
||||||
const archivePath = path_1.default.join(extractedJavaPath, archiveName);
|
|
||||||
const version = this.getToolcacheVersionName(javaRelease.version);
|
|
||||||
javaPath = yield tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
|
|
||||||
return { version: javaRelease.version, path: javaPath };
|
|
||||||
});
|
|
||||||
}
|
|
||||||
get toolcacheFolderName() {
|
|
||||||
return super.toolcacheFolderName;
|
|
||||||
}
|
|
||||||
getAvailableVersions() {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
const platform = this.getPlatformOption();
|
|
||||||
const arch = this.architecture;
|
|
||||||
const imageType = this.packageType;
|
|
||||||
const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions
|
|
||||||
const releaseType = this.stable ? 'ga' : 'ea';
|
|
||||||
console.time('temurin-retrieve-available-versions');
|
|
||||||
const baseRequestArguments = [
|
|
||||||
`project=jdk`,
|
|
||||||
'vendor=adoptium',
|
|
||||||
`heap_size=normal`,
|
|
||||||
'sort_method=DEFAULT',
|
|
||||||
'sort_order=DESC',
|
|
||||||
`os=${platform}`,
|
|
||||||
`architecture=${arch}`,
|
|
||||||
`image_type=${imageType}`,
|
|
||||||
`release_type=${releaseType}`,
|
|
||||||
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
||||||
].join('&');
|
|
||||||
// need to iterate through all pages to retrieve the list of all versions
|
|
||||||
// Adoptium API doesn't provide way to retrieve the count of pages to iterate so infinity loop
|
|
||||||
let page_index = 0;
|
|
||||||
const availableVersions = [];
|
|
||||||
while (true) {
|
|
||||||
const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`;
|
|
||||||
const availableVersionsUrl = `https://api.adoptium.net/v3/assets/version/${versionRange}?${requestArguments}`;
|
|
||||||
if (core.isDebug() && page_index === 0) {
|
|
||||||
// url is identical except page_index so print it once for debug
|
|
||||||
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
|
|
||||||
}
|
|
||||||
const paginationPage = (yield this.http.getJson(availableVersionsUrl)).result;
|
|
||||||
if (paginationPage === null || paginationPage.length === 0) {
|
|
||||||
// break infinity loop because we have reached end of pagination
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
availableVersions.push(...paginationPage);
|
|
||||||
page_index++;
|
|
||||||
}
|
|
||||||
if (core.isDebug()) {
|
|
||||||
core.startGroup('Print information about available versions');
|
|
||||||
console.timeEnd('temurin-retrieve-available-versions');
|
|
||||||
console.log(`Available versions: [${availableVersions.length}]`);
|
|
||||||
console.log(availableVersions.map(item => item.version_data.semver).join(', '));
|
|
||||||
core.endGroup();
|
|
||||||
}
|
|
||||||
return availableVersions;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
getPlatformOption() {
|
|
||||||
// Adoptium has own platform names so need to map them
|
|
||||||
switch (process.platform) {
|
|
||||||
case 'darwin':
|
|
||||||
return 'mac';
|
|
||||||
case 'win32':
|
|
||||||
return 'windows';
|
|
||||||
default:
|
|
||||||
return process.platform;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
exports.TemurinDistribution = TemurinDistribution;
|
|
||||||
|
|
||||||
|
|
||||||
/***/ }),
|
|
||||||
/* 853 */,
|
/* 853 */,
|
||||||
/* 854 */,
|
/* 854 */,
|
||||||
/* 855 */,
|
/* 855 */,
|
||||||
|
@ -22,7 +22,7 @@ steps:
|
|||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- uses: actions/setup-java@v2
|
- uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'adopt-hotspot' # See 'Supported distributions' for available options @ README.md
|
distribution: 'adopt'
|
||||||
java-version: '11'
|
java-version: '11'
|
||||||
- run: java -cp java HelloWorldApp
|
- run: java -cp java HelloWorldApp
|
||||||
```
|
```
|
||||||
@ -75,7 +75,7 @@ steps:
|
|||||||
wget -O $RUNNER_TEMP/java_package.tar.gz $download_url
|
wget -O $RUNNER_TEMP/java_package.tar.gz $download_url
|
||||||
- uses: actions/setup-java@v2
|
- uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'jdkfile'
|
distribution: 'jdkFile'
|
||||||
jdkFile: ${{ runner.temp }}/java_package.tar.gz
|
jdkFile: ${{ runner.temp }}/java_package.tar.gz
|
||||||
java-version: '11.0.0'
|
java-version: '11.0.0'
|
||||||
architecture: x64
|
architecture: x64
|
||||||
@ -129,6 +129,7 @@ jobs:
|
|||||||
```yaml
|
```yaml
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
@ -206,7 +207,7 @@ The two `settings.xml` files created from the above example look like the follow
|
|||||||
</settings>
|
</settings>
|
||||||
```
|
```
|
||||||
|
|
||||||
***NOTE***: The `settings.xml` file is created in the Actions `$HOME/.m2` directory. If you have an existing `settings.xml` file at that location, it will be overwritten. See [below](#apache-maven-with-a-settings-path) for using the `settings-path` to change your `settings.xml` file location.
|
***NOTE***: The `settings.xml` file is created in the Actions $HOME/.m2 directory. If you have an existing `settings.xml` file at that location, it will be overwritten. See below for using the `settings-path` to change your `settings.xml` file location.
|
||||||
|
|
||||||
If you don't want to overwrite the `settings.xml` file, you can set `overwrite-settings: false`
|
If you don't want to overwrite the `settings.xml` file, you can set `overwrite-settings: false`
|
||||||
|
|
||||||
@ -233,34 +234,6 @@ If `gpg-private-key` input is provided, the private key will be written to a fil
|
|||||||
|
|
||||||
See the help docs on [Publishing a Package](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-apache-maven-for-use-with-github-packages#publishing-a-package) for more information on the `pom.xml` file.
|
See the help docs on [Publishing a Package](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-apache-maven-for-use-with-github-packages#publishing-a-package) for more information on the `pom.xml` file.
|
||||||
|
|
||||||
## Apache Maven with a settings path
|
|
||||||
|
|
||||||
When using an Actions self-hosted runner with multiple shared runners the default `$HOME` directory can be shared by a number runners at the same time which could overwrite existing settings file. Setting the `settings-path` variable allows you to choose a unique location for your settings file.
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
- name: Set up JDK 11 for Shared Runner
|
|
||||||
uses: actions/setup-java@v2
|
|
||||||
with:
|
|
||||||
distribution: '<distribution>'
|
|
||||||
java-version: '11'
|
|
||||||
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
|
||||||
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
|
||||||
|
|
||||||
- name: Build with Maven
|
|
||||||
run: mvn -B package --file pom.xml
|
|
||||||
|
|
||||||
- name: Publish to GitHub Packages Apache Maven
|
|
||||||
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Publishing using Gradle
|
## Publishing using Gradle
|
||||||
```yaml
|
```yaml
|
||||||
jobs:
|
jobs:
|
||||||
@ -291,6 +264,35 @@ jobs:
|
|||||||
|
|
||||||
See the help docs on [Publishing a Package with Gradle](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-gradle-for-use-with-github-packages#example-using-gradle-groovy-for-a-single-package-in-a-repository) for more information on the `build.gradle` configuration file.
|
See the help docs on [Publishing a Package with Gradle](https://help.github.com/en/github/managing-packages-with-github-packages/configuring-gradle-for-use-with-github-packages#example-using-gradle-groovy-for-a-single-package-in-a-repository) for more information on the `build.gradle` configuration file.
|
||||||
|
|
||||||
|
## Apache Maven with a settings path
|
||||||
|
|
||||||
|
When using an Actions self-hosted runner with multiple shared runners the default `$HOME` directory can be shared by a number runners at the same time which could overwrite existing settings file. Setting the `settings-path` variable allows you to choose a unique location for your settings file.
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Set up JDK 11 for Shared Runner
|
||||||
|
uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: '<distribution>'
|
||||||
|
java-version: '11'
|
||||||
|
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
|
||||||
|
settings-path: ${{ github.workspace }} # location for the settings.xml file
|
||||||
|
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn -B package --file pom.xml
|
||||||
|
|
||||||
|
- name: Publish to GitHub Packages Apache Maven
|
||||||
|
run: mvn deploy -s $GITHUB_WORKSPACE/settings.xml
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ github.token }}
|
||||||
|
```
|
||||||
|
|
||||||
## Hosted Tool Cache
|
## Hosted Tool Cache
|
||||||
GitHub Hosted Runners have a tool cache that comes with some Java versions pre-installed. This tool cache helps speed up runs and tool setup by not requiring any new downloads. There is an environment variable called `RUNNER_TOOL_CACHE` on each runner that describes the location of this tools cache and this is where you can find the pre-installed versions of Java. `setup-java` works by taking a specific version of Java in this tool cache and adding it to PATH if the version, architecture and distribution match.
|
GitHub Hosted Runners have a tool cache that comes with some Java versions pre-installed. This tool cache helps speed up runs and tool setup by not requiring any new downloads. There is an environment variable called `RUNNER_TOOL_CACHE` on each runner that describes the location of this tools cache and this is where you can find the pre-installed versions of Java. `setup-java` works by taking a specific version of Java in this tool cache and adding it to PATH if the version, architecture and distribution match.
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ steps:
|
|||||||
**General recommendation** — configure CI with the same distribution that is used on your local dev machine.
|
**General recommendation** — configure CI with the same distribution that is used on your local dev machine.
|
||||||
|
|
||||||
## Installing custom Java distribution from local file
|
## Installing custom Java distribution from local file
|
||||||
Since the `distribution` input is required in V2, you should specify it using `jdkfile` to continue installing Java from a local file on the runner
|
Since the `distribution` input is required in V2, you should specify it using `jdkFile` to continue installing Java from a local file on the runner
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
- run: |
|
- run: |
|
||||||
@ -24,7 +24,7 @@ steps:
|
|||||||
wget -O $RUNNER_TEMP/java_package.tar.gz $download_url
|
wget -O $RUNNER_TEMP/java_package.tar.gz $download_url
|
||||||
- uses: actions/setup-java@v2
|
- uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'jdkfile'
|
distribution: 'jdkFile'
|
||||||
jdkFile: ${{ runner.temp }}/java_package.tar.gz
|
jdkFile: ${{ runner.temp }}/java_package.tar.gz
|
||||||
java-version: '11.0.0'
|
java-version: '11.0.0'
|
||||||
architecture: x64
|
architecture: x64
|
||||||
|
6301
package-lock.json
generated
6301
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -7,20 +7,13 @@ import semver from 'semver';
|
|||||||
|
|
||||||
import { JavaBase } from '../base-installer';
|
import { JavaBase } from '../base-installer';
|
||||||
import { IAdoptAvailableVersions } from './models';
|
import { IAdoptAvailableVersions } from './models';
|
||||||
import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from '../base-models';
|
import { JavaInstallerOptions, JavaDownloadRelease, JavaInstallerResults } from '../base-models';
|
||||||
|
import { MACOS_JAVA_CONTENT_POSTFIX } from '../../constants';
|
||||||
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
|
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
|
||||||
|
|
||||||
export enum AdoptImplementation {
|
|
||||||
Hotspot = 'Hotspot',
|
|
||||||
OpenJ9 = 'OpenJ9'
|
|
||||||
}
|
|
||||||
|
|
||||||
export class AdoptDistribution extends JavaBase {
|
export class AdoptDistribution extends JavaBase {
|
||||||
constructor(
|
constructor(installerOptions: JavaInstallerOptions) {
|
||||||
installerOptions: JavaInstallerOptions,
|
super('Adopt', installerOptions);
|
||||||
private readonly jvmImpl: AdoptImplementation
|
|
||||||
) {
|
|
||||||
super(`Adopt-${jvmImpl}`, installerOptions);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected async findPackageForDownload(version: string): Promise<JavaDownloadRelease> {
|
protected async findPackageForDownload(version: string): Promise<JavaDownloadRelease> {
|
||||||
@ -77,15 +70,6 @@ export class AdoptDistribution extends JavaBase {
|
|||||||
return { version: javaRelease.version, path: javaPath };
|
return { version: javaRelease.version, path: javaPath };
|
||||||
}
|
}
|
||||||
|
|
||||||
protected get toolcacheFolderName(): string {
|
|
||||||
if (this.jvmImpl === AdoptImplementation.Hotspot) {
|
|
||||||
// exclude Hotspot postfix from distribution name because Hosted runners have pre-cached Adopt OpenJDK under "Java_Adopt_jdk"
|
|
||||||
// for more information see: https://github.com/actions/setup-java/pull/155#discussion_r610451063
|
|
||||||
return `Java_Adopt_${this.packageType}`;
|
|
||||||
}
|
|
||||||
return super.toolcacheFolderName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async getAvailableVersions(): Promise<IAdoptAvailableVersions[]> {
|
private async getAvailableVersions(): Promise<IAdoptAvailableVersions[]> {
|
||||||
const platform = this.getPlatformOption();
|
const platform = this.getPlatformOption();
|
||||||
const arch = this.architecture;
|
const arch = this.architecture;
|
||||||
@ -99,13 +83,13 @@ export class AdoptDistribution extends JavaBase {
|
|||||||
`project=jdk`,
|
`project=jdk`,
|
||||||
'vendor=adoptopenjdk',
|
'vendor=adoptopenjdk',
|
||||||
`heap_size=normal`,
|
`heap_size=normal`,
|
||||||
|
`jvm_impl=hotspot`,
|
||||||
'sort_method=DEFAULT',
|
'sort_method=DEFAULT',
|
||||||
'sort_order=DESC',
|
'sort_order=DESC',
|
||||||
`os=${platform}`,
|
`os=${platform}`,
|
||||||
`architecture=${arch}`,
|
`architecture=${arch}`,
|
||||||
`image_type=${imageType}`,
|
`image_type=${imageType}`,
|
||||||
`release_type=${releaseType}`,
|
`release_type=${releaseType}`
|
||||||
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
||||||
].join('&');
|
].join('&');
|
||||||
|
|
||||||
// need to iterate through all pages to retrieve the list of all versions
|
// need to iterate through all pages to retrieve the list of all versions
|
||||||
|
@ -1,15 +1,11 @@
|
|||||||
|
import { AdoptDistribution } from './adopt/installer';
|
||||||
import { JavaBase } from './base-installer';
|
import { JavaBase } from './base-installer';
|
||||||
import { JavaInstallerOptions } from './base-models';
|
import { JavaInstallerOptions } from './base-models';
|
||||||
import { LocalDistribution } from './local/installer';
|
import { LocalDistribution } from './local/installer';
|
||||||
import { ZuluDistribution } from './zulu/installer';
|
import { ZuluDistribution } from './zulu/installer';
|
||||||
import { AdoptDistribution, AdoptImplementation } from './adopt/installer';
|
|
||||||
import { TemurinDistribution, TemurinImplementation } from './temurin/installer';
|
|
||||||
|
|
||||||
enum JavaDistribution {
|
enum JavaDistribution {
|
||||||
Adopt = 'adopt',
|
Adopt = 'adopt',
|
||||||
AdoptHotspot = 'adopt-hotspot',
|
|
||||||
AdoptOpenJ9 = 'adopt-openj9',
|
|
||||||
Temurin = 'temurin',
|
|
||||||
Zulu = 'zulu',
|
Zulu = 'zulu',
|
||||||
JdkFile = 'jdkfile'
|
JdkFile = 'jdkfile'
|
||||||
}
|
}
|
||||||
@ -23,12 +19,7 @@ export function getJavaDistribution(
|
|||||||
case JavaDistribution.JdkFile:
|
case JavaDistribution.JdkFile:
|
||||||
return new LocalDistribution(installerOptions, jdkFile);
|
return new LocalDistribution(installerOptions, jdkFile);
|
||||||
case JavaDistribution.Adopt:
|
case JavaDistribution.Adopt:
|
||||||
case JavaDistribution.AdoptHotspot:
|
return new AdoptDistribution(installerOptions);
|
||||||
return new AdoptDistribution(installerOptions, AdoptImplementation.Hotspot);
|
|
||||||
case JavaDistribution.AdoptOpenJ9:
|
|
||||||
return new AdoptDistribution(installerOptions, AdoptImplementation.OpenJ9);
|
|
||||||
case JavaDistribution.Temurin:
|
|
||||||
return new TemurinDistribution(installerOptions, TemurinImplementation.Hotspot);
|
|
||||||
case JavaDistribution.Zulu:
|
case JavaDistribution.Zulu:
|
||||||
return new ZuluDistribution(installerOptions);
|
return new ZuluDistribution(installerOptions);
|
||||||
default:
|
default:
|
||||||
|
@ -1,155 +0,0 @@
|
|||||||
import * as core from '@actions/core';
|
|
||||||
import * as tc from '@actions/tool-cache';
|
|
||||||
|
|
||||||
import fs from 'fs';
|
|
||||||
import path from 'path';
|
|
||||||
import semver from 'semver';
|
|
||||||
|
|
||||||
import { JavaBase } from '../base-installer';
|
|
||||||
import { ITemurinAvailableVersions } from './models';
|
|
||||||
import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from '../base-models';
|
|
||||||
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
|
|
||||||
|
|
||||||
export enum TemurinImplementation {
|
|
||||||
Hotspot = 'Hotspot'
|
|
||||||
}
|
|
||||||
|
|
||||||
export class TemurinDistribution extends JavaBase {
|
|
||||||
constructor(
|
|
||||||
installerOptions: JavaInstallerOptions,
|
|
||||||
private readonly jvmImpl: TemurinImplementation
|
|
||||||
) {
|
|
||||||
super(`Temurin-${jvmImpl}`, installerOptions);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async findPackageForDownload(version: string): Promise<JavaDownloadRelease> {
|
|
||||||
const availableVersionsRaw = await this.getAvailableVersions();
|
|
||||||
const availableVersionsWithBinaries = availableVersionsRaw
|
|
||||||
.filter(item => item.binaries.length > 0)
|
|
||||||
.map(item => {
|
|
||||||
// normalize 17.0.0-beta+33.0.202107301459 to 17.0.0+33.0.202107301459 for earlier access versions
|
|
||||||
const formattedVersion = this.stable
|
|
||||||
? item.version_data.semver
|
|
||||||
: item.version_data.semver.replace('-beta+', '+');
|
|
||||||
return {
|
|
||||||
version: formattedVersion,
|
|
||||||
url: item.binaries[0].package.link
|
|
||||||
} as JavaDownloadRelease;
|
|
||||||
});
|
|
||||||
|
|
||||||
const satisfiedVersions = availableVersionsWithBinaries
|
|
||||||
.filter(item => isVersionSatisfies(version, item.version))
|
|
||||||
.sort((a, b) => {
|
|
||||||
return -semver.compareBuild(a.version, b.version);
|
|
||||||
});
|
|
||||||
|
|
||||||
const resolvedFullVersion = satisfiedVersions.length > 0 ? satisfiedVersions[0] : null;
|
|
||||||
if (!resolvedFullVersion) {
|
|
||||||
const availableOptions = availableVersionsWithBinaries.map(item => item.version).join(', ');
|
|
||||||
const availableOptionsMessage = availableOptions
|
|
||||||
? `\nAvailable versions: ${availableOptions}`
|
|
||||||
: '';
|
|
||||||
throw new Error(
|
|
||||||
`Could not find satisfied version for SemVer '${version}'. ${availableOptionsMessage}`
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return resolvedFullVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected async downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults> {
|
|
||||||
let javaPath: string;
|
|
||||||
let extractedJavaPath: string;
|
|
||||||
|
|
||||||
core.info(
|
|
||||||
`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
|
|
||||||
);
|
|
||||||
const javaArchivePath = await tc.downloadTool(javaRelease.url);
|
|
||||||
|
|
||||||
core.info(`Extracting Java archive...`);
|
|
||||||
let extension = getDownloadArchiveExtension();
|
|
||||||
|
|
||||||
extractedJavaPath = await extractJdkFile(javaArchivePath, extension);
|
|
||||||
|
|
||||||
const archiveName = fs.readdirSync(extractedJavaPath)[0];
|
|
||||||
const archivePath = path.join(extractedJavaPath, archiveName);
|
|
||||||
const version = this.getToolcacheVersionName(javaRelease.version);
|
|
||||||
|
|
||||||
javaPath = await tc.cacheDir(archivePath, this.toolcacheFolderName, version, this.architecture);
|
|
||||||
|
|
||||||
return { version: javaRelease.version, path: javaPath };
|
|
||||||
}
|
|
||||||
|
|
||||||
protected get toolcacheFolderName(): string {
|
|
||||||
return super.toolcacheFolderName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private async getAvailableVersions(): Promise<ITemurinAvailableVersions[]> {
|
|
||||||
const platform = this.getPlatformOption();
|
|
||||||
const arch = this.architecture;
|
|
||||||
const imageType = this.packageType;
|
|
||||||
const versionRange = encodeURI('[1.0,100.0]'); // retrieve all available versions
|
|
||||||
const releaseType = this.stable ? 'ga' : 'ea';
|
|
||||||
|
|
||||||
console.time('temurin-retrieve-available-versions');
|
|
||||||
|
|
||||||
const baseRequestArguments = [
|
|
||||||
`project=jdk`,
|
|
||||||
'vendor=adoptium',
|
|
||||||
`heap_size=normal`,
|
|
||||||
'sort_method=DEFAULT',
|
|
||||||
'sort_order=DESC',
|
|
||||||
`os=${platform}`,
|
|
||||||
`architecture=${arch}`,
|
|
||||||
`image_type=${imageType}`,
|
|
||||||
`release_type=${releaseType}`,
|
|
||||||
`jvm_impl=${this.jvmImpl.toLowerCase()}`
|
|
||||||
].join('&');
|
|
||||||
|
|
||||||
// need to iterate through all pages to retrieve the list of all versions
|
|
||||||
// Adoptium API doesn't provide way to retrieve the count of pages to iterate so infinity loop
|
|
||||||
let page_index = 0;
|
|
||||||
const availableVersions: ITemurinAvailableVersions[] = [];
|
|
||||||
while (true) {
|
|
||||||
const requestArguments = `${baseRequestArguments}&page_size=20&page=${page_index}`;
|
|
||||||
const availableVersionsUrl = `https://api.adoptium.net/v3/assets/version/${versionRange}?${requestArguments}`;
|
|
||||||
if (core.isDebug() && page_index === 0) {
|
|
||||||
// url is identical except page_index so print it once for debug
|
|
||||||
core.debug(`Gathering available versions from '${availableVersionsUrl}'`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const paginationPage = (
|
|
||||||
await this.http.getJson<ITemurinAvailableVersions[]>(availableVersionsUrl)
|
|
||||||
).result;
|
|
||||||
if (paginationPage === null || paginationPage.length === 0) {
|
|
||||||
// break infinity loop because we have reached end of pagination
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
availableVersions.push(...paginationPage);
|
|
||||||
page_index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (core.isDebug()) {
|
|
||||||
core.startGroup('Print information about available versions');
|
|
||||||
console.timeEnd('temurin-retrieve-available-versions');
|
|
||||||
console.log(`Available versions: [${availableVersions.length}]`);
|
|
||||||
console.log(availableVersions.map(item => item.version_data.semver).join(', '));
|
|
||||||
core.endGroup();
|
|
||||||
}
|
|
||||||
|
|
||||||
return availableVersions;
|
|
||||||
}
|
|
||||||
|
|
||||||
private getPlatformOption(): string {
|
|
||||||
// Adoptium has own platform names so need to map them
|
|
||||||
switch (process.platform) {
|
|
||||||
case 'darwin':
|
|
||||||
return 'mac';
|
|
||||||
case 'win32':
|
|
||||||
return 'windows';
|
|
||||||
default:
|
|
||||||
return process.platform;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
// Models from https://api.adoptium.net/q/swagger-ui/#/Assets/searchReleasesByVersion
|
|
||||||
|
|
||||||
export interface ITemurinAvailableVersions {
|
|
||||||
binaries: [
|
|
||||||
{
|
|
||||||
architecture: string;
|
|
||||||
heap_size: string;
|
|
||||||
image_type: string;
|
|
||||||
jvm_impl: string;
|
|
||||||
os: string;
|
|
||||||
package: {
|
|
||||||
checksum: string;
|
|
||||||
checksum_link: string;
|
|
||||||
download_count: number;
|
|
||||||
link: string;
|
|
||||||
metadata_link: string;
|
|
||||||
name: string;
|
|
||||||
size: string;
|
|
||||||
};
|
|
||||||
project: string;
|
|
||||||
scm_ref: string;
|
|
||||||
updated_at: string;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
id: string;
|
|
||||||
release_link: string;
|
|
||||||
release_name: string;
|
|
||||||
release_type: string;
|
|
||||||
vendor: string;
|
|
||||||
version_data: {
|
|
||||||
build: number;
|
|
||||||
major: number;
|
|
||||||
minor: number;
|
|
||||||
openjdk_version: string;
|
|
||||||
security: string;
|
|
||||||
semver: string;
|
|
||||||
};
|
|
||||||
}
|
|
Reference in New Issue
Block a user