mirror of
https://gh-proxy.com/github.com/actions/setup-java.git
synced 2026-10-02 18:46:08 +08:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0aa6f2a84f | ||
|
|
dc1a9f2791 | ||
|
|
e886040dc2 | ||
|
|
efbea1411b | ||
|
|
c41070eda4 | ||
|
|
f69f00b5e5 | ||
|
|
2e1dfa1fb4 | ||
|
|
a12e082d83 | ||
|
|
04d53533c2 | ||
|
|
d8da887cad | ||
|
|
f0bb916062 | ||
|
|
d23aed3c80 | ||
|
|
8d22286106 | ||
|
|
db2f350d2b | ||
|
|
5f00602cd1 | ||
|
|
d61af71edf | ||
|
|
ae26cabe43 | ||
|
|
ee43590bc7 | ||
|
|
c187df66d0 | ||
|
|
6df0b04fb5 | ||
|
|
a1ad2000b3 | ||
|
|
faa22ddfbc | ||
|
|
a388b3faf4 |
Executable → Regular
+3
-2
@@ -20,10 +20,11 @@ jobs:
|
|||||||
os: [ubuntu-latest, windows-latest, macos-latest]
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
- name: Setup Node.JS 12
|
- name: Setup Node.JS 16
|
||||||
uses: actions/setup-node@v2
|
uses: actions/setup-node@v2
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 16.x
|
||||||
|
cache: npm
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- run: npm run format-check
|
- run: npm run format-check
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set Node.js 12.x
|
- name: Set Node.js 16.x
|
||||||
uses: actions/setup-node@v1
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 12.x
|
node-version: 16.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
|
|||||||
@@ -20,8 +20,11 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
os: [macos-latest, windows-latest, ubuntu-latest]
|
os: [macos-latest, windows-latest, ubuntu-latest]
|
||||||
distribution: ['temurin', 'adopt', 'adopt-openj9', 'zulu'] # internally 'adopt-hotspot' is the same as 'adopt'
|
distribution: ['temurin', 'adopt', 'adopt-openj9', 'zulu', 'liberica', 'microsoft' ] # internally 'adopt-hotspot' is the same as 'adopt'
|
||||||
version: ['8', '11', '16']
|
version: ['8', '11', '16']
|
||||||
|
exclude:
|
||||||
|
- distribution: microsoft
|
||||||
|
version: 8
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -43,7 +46,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: ['temurin', 'zulu']
|
distribution: ['temurin', 'zulu', 'liberica']
|
||||||
version:
|
version:
|
||||||
- '11.0'
|
- '11.0'
|
||||||
- '8.0.302'
|
- '8.0.302'
|
||||||
@@ -69,7 +72,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: ['temurin', 'zulu']
|
distribution: ['temurin', 'zulu', 'liberica']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v2
|
||||||
@@ -136,7 +139,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: ['temurin', 'zulu']
|
distribution: ['temurin', 'zulu', 'liberica']
|
||||||
java-package: ['jre']
|
java-package: ['jre']
|
||||||
version: ['16.0']
|
version: ['16.0']
|
||||||
include:
|
include:
|
||||||
@@ -148,6 +151,14 @@ jobs:
|
|||||||
java-package: jdk+fx
|
java-package: jdk+fx
|
||||||
version: '8.0.242'
|
version: '8.0.242'
|
||||||
os: ubuntu-latest
|
os: ubuntu-latest
|
||||||
|
- distribution: 'liberica'
|
||||||
|
java-package: jdk+fx
|
||||||
|
version: '8'
|
||||||
|
os: ubuntu-latest
|
||||||
|
- distribution: 'liberica'
|
||||||
|
java-package: jre+fx
|
||||||
|
version: '11'
|
||||||
|
os: ubuntu-latest
|
||||||
exclude:
|
exclude:
|
||||||
# Eclipse Temurin currently doesn't publish JREs, only JDKs
|
# Eclipse Temurin currently doesn't publish JREs, only JDKs
|
||||||
- distribution: 'temurin'
|
- distribution: 'temurin'
|
||||||
@@ -166,16 +177,17 @@ 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-custom-architecture:
|
# Only Liberica and Zulu provide x86
|
||||||
name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-x86) - ${{ matrix.os }}
|
setup-java-x86:
|
||||||
|
name: ${{ matrix.distribution }} ${{ matrix.version }} (jdk-${{ matrix.architecture }}) - ${{ matrix.os }}
|
||||||
needs: setup-java-major-minor-versions
|
needs: setup-java-major-minor-versions
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
# Only Zulu provides x86 arch for now and only for windows / ubuntu
|
# x86 is not supported on macOS
|
||||||
os: [windows-latest, ubuntu-latest]
|
os: [windows-latest, ubuntu-latest]
|
||||||
distribution: ['zulu']
|
distribution: ['liberica', 'zulu']
|
||||||
version: ['11']
|
version: ['11']
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@@ -186,7 +198,9 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
distribution: ${{ matrix.distribution }}
|
distribution: ${{ matrix.distribution }}
|
||||||
java-version: ${{ matrix.version }}
|
java-version: ${{ matrix.version }}
|
||||||
architecture: x86
|
architecture: 'x86'
|
||||||
- name: Verify Java
|
- name: Verify Java
|
||||||
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
|
||||||
|
|
||||||
|
# Only Microsoft provides AArch64. However, GitHub-hosted runners do not support this architecture.
|
||||||
@@ -7,6 +7,7 @@ on:
|
|||||||
pull_request:
|
pull_request:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- main
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
@@ -18,7 +19,7 @@ jobs:
|
|||||||
- name: Install licensed
|
- name: Install licensed
|
||||||
run: |
|
run: |
|
||||||
cd $RUNNER_TEMP
|
cd $RUNNER_TEMP
|
||||||
curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz
|
curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/3.4.4/licensed-3.4.4-linux-x64.tar.gz
|
||||||
sudo tar -xzf licensed.tar.gz
|
sudo tar -xzf licensed.tar.gz
|
||||||
sudo mv licensed /usr/local/bin/licensed
|
sudo mv licensed /usr/local/bin/licensed
|
||||||
- run: licensed status
|
- run: licensed status
|
||||||
|
|||||||
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
Binary file not shown.
Generated
BIN
Binary file not shown.
Generated
BIN
Binary file not shown.
@@ -29,7 +29,7 @@ steps:
|
|||||||
- uses: actions/setup-java@v2
|
- uses: actions/setup-java@v2
|
||||||
with:
|
with:
|
||||||
distribution: 'temurin' # See 'Supported distributions' for available options
|
distribution: 'temurin' # See 'Supported distributions' for available options
|
||||||
java-version: '11'
|
java-version: '17'
|
||||||
- run: java -cp java HelloWorldApp
|
- run: java -cp java HelloWorldApp
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -46,8 +46,8 @@ steps:
|
|||||||
|
|
||||||
#### Supported version syntax
|
#### Supported version syntax
|
||||||
The `java-version` input supports an exact version or a version range using [SemVer](https://semver.org/) notation:
|
The `java-version` input supports an exact version or a version range using [SemVer](https://semver.org/) notation:
|
||||||
- major versions: `8`, `11`, `16`
|
- major versions: `8`, `11`, `16`, `17`
|
||||||
- more specific versions: `11.0`, `11.0.4`, `8.0.232`, `8.0.282+8`
|
- more specific versions: `17.0`, `11.0`, `11.0.4`, `8.0.232`, `8.0.282+8`
|
||||||
- early access (EA) versions: `15-ea`, `15.0.0-ea`, `15.0.0-ea.2`, `15.0.0+2-ea`
|
- early access (EA) versions: `15-ea`, `15.0.0-ea`, `15.0.0-ea.2`, `15.0.0+2-ea`
|
||||||
|
|
||||||
#### Supported distributions
|
#### Supported distributions
|
||||||
@@ -57,14 +57,20 @@ Currently, the following distributions are supported:
|
|||||||
| `temurin` | Eclipse Temurin | [Link](https://adoptium.net/) | [Link](https://adoptium.net/about.html)
|
| `temurin` | Eclipse Temurin | [Link](https://adoptium.net/) | [Link](https://adoptium.net/about.html)
|
||||||
| `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` or `adopt-hotspot` | Adopt OpenJDK Hotspot | [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)
|
| `adopt-openj9` | Adopt OpenJDK OpenJ9 | [Link](https://adoptopenjdk.net/) | [Link](https://adoptopenjdk.net/about.html) |
|
||||||
|
| `liberica` | Liberica JDK | [Link](https://bell-sw.com/) | [Link](https://bell-sw.com/liberica_eula/) |
|
||||||
|
| `microsoft` | Microsoft Build of OpenJDK | [Link](https://www.microsoft.com/openjdk) | [Link](https://docs.microsoft.com/java/openjdk/faq)
|
||||||
|
|
||||||
**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.
|
||||||
|
|
||||||
**NOTE:** Adopt OpenJDK got moved to Eclipse Temurin and won't be updated anymore. It is highly recommended to migrate workflows from `adopt` to `temurin` to keep receiving software and security updates. See more details in the [Good-bye AdoptOpenJDK post](https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/).
|
**NOTE:** Adopt OpenJDK got moved to Eclipse Temurin and won't be updated anymore. It is highly recommended to migrate workflows from `adopt` to `temurin` to keep receiving software and security updates. See more details in the [Good-bye AdoptOpenJDK post](https://blog.adoptopenjdk.net/2021/08/goodbye-adoptopenjdk-hello-adoptium/).
|
||||||
|
|
||||||
### Caching packages dependencies
|
### Caching packages dependencies
|
||||||
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings. Supported package managers are gradle and maven. The cache input is optional, and caching is turned off by default.
|
The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings. Supported package managers are gradle and maven. The format of the used cache key is `setup-java-${{ platform }}-${{ packageManager }}-${{ fileHash }}`, where the hash is based on the following files:
|
||||||
|
- gradle: `**/*.gradle*`, `**/gradle-wrapper.properties`
|
||||||
|
- maven: `**/pom.xml`
|
||||||
|
|
||||||
|
The cache input is optional, and caching is turned off by default.
|
||||||
|
|
||||||
#### Caching gradle dependencies
|
#### Caching gradle dependencies
|
||||||
```yaml
|
```yaml
|
||||||
@@ -134,6 +140,7 @@ jobs:
|
|||||||
- [Eclipse Temurin](docs/advanced-usage.md#Eclipse-Temurin)
|
- [Eclipse Temurin](docs/advanced-usage.md#Eclipse-Temurin)
|
||||||
- [Adopt](docs/advanced-usage.md#Adopt)
|
- [Adopt](docs/advanced-usage.md#Adopt)
|
||||||
- [Zulu](docs/advanced-usage.md#Zulu)
|
- [Zulu](docs/advanced-usage.md#Zulu)
|
||||||
|
- [Liberica](docs/advanced-usage.md#Liberica)
|
||||||
- [Installing custom Java package type](docs/advanced-usage.md#Installing-custom-Java-package-type)
|
- [Installing custom Java package type](docs/advanced-usage.md#Installing-custom-Java-package-type)
|
||||||
- [Installing custom Java architecture](docs/advanced-usage.md#Installing-custom-Java-architecture)
|
- [Installing custom Java architecture](docs/advanced-usage.md#Installing-custom-Java-architecture)
|
||||||
- [Installing custom Java distribution from local file](docs/advanced-usage.md#Installing-Java-from-local-file)
|
- [Installing custom Java distribution from local file](docs/advanced-usage.md#Installing-Java-from-local-file)
|
||||||
|
|||||||
@@ -0,0 +1,434 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"buildVersion": 36,
|
||||||
|
"updateVersion": 0,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/14+36/bellsoft-jdk14+36-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "14+36",
|
||||||
|
"featureVersion": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 11,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.11+9/bellsoft-jdk11.0.11+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.11+9",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 8,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/14.0.1+8/bellsoft-jdk14.0.1+8-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "14.0.1+8",
|
||||||
|
"featureVersion": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 262,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u262+10/bellsoft-jdk8u262+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u262+10",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 1,
|
||||||
|
"updateVersion": 275,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u275+1/bellsoft-jdk8u275+1-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u275+1",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 1,
|
||||||
|
"updateVersion": 9,
|
||||||
|
"patchVersion": 1,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.9.1+1/bellsoft-jdk11.0.9.1+1-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.9.1+1",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 8,
|
||||||
|
"updateVersion": 202,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u202/bellsoft-jdk8u202-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u202+8",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 33,
|
||||||
|
"updateVersion": 0,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/12/bellsoft-jdk12-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "12+33",
|
||||||
|
"featureVersion": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 8,
|
||||||
|
"updateVersion": 282,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u282+8/bellsoft-jdk8u282+8-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u282+8",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 11,
|
||||||
|
"updateVersion": 9,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.9+11/bellsoft-jdk11.0.9+11-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.9+11",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 33,
|
||||||
|
"updateVersion": 0,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/13/bellsoft-jdk13-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "13+33",
|
||||||
|
"featureVersion": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 12,
|
||||||
|
"updateVersion": 9,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.9+12/bellsoft-jdk11.0.9+12-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.9+12",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 7,
|
||||||
|
"updateVersion": 242,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u242+7/bellsoft-jdk8u242+7-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u242+7",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/13.0.2+9/bellsoft-jdk13.0.2+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "13.0.2+9",
|
||||||
|
"featureVersion": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/13.0.1/bellsoft-jdk13.0.1-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "13.0.1+9",
|
||||||
|
"featureVersion": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 1,
|
||||||
|
"updateVersion": 265,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u265+1/bellsoft-jdk8u265+1-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u265+1",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/15.0.1+9/bellsoft-jdk15.0.1+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "15.0.1+9",
|
||||||
|
"featureVersion": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 272,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u272+10/bellsoft-jdk8u272+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u272+10",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 7,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/16.0.2+7/bellsoft-jdk16.0.2+7-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "16.0.2+7",
|
||||||
|
"featureVersion": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 6,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.6+10/bellsoft-jdk11.0.6+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.6+10",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 252,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u252+9/bellsoft-jdk8u252+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u252+9",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 12,
|
||||||
|
"updateVersion": 212,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u212/bellsoft-jdk8u212-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u212+12",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/15.0.2+10/bellsoft-jdk15.0.2+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "15.0.2+10",
|
||||||
|
"featureVersion": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 10,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.10+9/bellsoft-jdk11.0.10+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.10+9",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 0,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.1/bellsoft-jdk11.0.1-macos-amd64.tar.gz",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.1+0",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 7,
|
||||||
|
"updateVersion": 12,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.12+7/bellsoft-jdk11.0.12+7-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.12+7",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 36,
|
||||||
|
"updateVersion": 0,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/16+36/bellsoft-jdk16+36-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "16+36",
|
||||||
|
"featureVersion": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 12,
|
||||||
|
"updateVersion": 3,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.3/bellsoft-jdk11.0.3-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.3+12",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 8,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.8+10/bellsoft-jdk11.0.8+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.8+10",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 7,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.2/bellsoft-jdk11.0.2-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.2+7",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 5,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.5/bellsoft-jdk11.0.5-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.5+10",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 4,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.4/bellsoft-jdk11.0.4-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.4+10",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/12.0.2/bellsoft-jdk12.0.2-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "12.0.2+10",
|
||||||
|
"featureVersion": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 12,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/12.0.1/bellsoft-jdk12.0.1-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "12.0.1+12",
|
||||||
|
"featureVersion": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/13.0.1+10/bellsoft-jdk13.0.1+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "13.0.1+10",
|
||||||
|
"featureVersion": 13
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 11,
|
||||||
|
"updateVersion": 5,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.5+11/bellsoft-jdk11.0.5+11-macos-amd64.tar.gz",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.5+11",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 11,
|
||||||
|
"updateVersion": 5,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.5+11/bellsoft-jdk11.0.5+11-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.5+11",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 292,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u292+10/bellsoft-jdk8u292+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u292+10",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 11,
|
||||||
|
"updateVersion": 222,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u222/bellsoft-jdk8u222-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u222+11",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 36,
|
||||||
|
"updateVersion": 0,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/15+36/bellsoft-jdk15+36-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "15+36",
|
||||||
|
"featureVersion": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 7,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/11.0.7+10/bellsoft-jdk11.0.7+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "11.0.7+10",
|
||||||
|
"featureVersion": 11
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 10,
|
||||||
|
"updateVersion": 232,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u232+10/bellsoft-jdk8u232+10-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u232+10",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 8,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/15.0.2+8/bellsoft-jdk15.0.2+8-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "15.0.2+8",
|
||||||
|
"featureVersion": 15
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 8,
|
||||||
|
"updateVersion": 302,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u302+8/bellsoft-jdk8u302+8-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u302+8",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 12,
|
||||||
|
"updateVersion": 192,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u192.all/bellsoft-jdk1.8.0-macos-amd64.tar.gz",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u192+12",
|
||||||
|
"featureVersion": 8
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 13,
|
||||||
|
"updateVersion": 2,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/14.0.2+13/bellsoft-jdk14.0.2+13-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "14.0.2+13",
|
||||||
|
"featureVersion": 14
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 1,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/16.0.1+9/bellsoft-jdk16.0.1+9-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "16.0.1+9",
|
||||||
|
"featureVersion": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"buildVersion": 9,
|
||||||
|
"updateVersion": 232,
|
||||||
|
"patchVersion": 0,
|
||||||
|
"downloadUrl": "https://github.com/bell-sw/Liberica/releases/download/8u232/bellsoft-jdk8u232-macos-amd64.zip",
|
||||||
|
"interimVersion": 0,
|
||||||
|
"version": "8u232+9",
|
||||||
|
"featureVersion": 8
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -0,0 +1,196 @@
|
|||||||
|
import { LibericaDistributions } from '../../src/distributions/liberica/installer';
|
||||||
|
import { ArchitectureOptions, LibericaVersion } from '../../src/distributions/liberica/models';
|
||||||
|
import { HttpClient } from '@actions/http-client';
|
||||||
|
|
||||||
|
const manifestData = require('../data/liberica.json') as LibericaVersion[];
|
||||||
|
|
||||||
|
describe('getAvailableVersions', () => {
|
||||||
|
let spyHttpClient: jest.SpyInstance;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
spyHttpClient = jest.spyOn(HttpClient.prototype, 'getJson');
|
||||||
|
spyHttpClient.mockReturnValue({
|
||||||
|
statusCode: 200,
|
||||||
|
headers: {},
|
||||||
|
result: manifestData
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
jest.resetAllMocks();
|
||||||
|
jest.clearAllMocks();
|
||||||
|
jest.restoreAllMocks();
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
{ version: '11.x', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
||||||
|
'bundle-type=jdk&bitness=32&arch=x86&build-type=all'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ version: '11-ea', architecture: 'x86', packageType: 'jdk', checkLatest: false },
|
||||||
|
'bundle-type=jdk&bitness=32&arch=x86&build-type=ea'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ version: '16.0.2', architecture: 'x64', packageType: 'jdk', checkLatest: false },
|
||||||
|
'bundle-type=jdk&bitness=64&arch=x86&build-type=all'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ version: '16.0.2', architecture: 'x64', packageType: 'jre', checkLatest: false },
|
||||||
|
'bundle-type=jre&bitness=64&arch=x86&build-type=all'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ version: '8', architecture: 'armv7', packageType: 'jdk+fx', checkLatest: false },
|
||||||
|
'bundle-type=jdk-full&bitness=32&arch=arm&build-type=all'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
{ version: '8', architecture: 'aarch64', packageType: 'jre+fx', checkLatest: false },
|
||||||
|
'bundle-type=jre-full&bitness=64&arch=arm&build-type=all'
|
||||||
|
]
|
||||||
|
])('build correct url for %s -> %s', async (input, urlParams) => {
|
||||||
|
const additionalParams =
|
||||||
|
'&installation-type=archive&fields=downloadUrl%2Cversion%2CfeatureVersion%2CinterimVersion%2C' +
|
||||||
|
'updateVersion%2CbuildVersion';
|
||||||
|
const distribution = new LibericaDistributions(input);
|
||||||
|
distribution['getPlatformOption'] = () => 'macos';
|
||||||
|
const buildUrl = `https://api.bell-sw.com/v1/liberica/releases?os=macos&${urlParams}${additionalParams}`;
|
||||||
|
|
||||||
|
await distribution['getAvailableVersions']();
|
||||||
|
|
||||||
|
expect(spyHttpClient.mock.calls).toHaveLength(1);
|
||||||
|
expect(spyHttpClient.mock.calls[0][0]).toBe(buildUrl);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('load available versions', async () => {
|
||||||
|
const distribution = new LibericaDistributions({
|
||||||
|
version: '11',
|
||||||
|
architecture: 'x64',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
const availableVersions = await distribution['getAvailableVersions']();
|
||||||
|
expect(availableVersions).toEqual(manifestData);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getArchitectureOptions', () => {
|
||||||
|
it.each([
|
||||||
|
['x86', { bitness: '32', arch: 'x86' }],
|
||||||
|
['x64', { bitness: '64', arch: 'x86' }],
|
||||||
|
['armv7', { bitness: '32', arch: 'arm' }],
|
||||||
|
['aarch64', { bitness: '64', arch: 'arm' }],
|
||||||
|
['ppc64le', { bitness: '64', arch: 'ppc' }]
|
||||||
|
] as [string, ArchitectureOptions][])('parse architecture %s -> %s', (input, expected) => {
|
||||||
|
const distributions = new LibericaDistributions({
|
||||||
|
architecture: input,
|
||||||
|
checkLatest: false,
|
||||||
|
packageType: '',
|
||||||
|
version: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(distributions['getArchitectureOptions']()).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each(['armv6', 's390x'])('not support architecture %s', input => {
|
||||||
|
const distributions = new LibericaDistributions({
|
||||||
|
architecture: input,
|
||||||
|
checkLatest: false,
|
||||||
|
packageType: '',
|
||||||
|
version: ''
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(() => distributions['getArchitectureOptions']()).toThrow(
|
||||||
|
/Architecture '\w+' is not supported\. Supported architectures: .*/
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('findPackageForDownload', () => {
|
||||||
|
let distribution: LibericaDistributions;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
distribution = new LibericaDistributions({
|
||||||
|
version: '',
|
||||||
|
architecture: 'x64',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
distribution['getAvailableVersions'] = async () => manifestData;
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
['8', '8.0.302+8'],
|
||||||
|
['11.x', '11.0.12+7'],
|
||||||
|
['8.0', '8.0.302+8'],
|
||||||
|
['11.0.x', '11.0.12+7'],
|
||||||
|
['15', '15.0.2+10'],
|
||||||
|
['15.0', '15.0.2+10'],
|
||||||
|
['15.0.0', '15.0.0+36'],
|
||||||
|
['8.0.232', '8.0.232+10'],
|
||||||
|
['8.0.232+9', '8.0.232+9'],
|
||||||
|
['15.0.2+8', '15.0.2+8'],
|
||||||
|
['15.0.2+10', '15.0.2+10']
|
||||||
|
])('version is %s -> %s', async (input, expected) => {
|
||||||
|
const result = await distribution['findPackageForDownload'](input);
|
||||||
|
expect(result.version).toBe(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error', async () => {
|
||||||
|
await expect(distribution['findPackageForDownload']('17')).rejects.toThrow(
|
||||||
|
/Could not find satisfied version for semver */
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getPlatformOption', () => {
|
||||||
|
const distributions = new LibericaDistributions({
|
||||||
|
architecture: 'x64',
|
||||||
|
version: '11',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
['linux', 'linux'],
|
||||||
|
['darwin', 'macos'],
|
||||||
|
['win32', 'windows'],
|
||||||
|
['cygwin', 'windows'],
|
||||||
|
['sunos', 'solaris']
|
||||||
|
])('os version %s -> %s', (input, expected) => {
|
||||||
|
const actual = distributions['getPlatformOption'](input as NodeJS.Platform);
|
||||||
|
|
||||||
|
expect(actual).toEqual(expected);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each(['aix', 'android', 'freebsd', 'openbsd', 'netbsd'])(
|
||||||
|
'not support os version %s',
|
||||||
|
input => {
|
||||||
|
expect(() => distributions['getPlatformOption'](input as NodeJS.Platform)).toThrow(
|
||||||
|
/Platform '\w+' is not supported\. Supported platforms: .+/
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('convertVersionToSemver', () => {
|
||||||
|
const distributions = new LibericaDistributions({
|
||||||
|
architecture: 'x64',
|
||||||
|
version: '11',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[{ featureVersion: 11, interimVersion: 0, updateVersion: 12, buildVersion: 7 }, '11.0.12+7'],
|
||||||
|
[{ featureVersion: 11, interimVersion: 0, updateVersion: 12, buildVersion: 0 }, '11.0.12'],
|
||||||
|
[{ featureVersion: 11, interimVersion: 0, updateVersion: 0, buildVersion: 13 }, '11.0.0+13']
|
||||||
|
])('%s -> %s', (input, expected) => {
|
||||||
|
const actual = distributions['convertVersionToSemver']({
|
||||||
|
downloadUrl: '',
|
||||||
|
version: '',
|
||||||
|
...input
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(actual).toEqual(expected);
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
import { MicrosoftDistributions } from '../../src/distributions/microsoft/installer';
|
||||||
|
|
||||||
|
describe('findPackageForDownload', () => {
|
||||||
|
let distribution: MicrosoftDistributions;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
distribution = new MicrosoftDistributions({
|
||||||
|
version: '',
|
||||||
|
architecture: 'x64',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[
|
||||||
|
'17.x',
|
||||||
|
'17.0.1',
|
||||||
|
'https://aka.ms/download-jdk/microsoft-jdk-17.0.1.12.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'16.0.x',
|
||||||
|
'16.0.2',
|
||||||
|
'https://aka.ms/download-jdk/microsoft-jdk-16.0.2.7.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'11.0.13',
|
||||||
|
'11.0.13',
|
||||||
|
'https://aka.ms/download-jdk/microsoft-jdk-11.0.13.8.1-{{OS_TYPE}}-x64.{{ARCHIVE_TYPE}}'
|
||||||
|
]
|
||||||
|
])('version is %s -> %s', async (input, expectedVersion, expectedUrl) => {
|
||||||
|
const result = await distribution['findPackageForDownload'](input);
|
||||||
|
expect(result.version).toBe(expectedVersion);
|
||||||
|
let os: string;
|
||||||
|
let archive: string;
|
||||||
|
switch (process.platform) {
|
||||||
|
case 'darwin':
|
||||||
|
os = 'macos';
|
||||||
|
archive = 'tar.gz';
|
||||||
|
break;
|
||||||
|
case 'win32':
|
||||||
|
os = 'windows';
|
||||||
|
archive = 'zip';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
os = process.platform.toString();
|
||||||
|
archive = 'tar.gz';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const url = expectedUrl.replace('{{OS_TYPE}}', os).replace('{{ARCHIVE_TYPE}}', archive);
|
||||||
|
expect(result.url).toBe(url);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should throw an error', async () => {
|
||||||
|
await expect(distribution['findPackageForDownload']('8')).rejects.toThrow(
|
||||||
|
/Could not find satisfied version for SemVer */
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('getPlatformOption', () => {
|
||||||
|
const distributions = new MicrosoftDistributions({
|
||||||
|
architecture: 'x64',
|
||||||
|
version: '11',
|
||||||
|
packageType: 'jdk',
|
||||||
|
checkLatest: false
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
['linux', 'tar.gz', 'linux'],
|
||||||
|
['darwin', 'tar.gz', 'macos'],
|
||||||
|
['win32', 'zip', 'windows']
|
||||||
|
])('os version %s -> %s', (input, expectedArchive, expectedOs) => {
|
||||||
|
const actual = distributions['getPlatformOption'](input as NodeJS.Platform);
|
||||||
|
|
||||||
|
expect(actual.archive).toEqual(expectedArchive);
|
||||||
|
expect(actual.os).toEqual(expectedOs);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each(['aix', 'android', 'freebsd', 'openbsd', 'netbsd', 'solaris', 'cygwin'])(
|
||||||
|
'not support os version %s',
|
||||||
|
input => {
|
||||||
|
expect(() => distributions['getPlatformOption'](input as NodeJS.Platform)).toThrow(
|
||||||
|
/Platform '\w+' is not supported\. Supported platforms: .+/
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
});
|
||||||
@@ -139,6 +139,7 @@ describe('findPackageForDownload', () => {
|
|||||||
packageType: 'jdk',
|
packageType: 'jdk',
|
||||||
checkLatest: false
|
checkLatest: false
|
||||||
});
|
});
|
||||||
|
distribution['getAvailableVersions'] = async () => manifestData;
|
||||||
await expect(
|
await expect(
|
||||||
distribution['findPackageForDownload'](distribution['version'])
|
distribution['findPackageForDownload'](distribution['version'])
|
||||||
).rejects.toThrowError(/Could not find satisfied version for semver */);
|
).rejects.toThrowError(/Could not find satisfied version for semver */);
|
||||||
|
|||||||
+41
-1
@@ -1,4 +1,9 @@
|
|||||||
import { isVersionSatisfies } from '../src/util';
|
import * as cache from '@actions/cache';
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import { isVersionSatisfies, isCacheFeatureAvailable } from '../src/util';
|
||||||
|
|
||||||
|
jest.mock('@actions/cache');
|
||||||
|
jest.mock('@actions/core');
|
||||||
|
|
||||||
describe('isVersionSatisfies', () => {
|
describe('isVersionSatisfies', () => {
|
||||||
it.each([
|
it.each([
|
||||||
@@ -20,3 +25,38 @@ describe('isVersionSatisfies', () => {
|
|||||||
expect(actual).toBe(expected);
|
expect(actual).toBe(expected);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('isCacheFeatureAvailable', () => {
|
||||||
|
it('isCacheFeatureAvailable disabled on GHES', () => {
|
||||||
|
jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false);
|
||||||
|
try {
|
||||||
|
process.env['GITHUB_SERVER_URL'] = 'http://example.com';
|
||||||
|
isCacheFeatureAvailable();
|
||||||
|
} catch (error) {
|
||||||
|
expect(error).toHaveProperty(
|
||||||
|
'message',
|
||||||
|
'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.'
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
delete process.env['GITHUB_SERVER_URL'];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('isCacheFeatureAvailable disabled on dotcom', () => {
|
||||||
|
jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => false);
|
||||||
|
const infoMock = jest.spyOn(core, 'warning');
|
||||||
|
const message = 'The runner was not able to contact the cache service. Caching will be skipped';
|
||||||
|
try {
|
||||||
|
process.env['GITHUB_SERVER_URL'] = 'http://github.com';
|
||||||
|
expect(isCacheFeatureAvailable()).toBe(false);
|
||||||
|
expect(infoMock).toHaveBeenCalledWith(message);
|
||||||
|
} finally {
|
||||||
|
delete process.env['GITHUB_SERVER_URL'];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
it('isCacheFeatureAvailable is enabled', () => {
|
||||||
|
jest.spyOn(cache, 'isFeatureAvailable').mockImplementation(() => true);
|
||||||
|
expect(isCacheFeatureAvailable()).toBe(true);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
+1
-1
@@ -67,6 +67,6 @@ outputs:
|
|||||||
path:
|
path:
|
||||||
description: 'Path to where the java environment has been installed (same as $JAVA_HOME)'
|
description: 'Path to where the java environment has been installed (same as $JAVA_HOME)'
|
||||||
runs:
|
runs:
|
||||||
using: 'node12'
|
using: 'node16'
|
||||||
main: 'dist/setup/index.js'
|
main: 'dist/setup/index.js'
|
||||||
post: 'dist/cleanup/index.js'
|
post: 'dist/cleanup/index.js'
|
||||||
|
|||||||
Vendored
+9510
-10891
File diff suppressed because one or more lines are too long
Vendored
+10545
-11625
File diff suppressed because one or more lines are too long
@@ -53,6 +53,29 @@ steps:
|
|||||||
- run: java -cp java HelloWorldApp
|
- run: java -cp java HelloWorldApp
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Liberica
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: 'liberica'
|
||||||
|
java-version: '11'
|
||||||
|
java-package: jdk # optional (jdk, jre, jdk+fx or jre+fx) - defaults to jdk
|
||||||
|
- run: java -cp java HelloWorldApp
|
||||||
|
```
|
||||||
|
|
||||||
|
### Microsoft
|
||||||
|
```yaml
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-java@v2
|
||||||
|
with:
|
||||||
|
distribution: 'microsoft'
|
||||||
|
java-version: '11'
|
||||||
|
- run: java -cp java HelloWorldApp
|
||||||
|
```
|
||||||
|
|
||||||
## Installing custom Java package type
|
## Installing custom Java package type
|
||||||
```yaml
|
```yaml
|
||||||
steps:
|
steps:
|
||||||
|
|||||||
Generated
+9283
-2743
File diff suppressed because it is too large
Load Diff
+7
-13
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "setup-java",
|
"name": "setup-java",
|
||||||
"version": "2.0.0",
|
"version": "3.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "setup java action",
|
"description": "setup java action",
|
||||||
"main": "dist/setup/index.js",
|
"main": "dist/setup/index.js",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"author": "GitHub",
|
"author": "GitHub",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/cache": "^1.0.7",
|
"@actions/cache": "^2.0.0",
|
||||||
"@actions/core": "^1.2.6",
|
"@actions/core": "^1.2.6",
|
||||||
"@actions/exec": "^1.0.4",
|
"@actions/exec": "^1.0.4",
|
||||||
"@actions/glob": "^0.2.0",
|
"@actions/glob": "^0.2.0",
|
||||||
@@ -35,20 +35,14 @@
|
|||||||
"xmlbuilder2": "^2.4.0"
|
"xmlbuilder2": "^2.4.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^26.0.20",
|
"@types/jest": "^27.0.2",
|
||||||
"@types/node": "^12.19.13",
|
"@types/node": "^16.11.25",
|
||||||
"@types/semver": "^7.3.4",
|
"@types/semver": "^7.3.4",
|
||||||
"@zeit/ncc": "^0.20.5",
|
"@zeit/ncc": "^0.20.5",
|
||||||
"jest": "^26.6.3",
|
"jest": "^27.2.5",
|
||||||
"jest-circus": "^26.6.3",
|
"jest-circus": "^27.2.5",
|
||||||
"prettier": "^1.19.1",
|
"prettier": "^1.19.1",
|
||||||
"ts-jest": "^26.5.3",
|
"ts-jest": "^27.0.5",
|
||||||
"typescript": "^4.2.3"
|
"typescript": "^4.2.3"
|
||||||
},
|
|
||||||
"husky": {
|
|
||||||
"skipCI": true,
|
|
||||||
"hooks": {
|
|
||||||
"pre-commit": "npm run build && npm run format"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import { LocalDistribution } from './local/installer';
|
|||||||
import { ZuluDistribution } from './zulu/installer';
|
import { ZuluDistribution } from './zulu/installer';
|
||||||
import { AdoptDistribution, AdoptImplementation } from './adopt/installer';
|
import { AdoptDistribution, AdoptImplementation } from './adopt/installer';
|
||||||
import { TemurinDistribution, TemurinImplementation } from './temurin/installer';
|
import { TemurinDistribution, TemurinImplementation } from './temurin/installer';
|
||||||
|
import { LibericaDistributions } from './liberica/installer';
|
||||||
|
import { MicrosoftDistributions } from './microsoft/installer';
|
||||||
|
|
||||||
enum JavaDistribution {
|
enum JavaDistribution {
|
||||||
Adopt = 'adopt',
|
Adopt = 'adopt',
|
||||||
@@ -11,7 +13,9 @@ enum JavaDistribution {
|
|||||||
AdoptOpenJ9 = 'adopt-openj9',
|
AdoptOpenJ9 = 'adopt-openj9',
|
||||||
Temurin = 'temurin',
|
Temurin = 'temurin',
|
||||||
Zulu = 'zulu',
|
Zulu = 'zulu',
|
||||||
JdkFile = 'jdkfile'
|
Liberica = 'liberica',
|
||||||
|
JdkFile = 'jdkfile',
|
||||||
|
Microsoft = 'microsoft'
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getJavaDistribution(
|
export function getJavaDistribution(
|
||||||
@@ -31,6 +35,10 @@ export function getJavaDistribution(
|
|||||||
return new TemurinDistribution(installerOptions, TemurinImplementation.Hotspot);
|
return new TemurinDistribution(installerOptions, TemurinImplementation.Hotspot);
|
||||||
case JavaDistribution.Zulu:
|
case JavaDistribution.Zulu:
|
||||||
return new ZuluDistribution(installerOptions);
|
return new ZuluDistribution(installerOptions);
|
||||||
|
case JavaDistribution.Liberica:
|
||||||
|
return new LibericaDistributions(installerOptions);
|
||||||
|
case JavaDistribution.Microsoft:
|
||||||
|
return new MicrosoftDistributions(installerOptions);
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,157 @@
|
|||||||
|
import { JavaBase } from '../base-installer';
|
||||||
|
import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from '../base-models';
|
||||||
|
import semver from 'semver';
|
||||||
|
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import { ArchitectureOptions, LibericaVersion, OsVersions } from './models';
|
||||||
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
const supportedPlatform = `'linux', 'linux-musl', 'macos', 'solaris', 'windows'`;
|
||||||
|
|
||||||
|
const supportedArchitecture = `'x86', 'x64', 'armv7', 'aarch64', 'ppc64le'`;
|
||||||
|
|
||||||
|
export class LibericaDistributions extends JavaBase {
|
||||||
|
constructor(installerOptions: JavaInstallerOptions) {
|
||||||
|
super('Liberica', installerOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults> {
|
||||||
|
core.info(
|
||||||
|
`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
|
||||||
|
);
|
||||||
|
const javaArchivePath = await tc.downloadTool(javaRelease.url);
|
||||||
|
|
||||||
|
core.info(`Extracting Java archive...`);
|
||||||
|
const extension = getDownloadArchiveExtension();
|
||||||
|
const extractedJavaPath = await extractJdkFile(javaArchivePath, extension);
|
||||||
|
|
||||||
|
const archiveName = fs.readdirSync(extractedJavaPath)[0];
|
||||||
|
const archivePath = path.join(extractedJavaPath, archiveName);
|
||||||
|
|
||||||
|
const javaPath = await tc.cacheDir(
|
||||||
|
archivePath,
|
||||||
|
this.toolcacheFolderName,
|
||||||
|
this.getToolcacheVersionName(javaRelease.version),
|
||||||
|
this.architecture
|
||||||
|
);
|
||||||
|
|
||||||
|
return { version: javaRelease.version, path: javaPath };
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> {
|
||||||
|
const availableVersionsRaw = await this.getAvailableVersions();
|
||||||
|
|
||||||
|
const availableVersions = availableVersionsRaw.map(item => ({
|
||||||
|
url: item.downloadUrl,
|
||||||
|
version: this.convertVersionToSemver(item)
|
||||||
|
}));
|
||||||
|
|
||||||
|
const satisfiedVersion = availableVersions
|
||||||
|
.filter(item => isVersionSatisfies(range, item.version))
|
||||||
|
.sort((a, b) => -semver.compareBuild(a.version, b.version))[0];
|
||||||
|
|
||||||
|
if (!satisfiedVersion) {
|
||||||
|
const availableOptions = availableVersions.map(item => item.version).join(', ');
|
||||||
|
const availableOptionsMessage = availableOptions
|
||||||
|
? `\nAvailable versions: ${availableOptions}`
|
||||||
|
: '';
|
||||||
|
throw new Error(
|
||||||
|
`Could not find satisfied version for semver ${range}. ${availableOptionsMessage}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return satisfiedVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getAvailableVersions(): Promise<LibericaVersion[]> {
|
||||||
|
console.time('liberica-retrieve-available-versions');
|
||||||
|
const url = this.prepareAvailableVersionsUrl();
|
||||||
|
|
||||||
|
if (core.isDebug()) {
|
||||||
|
core.debug(`Gathering available versions from '${url}'`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const availableVersions = (await this.http.getJson<LibericaVersion[]>(url)).result ?? [];
|
||||||
|
|
||||||
|
if (core.isDebug()) {
|
||||||
|
core.startGroup('Print information about available versions');
|
||||||
|
console.timeEnd('liberica-retrieve-available-versions');
|
||||||
|
console.log(`Available versions: [${availableVersions.length}]`);
|
||||||
|
console.log(availableVersions.map(item => item.version));
|
||||||
|
core.endGroup();
|
||||||
|
}
|
||||||
|
|
||||||
|
return availableVersions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private prepareAvailableVersionsUrl() {
|
||||||
|
const urlOptions = {
|
||||||
|
os: this.getPlatformOption(),
|
||||||
|
'bundle-type': this.getBundleType(),
|
||||||
|
...this.getArchitectureOptions(),
|
||||||
|
'build-type': this.stable ? 'all' : 'ea',
|
||||||
|
'installation-type': 'archive',
|
||||||
|
fields: 'downloadUrl,version,featureVersion,interimVersion,updateVersion,buildVersion'
|
||||||
|
};
|
||||||
|
|
||||||
|
const searchParams = new URLSearchParams(urlOptions).toString();
|
||||||
|
|
||||||
|
return `https://api.bell-sw.com/v1/liberica/releases?${searchParams}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getBundleType(): string {
|
||||||
|
const [bundleType, feature] = this.packageType.split('+');
|
||||||
|
if (feature?.includes('fx')) {
|
||||||
|
return bundleType + '-full';
|
||||||
|
}
|
||||||
|
return bundleType;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getArchitectureOptions(): ArchitectureOptions {
|
||||||
|
switch (this.architecture) {
|
||||||
|
case 'x86':
|
||||||
|
return { bitness: '32', arch: 'x86' };
|
||||||
|
case 'x64':
|
||||||
|
return { bitness: '64', arch: 'x86' };
|
||||||
|
case 'armv7':
|
||||||
|
return { bitness: '32', arch: 'arm' };
|
||||||
|
case 'aarch64':
|
||||||
|
return { bitness: '64', arch: 'arm' };
|
||||||
|
case 'ppc64le':
|
||||||
|
return { bitness: '64', arch: 'ppc' };
|
||||||
|
default:
|
||||||
|
throw new Error(
|
||||||
|
`Architecture '${this.architecture}' is not supported. Supported architectures: ${supportedArchitecture}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private getPlatformOption(platform: NodeJS.Platform = process.platform): OsVersions {
|
||||||
|
switch (platform) {
|
||||||
|
case 'darwin':
|
||||||
|
return 'macos';
|
||||||
|
case 'win32':
|
||||||
|
case 'cygwin':
|
||||||
|
return 'windows';
|
||||||
|
case 'linux':
|
||||||
|
return 'linux';
|
||||||
|
case 'sunos':
|
||||||
|
return 'solaris';
|
||||||
|
default:
|
||||||
|
throw new Error(
|
||||||
|
`Platform '${platform}' is not supported. Supported platforms: ${supportedPlatform}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private convertVersionToSemver(version: LibericaVersion): string {
|
||||||
|
let { buildVersion, featureVersion, interimVersion, updateVersion } = version;
|
||||||
|
const mainVersion = [featureVersion, interimVersion, updateVersion].join('.');
|
||||||
|
if (buildVersion != 0) {
|
||||||
|
return `${mainVersion}+${buildVersion}`;
|
||||||
|
}
|
||||||
|
return mainVersion;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
// Models from https://api.bell-sw.com/api.html
|
||||||
|
|
||||||
|
export type Bitness = '32' | '64';
|
||||||
|
export type ArchType = 'arm' | 'ppc' | 'sparc' | 'x86';
|
||||||
|
|
||||||
|
export type OsVersions = 'linux' | 'linux-musl' | 'macos' | 'solaris' | 'windows';
|
||||||
|
|
||||||
|
export interface ArchitectureOptions {
|
||||||
|
bitness: Bitness;
|
||||||
|
arch: ArchType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface LibericaVersion {
|
||||||
|
downloadUrl: string;
|
||||||
|
version: string;
|
||||||
|
featureVersion: number;
|
||||||
|
interimVersion: number;
|
||||||
|
updateVersion: number;
|
||||||
|
buildVersion: number;
|
||||||
|
}
|
||||||
@@ -0,0 +1,124 @@
|
|||||||
|
import { JavaBase } from '../base-installer';
|
||||||
|
import { JavaDownloadRelease, JavaInstallerOptions, JavaInstallerResults } from '../base-models';
|
||||||
|
import semver from 'semver';
|
||||||
|
import { extractJdkFile, getDownloadArchiveExtension, isVersionSatisfies } from '../../util';
|
||||||
|
import * as core from '@actions/core';
|
||||||
|
import { MicrosoftVersion, PlatformOptions } from './models';
|
||||||
|
import * as tc from '@actions/tool-cache';
|
||||||
|
import fs from 'fs';
|
||||||
|
import path from 'path';
|
||||||
|
|
||||||
|
export class MicrosoftDistributions extends JavaBase {
|
||||||
|
constructor(installerOptions: JavaInstallerOptions) {
|
||||||
|
super('Microsoft', installerOptions);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async downloadTool(javaRelease: JavaDownloadRelease): Promise<JavaInstallerResults> {
|
||||||
|
core.info(
|
||||||
|
`Downloading Java ${javaRelease.version} (${this.distribution}) from ${javaRelease.url} ...`
|
||||||
|
);
|
||||||
|
const javaArchivePath = await tc.downloadTool(javaRelease.url);
|
||||||
|
|
||||||
|
core.info(`Extracting Java archive...`);
|
||||||
|
const extension = getDownloadArchiveExtension();
|
||||||
|
const extractedJavaPath = await extractJdkFile(javaArchivePath, extension);
|
||||||
|
|
||||||
|
const archiveName = fs.readdirSync(extractedJavaPath)[0];
|
||||||
|
const archivePath = path.join(extractedJavaPath, archiveName);
|
||||||
|
|
||||||
|
const javaPath = await tc.cacheDir(
|
||||||
|
archivePath,
|
||||||
|
this.toolcacheFolderName,
|
||||||
|
this.getToolcacheVersionName(javaRelease.version),
|
||||||
|
this.architecture
|
||||||
|
);
|
||||||
|
|
||||||
|
return { version: javaRelease.version, path: javaPath };
|
||||||
|
}
|
||||||
|
|
||||||
|
protected async findPackageForDownload(range: string): Promise<JavaDownloadRelease> {
|
||||||
|
if (this.architecture !== 'x64' && this.architecture !== 'aarch64') {
|
||||||
|
throw new Error(`Unsupported architecture: ${this.architecture}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.stable) {
|
||||||
|
throw new Error('Early access versions are not supported');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.packageType !== 'jdk') {
|
||||||
|
throw new Error('Microsoft Build of OpenJDK provides only the `jdk` package type');
|
||||||
|
}
|
||||||
|
|
||||||
|
const availableVersionsRaw = await this.getAvailableVersions();
|
||||||
|
|
||||||
|
const opts = this.getPlatformOption();
|
||||||
|
const availableVersions = availableVersionsRaw.map(item => ({
|
||||||
|
url: `https://aka.ms/download-jdk/microsoft-jdk-${item.version.join('.')}-${opts.os}-${
|
||||||
|
this.architecture
|
||||||
|
}.${opts.archive}`,
|
||||||
|
version: this.convertVersionToSemver(item)
|
||||||
|
}));
|
||||||
|
|
||||||
|
const satisfiedVersion = availableVersions
|
||||||
|
.filter(item => isVersionSatisfies(range, item.version))
|
||||||
|
.sort((a, b) => -semver.compareBuild(a.version, b.version))[0];
|
||||||
|
|
||||||
|
if (!satisfiedVersion) {
|
||||||
|
const availableOptions = availableVersions.map(item => item.version).join(', ');
|
||||||
|
const availableOptionsMessage = availableOptions
|
||||||
|
? `\nAvailable versions: ${availableOptions}`
|
||||||
|
: '';
|
||||||
|
throw new Error(
|
||||||
|
`Could not find satisfied version for SemVer ${range}. ${availableOptionsMessage}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return satisfiedVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getAvailableVersions(): Promise<MicrosoftVersion[]> {
|
||||||
|
// TODO get these dynamically!
|
||||||
|
// We will need Microsoft to add an endpoint where we can query for versions.
|
||||||
|
const jdkVersions = [
|
||||||
|
{
|
||||||
|
version: [17, 0, 1, 12, 1]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
version: [16, 0, 2, 7, 1]
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
// M1 is only supported for Java 16 & 17
|
||||||
|
if (process.platform !== 'darwin' || this.architecture !== 'aarch64') {
|
||||||
|
jdkVersions.push({
|
||||||
|
version: [11, 0, 13, 8, 1]
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return jdkVersions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private getPlatformOption(
|
||||||
|
platform: NodeJS.Platform = process.platform /* for testing */
|
||||||
|
): PlatformOptions {
|
||||||
|
switch (platform) {
|
||||||
|
case 'darwin':
|
||||||
|
return { archive: 'tar.gz', os: 'macos' };
|
||||||
|
case 'win32':
|
||||||
|
return { archive: 'zip', os: 'windows' };
|
||||||
|
case 'linux':
|
||||||
|
return { archive: 'tar.gz', os: 'linux' };
|
||||||
|
default:
|
||||||
|
throw new Error(
|
||||||
|
`Platform '${platform}' is not supported. Supported platforms: 'darwin', 'linux', 'win32'`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private convertVersionToSemver(version: MicrosoftVersion): string {
|
||||||
|
const major = version.version[0];
|
||||||
|
const minor = version.version[1];
|
||||||
|
const patch = version.version[2];
|
||||||
|
return `${major}.${minor}.${patch}`;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
type OsVersions = 'linux' | 'macos' | 'windows';
|
||||||
|
type ArchiveType = 'tar.gz' | 'zip';
|
||||||
|
|
||||||
|
export interface PlatformOptions {
|
||||||
|
archive: ArchiveType;
|
||||||
|
os: OsVersions;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface MicrosoftVersion {
|
||||||
|
downloadUrl?: string;
|
||||||
|
version: Array<number>;
|
||||||
|
}
|
||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
import * as core from '@actions/core';
|
import * as core from '@actions/core';
|
||||||
import * as auth from './auth';
|
import * as auth from './auth';
|
||||||
import { getBooleanInput } from './util';
|
import { getBooleanInput, isCacheFeatureAvailable } from './util';
|
||||||
import * as constants from './constants';
|
import * as constants from './constants';
|
||||||
import { restore } from './cache';
|
import { restore } from './cache';
|
||||||
import * as path from 'path';
|
import * as path from 'path';
|
||||||
@@ -42,7 +42,7 @@ async function run() {
|
|||||||
core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
|
core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
|
||||||
|
|
||||||
await auth.configureAuthentication();
|
await auth.configureAuthentication();
|
||||||
if (cache) {
|
if (cache && isCacheFeatureAvailable()) {
|
||||||
await restore(cache);
|
await restore(cache);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
|||||||
+22
@@ -2,6 +2,7 @@ import os from 'os';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
import * as cache from '@actions/cache';
|
||||||
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';
|
||||||
@@ -77,3 +78,24 @@ export function isJobStatusSuccess() {
|
|||||||
|
|
||||||
return jobStatus === 'success';
|
return jobStatus === 'success';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isGhes(): boolean {
|
||||||
|
const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
|
||||||
|
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
|
||||||
|
}
|
||||||
|
|
||||||
|
export function isCacheFeatureAvailable(): boolean {
|
||||||
|
if (!cache.isFeatureAvailable()) {
|
||||||
|
if (isGhes()) {
|
||||||
|
throw new Error(
|
||||||
|
'Caching is only supported on GHES version >= 3.5. If you are on a version >= 3.5, please check with your GHES admin if the Actions cache service is enabled or not.'
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
core.warning('The runner was not able to contact the cache service. Caching will be skipped');
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user