mirror of
https://github.com/actions/setup-java.git
synced 2026-09-26 23:18:36 +00:00
Merge branch 'main' into support-kona-jdk
This commit is contained in:
@@ -80,6 +80,7 @@ export function generate(
|
||||
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
||||
'@xsi:schemaLocation':
|
||||
'http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd',
|
||||
interactiveMode: false,
|
||||
servers: {
|
||||
server: [
|
||||
{
|
||||
|
||||
@@ -30,5 +30,10 @@ export const MVN_SETTINGS_FILE = 'settings.xml';
|
||||
export const MVN_TOOLCHAINS_FILE = 'toolchains.xml';
|
||||
export const INPUT_MVN_TOOLCHAIN_ID = 'mvn-toolchain-id';
|
||||
export const INPUT_MVN_TOOLCHAIN_VENDOR = 'mvn-toolchain-vendor';
|
||||
export const INPUT_SHOW_DOWNLOAD_PROGRESS = 'show-download-progress';
|
||||
|
||||
export const MAVEN_ARGS_ENV = 'MAVEN_ARGS';
|
||||
export const MAVEN_NO_TRANSFER_PROGRESS_FLAG = '-ntp';
|
||||
export const MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG = '--no-transfer-progress';
|
||||
|
||||
export const DISTRIBUTIONS_ONLY_MAJOR_VERSION = ['corretto'];
|
||||
|
||||
@@ -127,8 +127,7 @@ export class CorrettoDistribution extends JavaBase {
|
||||
|
||||
private getAvailableVersionsForPlatform(
|
||||
eligibleVersions:
|
||||
| ICorrettoAllAvailableVersions['os']['arch']['imageType']
|
||||
| undefined
|
||||
ICorrettoAllAvailableVersions['os']['arch']['imageType'] | undefined
|
||||
): ICorrettoAvailableVersions[] {
|
||||
const availableVersions: ICorrettoAvailableVersions[] = [];
|
||||
|
||||
|
||||
@@ -4,11 +4,7 @@ export type Bitness = '32' | '64';
|
||||
export type ArchType = 'arm' | 'ppc' | 'sparc' | 'x86';
|
||||
|
||||
export type OsVersions =
|
||||
| 'linux'
|
||||
| 'linux-musl'
|
||||
| 'macos'
|
||||
| 'solaris'
|
||||
| 'windows';
|
||||
'linux' | 'linux-musl' | 'macos' | 'solaris' | 'windows';
|
||||
|
||||
export interface ArchitectureOptions {
|
||||
bitness: Bitness;
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
import * as core from '@actions/core';
|
||||
import {getBooleanInput} from './util';
|
||||
import {
|
||||
INPUT_SHOW_DOWNLOAD_PROGRESS,
|
||||
MAVEN_ARGS_ENV,
|
||||
MAVEN_NO_TRANSFER_PROGRESS_FLAG,
|
||||
MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG
|
||||
} from './constants';
|
||||
|
||||
/**
|
||||
* Configures the MAVEN_ARGS environment variable so that Maven suppresses
|
||||
* artifact transfer/download progress output by default, producing cleaner
|
||||
* CI logs.
|
||||
*
|
||||
* Behavior:
|
||||
* - When `show-download-progress` is `false` (the default), `-ntp`
|
||||
* (`--no-transfer-progress`) is appended to any existing MAVEN_ARGS value.
|
||||
* - When `show-download-progress` is `true`, MAVEN_ARGS is left untouched so
|
||||
* the user's own configuration (and Maven's default progress output) is
|
||||
* preserved.
|
||||
*
|
||||
* The change is idempotent: if MAVEN_ARGS already disables transfer progress
|
||||
* (via `-ntp` or `--no-transfer-progress`) nothing is added. Any pre-existing
|
||||
* MAVEN_ARGS value is preserved.
|
||||
*
|
||||
* MAVEN_ARGS is honored by Maven 3.9.0+ and the Maven Wrapper; older Maven
|
||||
* versions ignore it, so this is a no-op there. It has no effect on non-Maven
|
||||
* builds such as Gradle or sbt.
|
||||
*/
|
||||
export function configureMavenArgs(): void {
|
||||
const showDownloadProgress = getBooleanInput(
|
||||
INPUT_SHOW_DOWNLOAD_PROGRESS,
|
||||
false
|
||||
);
|
||||
|
||||
if (showDownloadProgress) {
|
||||
core.debug(
|
||||
`${INPUT_SHOW_DOWNLOAD_PROGRESS} is true; leaving ${MAVEN_ARGS_ENV} unchanged`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const existingArgs = (process.env[MAVEN_ARGS_ENV] ?? '').trim();
|
||||
|
||||
const alreadyDisabled = existingArgs
|
||||
.split(/\s+/)
|
||||
.some(
|
||||
arg =>
|
||||
arg === MAVEN_NO_TRANSFER_PROGRESS_FLAG ||
|
||||
arg === MAVEN_NO_TRANSFER_PROGRESS_LONG_FLAG
|
||||
);
|
||||
|
||||
if (alreadyDisabled) {
|
||||
core.debug(
|
||||
`${MAVEN_ARGS_ENV} already disables transfer progress; leaving it unchanged`
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
const updatedArgs = existingArgs
|
||||
? `${existingArgs} ${MAVEN_NO_TRANSFER_PROGRESS_FLAG}`
|
||||
: MAVEN_NO_TRANSFER_PROGRESS_FLAG;
|
||||
|
||||
core.exportVariable(MAVEN_ARGS_ENV, updatedArgs);
|
||||
core.info(
|
||||
`Configured ${MAVEN_ARGS_ENV} to include ${MAVEN_NO_TRANSFER_PROGRESS_FLAG} to suppress Maven transfer progress logs. ` +
|
||||
`Set '${INPUT_SHOW_DOWNLOAD_PROGRESS}: true' to keep the download progress output.`
|
||||
);
|
||||
}
|
||||
@@ -12,6 +12,7 @@ import {restore} from './cache';
|
||||
import * as path from 'path';
|
||||
import {getJavaDistribution} from './distributions/distribution-factory';
|
||||
import {JavaInstallerOptions} from './distributions/base-models';
|
||||
import {configureMavenArgs} from './maven-args';
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
@@ -87,6 +88,7 @@ async function run() {
|
||||
core.info(`##[add-matcher]${path.join(matchersPath, 'java.json')}`);
|
||||
|
||||
await auth.configureAuthentication();
|
||||
configureMavenArgs();
|
||||
if (cache && isCacheFeatureAvailable()) {
|
||||
await restore(cache, cacheDependencyPath);
|
||||
}
|
||||
|
||||
+89
-39
@@ -83,47 +83,76 @@ export function generateToolchainDefinition(
|
||||
id: string,
|
||||
jdkHome: string
|
||||
) {
|
||||
let xmlObj;
|
||||
if (original?.length) {
|
||||
xmlObj = xmlCreate(original)
|
||||
.root()
|
||||
.ele({
|
||||
toolchain: {
|
||||
type: 'jdk',
|
||||
provides: {
|
||||
version: `${version}`,
|
||||
vendor: `${vendor}`,
|
||||
id: `${id}`
|
||||
},
|
||||
configuration: {
|
||||
jdkHome: `${jdkHome}`
|
||||
}
|
||||
}
|
||||
});
|
||||
} else
|
||||
xmlObj = xmlCreate({
|
||||
toolchains: {
|
||||
'@xmlns': 'http://maven.apache.org/TOOLCHAINS/1.1.0',
|
||||
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
||||
'@xsi:schemaLocation':
|
||||
'http://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd',
|
||||
toolchain: [
|
||||
{
|
||||
type: 'jdk',
|
||||
provides: {
|
||||
version: `${version}`,
|
||||
vendor: `${vendor}`,
|
||||
id: `${id}`
|
||||
},
|
||||
configuration: {
|
||||
jdkHome: `${jdkHome}`
|
||||
}
|
||||
}
|
||||
]
|
||||
let jsToolchains: Toolchain[] = [
|
||||
{
|
||||
type: 'jdk',
|
||||
provides: {
|
||||
version: `${version}`,
|
||||
vendor: `${vendor}`,
|
||||
id: `${id}`
|
||||
},
|
||||
configuration: {
|
||||
jdkHome: `${jdkHome}`
|
||||
}
|
||||
});
|
||||
}
|
||||
];
|
||||
// default root attributes, used when the existing file does not declare its own
|
||||
let rootAttributes: Record<string, string> = {
|
||||
'@xmlns': 'http://maven.apache.org/TOOLCHAINS/1.1.0',
|
||||
'@xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance',
|
||||
'@xsi:schemaLocation':
|
||||
'http://maven.apache.org/TOOLCHAINS/1.1.0 https://maven.apache.org/xsd/toolchains-1.1.0.xsd'
|
||||
};
|
||||
if (original?.length) {
|
||||
// convert existing toolchains into TS native objects for better handling
|
||||
// xmlbuilder2 will convert the document into a `{toolchains: { toolchain: [] | {} }}` structure
|
||||
// instead of the desired `toolchains: [{}]` one or simply `[{}]`
|
||||
const jsObj = xmlCreate(original)
|
||||
.root()
|
||||
.toObject() as unknown as ExtractedToolchains;
|
||||
if (jsObj.toolchains) {
|
||||
// preserve the existing root attributes (xmlns, schemaLocation, …) so we don't
|
||||
// silently rewrite user-managed metadata or change the effective XML namespace;
|
||||
// xmlbuilder2 exposes attributes as `@`-prefixed keys on the element object
|
||||
const existingAttributes = Object.fromEntries(
|
||||
Object.entries(jsObj.toolchains).filter(([key]) => key.startsWith('@'))
|
||||
) as Record<string, string>;
|
||||
// fall back to the defaults only for attributes the existing file is missing
|
||||
rootAttributes = {...rootAttributes, ...existingAttributes};
|
||||
|
||||
return xmlObj.end({
|
||||
if (jsObj.toolchains.toolchain) {
|
||||
// in case only a single child exists xmlbuilder2 will not create an array and using verbose = true equally doesn't work here
|
||||
// See https://oozcitak.github.io/xmlbuilder2/serialization.html#js-object-and-map-serializers for details
|
||||
if (Array.isArray(jsObj.toolchains.toolchain)) {
|
||||
jsToolchains.push(...jsObj.toolchains.toolchain);
|
||||
} else {
|
||||
jsToolchains.push(jsObj.toolchains.toolchain);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove potential duplicates based on type & id (which should be a unique combination);
|
||||
// self.findIndex will only return the first occurrence, ensuring duplicates are skipped
|
||||
jsToolchains = jsToolchains.filter(
|
||||
(value, index, self) =>
|
||||
// ensure non-jdk toolchains are kept in the results, we must not touch them because they belong to the user
|
||||
value.type !== 'jdk' ||
|
||||
// keep toolchains that lack a usable string id (e.g. partially-formed user files);
|
||||
// we cannot safely deduplicate them and must not crash while reading them
|
||||
typeof value.provides?.id !== 'string' ||
|
||||
index ===
|
||||
self.findIndex(
|
||||
t => t.type === value.type && t.provides?.id === value.provides?.id
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return xmlCreate({
|
||||
toolchains: {
|
||||
...rootAttributes,
|
||||
toolchain: jsToolchains
|
||||
}
|
||||
}).end({
|
||||
format: 'xml',
|
||||
wellFormed: false,
|
||||
headless: false,
|
||||
@@ -166,3 +195,24 @@ async function writeToolchainsFileToDisk(
|
||||
flag: 'w'
|
||||
});
|
||||
}
|
||||
|
||||
interface ExtractedToolchains {
|
||||
toolchains: {
|
||||
// root attributes such as xmlns / schemaLocation are exposed as `@`-prefixed keys
|
||||
[attribute: `@${string}`]: string;
|
||||
toolchain?: Toolchain[] | Toolchain;
|
||||
};
|
||||
}
|
||||
|
||||
// Toolchain type definition according to Maven Toolchains XSD 1.1.0
|
||||
interface Toolchain {
|
||||
type: string;
|
||||
provides:
|
||||
| {
|
||||
version: string;
|
||||
vendor: string;
|
||||
id: string;
|
||||
}
|
||||
| any;
|
||||
configuration: any;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user