Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: added support to pom.xml and build.gradle #441

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Prev Previous commit
Next Next commit
feat: added support to build.gradle
augustomelo committed Apr 27, 2024
commit 934495da49cbda854ec9bfc2908803964c2836b3
84 changes: 83 additions & 1 deletion .github/workflows/e2e-versions.yml
Original file line number Diff line number Diff line change
@@ -469,7 +469,6 @@ jobs:
- name: Verify Java
run: bash __tests__/verify-java.sh "8" "${{ steps.setup-java.outputs.path }}"
shell: bash

setup-java-version-from-pom-maven-compiler-plugin-configuration:
name: ${{ matrix.distribution }} version from pom.xml - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
@@ -513,3 +512,86 @@ jobs:
- name: Verify Java
run: bash __tests__/verify-java.sh "8" "${{ steps.setup-java.outputs.path }}"
shell: bash
setup-java-version-from-build-gradle-java-library-plugin-specification:
name: ${{ matrix.distribution }} version from build.gradle - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
distribution: ['adopt', 'zulu', 'liberica']
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create build.gradle file
shell: bash
run: |
echo "java {" > build.gradle
echo " toolchain {" >> build.gradle
echo " languageVersion.set(JavaLanguageVersion.of(11))" >> build.gradle
echo " }" >> build.gradle
echo "}" >> build.gradle
- name: setup-java
uses: ./
id: setup-java
with:
distribution: ${{ matrix.distribution }}
java-version-file: 'build.gradle'
- name: Verify Java
run: bash __tests__/verify-java.sh "11" "${{ steps.setup-java.outputs.path }}"
shell: bash

setup-java-version-from-build-gradle-java-plugin-source-compatibility-specification:
name: ${{ matrix.distribution }} version from build.gradle - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
distribution: ['adopt', 'zulu', 'liberica']
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create pom.xml file
shell: bash
run: |
echo "java {" > build.gradle
echo " sourceCompatibility = JavaVersion.VERSION_1_8" >> build.gradle
echo " targetCompatibility = JavaVersion.VERSION_1_8" >> build.gradle
echo "}" >> build.gradle
- name: setup-java
uses: ./
id: setup-java
with:
distribution: ${{ matrix.distribution }}
java-version-file: 'build.gradle'
- name: Verify Java
run: bash __tests__/verify-java.sh "8" "${{ steps.setup-java.outputs.path }}"
shell: bash

setup-java-version-from-build-gradle-java-plugin-target-compatibility-specification:
name: ${{ matrix.distribution }} version from build.gradle - ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [macos-latest, windows-latest, ubuntu-latest]
distribution: ['adopt', 'zulu', 'liberica']
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Create pom.xml file
shell: bash
run: |
echo "java {" > build.gradle
echo " targetCompatibility = JavaVersion.VERSION_21" >> build.gradle
echo "}" >> build.gradle
- name: setup-java
uses: ./
id: setup-java
with:
distribution: ${{ matrix.distribution }}
java-version-file: 'build.gradle'
- name: Verify Java
run: bash __tests__/verify-java.sh "21" "${{ steps.setup-java.outputs.path }}"
shell: bash
39 changes: 39 additions & 0 deletions dist/cleanup/index.js
Original file line number Diff line number Diff line change
@@ -103801,6 +103801,9 @@ function getVersionFromFile(fileName, content, distributionName) {
else if (fileName.includes('pom.xml')) {
parsedVersion = parsePomXmlFile(content);
}
else if (fileName.includes('build.gradle')) {
parsedVersion = parseBuildGradleFile(content);
}
else {
throw new Error(`File ${fileName} not supported, files supported: '.java-version' and 'pom.xml'`);
}
@@ -103909,6 +103912,42 @@ function getByMavenCompilerPluginConfig(xmlDoc) {
});
return (_a = source === null || source === void 0 ? void 0 : source.first().toString()) !== null && _a !== void 0 ? _a : null;
}
function parseBuildGradleFile(buildGradle) {
const versionDefinitionTypes = [getByJavaLibraryPlugin, getByJavaPlugin];
for (const definitionType of versionDefinitionTypes) {
const version = definitionType(buildGradle);
if (version !== null) {
return version;
}
}
return null;
}
function getByJavaLibraryPlugin(buildGradle) {
return getVersionByRegex(buildGradle, 'JavaLanguageVersion.of((d+))');
}
function getByJavaPlugin(buildGradle) {
const possibleRegex = [
'sourceCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)',
'targetCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)'
];
for (var regex of possibleRegex) {
const version = getVersionByRegex(buildGradle, regex);
if (version !== null) {
return version;
}
}
return null;
}
function getVersionByRegex(content, regex) {
const match = content.match(new RegExp(regex));
if (match) {
core.debug(`Found java version: '${match[1]}' using regex: '${regex}'`);
return match[1];
}
else {
return null;
}
}
// By convention, action expects version 8 in the format `8.*` instead of `1.8`
function avoidOldNotation(content) {
return content.startsWith('1.') ? content.substring(2) : content;
39 changes: 39 additions & 0 deletions dist/setup/index.js
Original file line number Diff line number Diff line change
@@ -105458,6 +105458,9 @@ function getVersionFromFile(fileName, content, distributionName) {
else if (fileName.includes('pom.xml')) {
parsedVersion = parsePomXmlFile(content);
}
else if (fileName.includes('build.gradle')) {
parsedVersion = parseBuildGradleFile(content);
}
else {
throw new Error(`File ${fileName} not supported, files supported: '.java-version' and 'pom.xml'`);
}
@@ -105566,6 +105569,42 @@ function getByMavenCompilerPluginConfig(xmlDoc) {
});
return (_a = source === null || source === void 0 ? void 0 : source.first().toString()) !== null && _a !== void 0 ? _a : null;
}
function parseBuildGradleFile(buildGradle) {
const versionDefinitionTypes = [getByJavaLibraryPlugin, getByJavaPlugin];
for (const definitionType of versionDefinitionTypes) {
const version = definitionType(buildGradle);
if (version !== null) {
return version;
}
}
return null;
}
function getByJavaLibraryPlugin(buildGradle) {
return getVersionByRegex(buildGradle, 'JavaLanguageVersion.of((d+))');
}
function getByJavaPlugin(buildGradle) {
const possibleRegex = [
'sourceCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)',
'targetCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)'
];
for (var regex of possibleRegex) {
const version = getVersionByRegex(buildGradle, regex);
if (version !== null) {
return version;
}
}
return null;
}
function getVersionByRegex(content, regex) {
const match = content.match(new RegExp(regex));
if (match) {
core.debug(`Found java version: '${match[1]}' using regex: '${regex}'`);
return match[1];
}
else {
return null;
}
}
// By convention, action expects version 8 in the format `8.*` instead of `1.8`
function avoidOldNotation(content) {
return content.startsWith('1.') ? content.substring(2) : content;
6 changes: 5 additions & 1 deletion docs/advanced-usage.md
Original file line number Diff line number Diff line change
@@ -485,4 +485,8 @@ It is able to parse the following files as `java-version-file`:
- Maven compiler plugin
- Setting the [source](https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-source-and-target.html).
- Setting the [release](https://maven.apache.org/plugins/maven-compiler-plugin/examples/set-compiler-release.html).
- **Note:** Since we are using a RegExp to find the java version, it doesn't grab the values from the tags `source` or `release` on `maven-compiler-plugin`.
- `build.gradle`
- Java library plugin: uses what is defined by `JavaLanguageVersion` example: `JavaLanguageVersion.of(11)`
- Java plugin [docs](https://docs.gradle.org/current/userguide/java_plugin.html#toolchain_and_compatibility):
- sourceCompatibility
- targetCompatibility
49 changes: 49 additions & 0 deletions src/util.ts
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@ import * as tc from '@actions/tool-cache';
import { INPUT_JOB_STATUS, DISTRIBUTIONS_ONLY_MAJOR_VERSION } from './constants';
import { create } from 'xmlbuilder2';
import { XMLBuilder } from 'xmlbuilder2/lib/interfaces';
import { on } from 'events';

export function getTempDir() {
let tempDirectory = process.env['RUNNER_TEMP'] || os.tmpdir();
@@ -114,6 +115,8 @@ export function getVersionFromFile(
parsedVersion = parseJavaVersionFile(content);
} else if (fileName.includes('pom.xml')) {
parsedVersion = parsePomXmlFile(content);
} else if (fileName.includes('build.gradle')) {
parsedVersion = parseBuildGradleFile(content);
} else {
throw new Error(
`File ${fileName} not supported, files supported: '.java-version' and 'pom.xml'`
@@ -249,6 +252,52 @@ function getByMavenCompilerPluginConfig(xmlDoc: XMLBuilder): string | null {
return source?.first().toString() ?? null;
}

function parseBuildGradleFile(buildGradle: string): any {
const versionDefinitionTypes = [getByJavaLibraryPlugin, getByJavaPlugin];

for (const definitionType of versionDefinitionTypes) {
const version = definitionType(buildGradle);

if (version !== null) {
return version;
}
}

return null;
}

function getByJavaLibraryPlugin(buildGradle: string) {
return getVersionByRegex(buildGradle, 'JavaLanguageVersion.of((d+))');
}

function getByJavaPlugin(buildGradle: string) {
const possibleRegex = [
'sourceCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)',
'targetCompatibilitys?=s?JavaVersion.VERSION_(?:1_)?(d+)'
];

for (var regex of possibleRegex) {
const version = getVersionByRegex(buildGradle, regex);

if (version !== null) {
return version;
}
}

return null;
}

function getVersionByRegex(content: string, regex: string): string | null {
const match = content.match(new RegExp(regex));

if (match) {
core.debug(`Found java version: '${match[1]}' using regex: '${regex}'`);
return match[1];
} else {
return null;
}
}

// By convention, action expects version 8 in the format `8.*` instead of `1.8`
function avoidOldNotation(content: string): string {
return content.startsWith('1.') ? content.substring(2) : content;