diff --git a/README.md b/README.md index 1ed46558..160e32fe 100644 --- a/README.md +++ b/README.md @@ -18,11 +18,20 @@ The `setup-java` action provides the following functionality for GitHub Actions This action allows you to work with Java and Scala projects. +## Breaking changes in V5 + +- Upgraded action from node20 to node24 + > Make sure your runner is on version v2.327.1 or later to ensure compatibility with this release [Release Notes](https://github.com/actions/runner/releases/tag/v2.327.1) + +For more details, see the full release notes on the [releases page](https://github.com/actions/setup-java/releases/tag/v5.0.0) + ## V2 vs V1 - V2 supports custom distributions and provides support for Azul Zulu OpenJDK, Eclipse Temurin and AdoptOpenJDK out of the box. V1 supports only Azul Zulu OpenJDK. - V2 requires you to specify distribution along with the version. V1 defaults to Azul Zulu OpenJDK, only version input is required. Follow [the migration guide](docs/switching-to-v2.md) to switch from V1 to V2. +For information about the latest releases, recent updates, and newly supported distributions, please refer to the `setup-java` [Releases](https://github.com/actions/setup-java/releases). + ## Usage - `java-version`: The Java version that is going to be set up. Takes a whole or [semver](#supported-version-syntax) Java version. If not specified, the action will expect `java-version-file` input to be specified. @@ -75,8 +84,8 @@ This action allows you to work with Java and Scala projects. #### Eclipse Temurin ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' # See 'Supported distributions' for available options java-version: '21' @@ -86,8 +95,8 @@ steps: #### Azul Zulu OpenJDK ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'zulu' # See 'Supported distributions' for available options java-version: '21' @@ -142,8 +151,8 @@ The cache input is optional, and caching is turned off by default. #### Caching gradle dependencies ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -157,8 +166,8 @@ steps: #### Caching maven dependencies ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -171,8 +180,8 @@ steps: #### Caching sbt dependencies ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -191,8 +200,8 @@ Usually, cache gets downloaded in multiple segments of fixed sizes. Sometimes, a env: SEGMENT_DOWNLOAD_TIMEOUT_MINS: '5' steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -211,8 +220,8 @@ For Java distributions that are not cached on Hosted images, `check-latest` alwa ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -230,9 +239,9 @@ jobs: java: [ '8', '11', '17', '21' ] name: Java ${{ matrix.Java }} sample steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: '' java-version: ${{ matrix.java }} @@ -241,11 +250,11 @@ jobs: ### Install multiple JDKs -By default all versions are added to the PATH. The last version will be used and available globally. Other Java versions can be accessed through env variables with such specification as 'JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }}'. +All configured Java versions are added to the PATH. The last one added to the PATH (i.e., the last JDK set up by this action) will be used as the default and available globally. Other Java versions can be accessed through environment variables such as 'JAVA_HOME_{{ MAJOR_VERSION }}_{{ ARCHITECTURE }}'. To use a specific Java version, set the JAVA_HOME environment variable accordingly and prepend its bin directory to the PATH to ensure it takes priority during execution. ```yaml steps: - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: distribution: '' java-version: | diff --git a/__tests__/distributors/corretto-installer.test.ts b/__tests__/distributors/corretto-installer.test.ts index 0604603f..1da5e393 100644 --- a/__tests__/distributors/corretto-installer.test.ts +++ b/__tests__/distributors/corretto-installer.test.ts @@ -150,9 +150,8 @@ describe('getAvailableVersions', () => { }); mockPlatform(distribution, platform); - const availableVersion = await distribution['findPackageForDownload']( - version - ); + const availableVersion = + await distribution['findPackageForDownload'](version); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); }); @@ -222,9 +221,8 @@ describe('getAvailableVersions', () => { const expectedLink = `https://corretto.aws/downloads/resources/17.0.2.8.1/amazon-corretto-17.0.2.8.1-macosx-${distroArch}.tar.gz`; - const availableVersion = await distribution['findPackageForDownload']( - '17' - ); + const availableVersion = + await distribution['findPackageForDownload']('17'); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); } diff --git a/__tests__/distributors/dragonwell-installer.test.ts b/__tests__/distributors/dragonwell-installer.test.ts index 4a680d8f..627a96ab 100644 --- a/__tests__/distributors/dragonwell-installer.test.ts +++ b/__tests__/distributors/dragonwell-installer.test.ts @@ -206,9 +206,8 @@ describe('getAvailableVersions', () => { }); mockPlatform(distribution, platform); - const availableVersion = await distribution['findPackageForDownload']( - jdkVersion - ); + const availableVersion = + await distribution['findPackageForDownload'](jdkVersion); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); } diff --git a/__tests__/distributors/jetbrains-installer.test.ts b/__tests__/distributors/jetbrains-installer.test.ts index 241843cc..44d8ef89 100644 --- a/__tests__/distributors/jetbrains-installer.test.ts +++ b/__tests__/distributors/jetbrains-installer.test.ts @@ -76,9 +76,8 @@ describe('findPackageForDownload', () => { checkLatest: false }); distribution['getAvailableVersions'] = async () => manifestData as any; - const resolvedVersion = await distribution['findPackageForDownload']( - input - ); + const resolvedVersion = + await distribution['findPackageForDownload'](input); const url = resolvedVersion.url; const options = {method: 'HEAD'}; diff --git a/__tests__/distributors/sapmachine-installer.test.ts b/__tests__/distributors/sapmachine-installer.test.ts index 4eec570a..5073cd9f 100644 --- a/__tests__/distributors/sapmachine-installer.test.ts +++ b/__tests__/distributors/sapmachine-installer.test.ts @@ -61,9 +61,8 @@ describe('getAvailableVersions', () => { mockPlatform(distribution, 'linux'); - const availableVersion = await distribution['findPackageForDownload']( - version - ); + const availableVersion = + await distribution['findPackageForDownload'](version); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe( 'https://github.com/SAP/SapMachine/releases/download/sapmachine-17.0.10/sapmachine-jdk-17.0.10_linux-x64_bin.tar.gz' @@ -230,9 +229,8 @@ describe('getAvailableVersions', () => { }); mockPlatform(distribution, platform); - const availableVersion = await distribution['findPackageForDownload']( - normalizedVersion - ); + const availableVersion = + await distribution['findPackageForDownload'](normalizedVersion); expect(availableVersion).not.toBeNull(); expect(availableVersion.url).toBe(expectedLink); } diff --git a/dist/cleanup/index.js b/dist/cleanup/index.js index f0b450fb..b9b10f8c 100644 --- a/dist/cleanup/index.js +++ b/dist/cleanup/index.js @@ -94707,7 +94707,7 @@ function getVersionFromFileContent(content, distributionName, versionFile) { const versionFileName = getFileName(versionFile); if (versionFileName == '.tool-versions') { javaVersionRegExp = - /^(java\s+)(?:\S*-)?v?(?(\d+)(\.\d+)?(\.\d+)?(\+\d+)?(-ea(\.\d+)?)?)$/m; + /^java\s+(?:\S*-)?(?\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; } else { javaVersionRegExp = /(?(?<=(^|\s|-))(\d+\S*))(\s|$)/; diff --git a/dist/setup/index.js b/dist/setup/index.js index 667688d3..27f53b6c 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -132760,7 +132760,7 @@ function getVersionFromFileContent(content, distributionName, versionFile) { const versionFileName = getFileName(versionFile); if (versionFileName == '.tool-versions') { javaVersionRegExp = - /^(java\s+)(?:\S*-)?v?(?(\d+)(\.\d+)?(\.\d+)?(\+\d+)?(-ea(\.\d+)?)?)$/m; + /^java\s+(?:\S*-)?(?\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; } else { javaVersionRegExp = /(?(?<=(^|\s|-))(\d+\S*))(\s|$)/; diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md index 4ba80b03..a8a0cc06 100644 --- a/docs/advanced-usage.md +++ b/docs/advanced-usage.md @@ -31,8 +31,8 @@ Inputs `java-version` and `distribution` are mandatory and needs to be provided. ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '21' @@ -44,8 +44,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'adopt-hotspot' java-version: '11' @@ -56,8 +56,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'zulu' java-version: '21' @@ -69,8 +69,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'liberica' java-version: '21' @@ -82,8 +82,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'microsoft' java-version: '21' @@ -97,7 +97,7 @@ steps: To get a higher rate limit, you can [generate a personal access token on github.com](https://github.com/settings/tokens/new) and pass it as the `token` input for the action: ```yaml -uses: actions/setup-java@v4 +uses: actions/setup-java@v5 with: token: ${{ secrets.GH_DOTCOM_TOKEN }} distribution: 'microsoft' @@ -111,8 +111,8 @@ If the runner is not able to access github.com, any Java versions requested duri ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'corretto' java-version: '21' @@ -124,8 +124,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'oracle' java-version: '21' @@ -137,8 +137,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'dragonwell' java-version: '8' @@ -149,8 +149,8 @@ steps: **NOTE:** An OpenJDK release maintained and supported by SAP ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'sapmachine' java-version: '21' @@ -162,8 +162,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'graalvm' java-version: '21' @@ -181,8 +181,8 @@ For example, `11.0.24` is not available but `11.0.16` is. ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: '11' @@ -194,8 +194,8 @@ GitHub token to the action to increase the rate limit. Set the `GITHUB_TOKEN` en ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'jetbrains' java-version: '17' @@ -219,8 +219,8 @@ The available package types are: ## Installing custom Java package type ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: '' java-version: '11' @@ -232,8 +232,8 @@ steps: ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: '' java-version: '11' @@ -249,7 +249,7 @@ steps: - run: | download_url="https://github.com/AdoptOpenJDK/openjdk11-binaries/releases/download/jdk-11.0.10%2B9/OpenJDK11U-jdk_x64_linux_hotspot_11.0.10_9.tar.gz" wget -O $RUNNER_TEMP/java_package.tar.gz $download_url -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: 'jdkfile' jdkFile: ${{ runner.temp }}/java_package.tar.gz @@ -275,7 +275,7 @@ If your use-case requires a custom distribution (in the example, alpine-linux is latest_semver_version=$(curl -sL $latest_jdk_json_url | jq -r 'version.semver') echo "java_version=$latest_semver_version" >> "$GITHUB_OUTPUT" - - uses: actions/setup-java@v4 + - uses: actions/setup-java@v5 with: distribution: 'jdkfile' jdkFile: ${{ runner.temp }}/java_package.tar.gz @@ -296,9 +296,9 @@ jobs: java: [ '8', '11' ] name: Java ${{ matrix.Java }} (${{ matrix.distribution }}) sample steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: ${{ matrix.distribution }} java-version: ${{ matrix.java }} @@ -316,9 +316,9 @@ jobs: os: [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ] name: Java ${{ matrix.Java }} (${{ matrix.os }}) sample steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Setup java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: ${{ matrix.java }} @@ -333,9 +333,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up JDK 11 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: '' java-version: '11' @@ -349,7 +349,7 @@ jobs: GITHUB_TOKEN: ${{ github.token }} # GITHUB_TOKEN is the default env for the password - name: Set up Apache Maven Central - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: # running setup-java again overwrites the settings.xml distribution: 'temurin' java-version: '11' @@ -446,9 +446,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up JDK 11 for Shared Runner - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: '' java-version: '11' @@ -472,10 +472,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up JDK 11 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: distribution: '' java-version: '11' @@ -509,14 +509,14 @@ Subsequent calls to `setup-java` with distinct distribution and version paramete ```yaml steps: -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: '' java-version: | 8 11 -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: '' java-version: '15' @@ -528,7 +528,7 @@ The result is a Toolchain with entries for JDKs 8, 11 and 15. You can even combi - run: | download_url="https://example.com/java/jdk/6u45-b06/jdk-6u45-linux-x64.tar.gz" wget -O $RUNNER_TEMP/java_package.tar.gz $download_url -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: 'jdkfile' jdkFile: ${{ runner.temp }}/java_package.tar.gz @@ -545,7 +545,7 @@ Each JDK provider will receive a default `vendor` using the `distribution` input - run: | download_url="https://example.com/java/jdk/6u45-b06/jdk-6u45-linux-x64.tar.gz" wget -O $RUNNER_TEMP/java_package.tar.gz $download_url -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: 'jdkfile' jdkFile: ${{ runner.temp }}/java_package.tar.gz @@ -560,7 +560,7 @@ In case you install multiple versions of Java at once with multi-line `java-vers ```yaml steps: -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: '' java-version: | @@ -574,8 +574,8 @@ Each JDK provider will receive a default `id` based on the combination of `distr ```yaml steps: -- uses: actions/checkout@v4 -- uses: actions/setup-java@v4 +- uses: actions/checkout@v5 +- uses: actions/setup-java@v5 with: distribution: 'temurin' java-version: '11' @@ -587,7 +587,7 @@ In case you install multiple versions of Java at once you can use the same synta ```yaml steps: -- uses: actions/setup-java@v4 +- uses: actions/setup-java@v5 with: distribution: '' java-version: | @@ -614,5 +614,9 @@ major versions: 8, 11, 16, 17, 21 more specific versions: 8.0.282+8, 8.0.232, 11.0, 11.0.4, 17.0 early access (EA) versions: 15-ea, 15.0.0-ea versions with specified distribution: openjdk64-11.0.2 +LTS versions : temurin-21.0.5+11.0.LTS ``` If the file contains multiple versions, only the first one will be recognized. + +***NOTE***: +For the tool-version file, ensure that you use standard semantic versioning (semver) formats, as non-standard formats (such as jetbrains-21b212.1) may not be parsed correctly. Additionally, for complex version strings containing multiple version-like segments (for example, java semeru-openj9-11.0.15+10_openj9-0.32.0), the extraction logic may incorrectly capture the last segment (0.32.0) instead of the main version (11.0.15+10). \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 336c19e7..c99ed7e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,3 +1,4 @@ + { "name": "setup-java", "version": "5.0.0", @@ -32,7 +33,7 @@ "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", - "prettier": "^2.8.4", + "prettier": "^3.6.2", "ts-jest": "^29.3.0", "typescript": "^5.3.3" }, @@ -4876,15 +4877,16 @@ } }, "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, + "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" diff --git a/package.json b/package.json index bccf0321..21a30769 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "private": true, "description": "setup java action", "main": "dist/setup/index.js", - "engines": { + "engines": { "node": ">=24.0.0" }, "scripts": { @@ -52,7 +52,7 @@ "eslint-plugin-node": "^11.1.0", "jest": "^29.7.0", "jest-circus": "^29.7.0", - "prettier": "^2.8.4", + "prettier": "^3.6.2", "ts-jest": "^29.3.0", "typescript": "^5.3.3" }, @@ -60,4 +60,4 @@ "url": "https://github.com/actions/setup-java/issues" }, "homepage": "https://github.com/actions/setup-java#readme" -} +} \ No newline at end of file diff --git a/src/toolchains.ts b/src/toolchains.ts index 3238d296..219fd207 100644 --- a/src/toolchains.ts +++ b/src/toolchains.ts @@ -56,9 +56,8 @@ export async function createToolchainsSettings({ // when an alternate m2 location is specified use only that location (no .m2 directory) // otherwise use the home/.m2/ path await io.mkdirP(settingsDirectory); - const originalToolchains = await readExistingToolchainsFile( - settingsDirectory - ); + const originalToolchains = + await readExistingToolchainsFile(settingsDirectory); const updatedToolchains = generateToolchainDefinition( originalToolchains, jdkInfo.version, diff --git a/src/util.ts b/src/util.ts index af75aaac..9e5f2f66 100644 --- a/src/util.ts +++ b/src/util.ts @@ -133,7 +133,7 @@ export function getVersionFromFileContent( const versionFileName = getFileName(versionFile); if (versionFileName == '.tool-versions') { javaVersionRegExp = - /^(java\s+)(?:\S*-)?v?(?(\d+)(\.\d+)?(\.\d+)?(\+\d+)?(-ea(\.\d+)?)?)$/m; + /^java\s+(?:\S*-)?(?\d+(?:\.\d+)*([+_.-](?:openj9[-._]?\d[\w.-]*|java\d+|jre[-_\w]*|OpenJDK\d+[\w_.-]*|[a-z0-9]+))*)/im; } else { javaVersionRegExp = /(?(?<=(^|\s|-))(\d+\S*))(\s|$)/; }