Run java to show computed settings

This commit is contained in:
Michael B. Gale
2026-02-17 15:36:49 +00:00
parent 46473e05b7
commit 906dd890a5
4 changed files with 122 additions and 40 deletions
+1 -1
View File
@@ -82,7 +82,7 @@ async function run(startedAt: Date) {
// which may affect the operation of our proxy.
if (core.isDebug() || util.isInTestMode()) {
try {
checkProxyEnvironment(logger, language);
await checkProxyEnvironment(logger, language);
} catch (err) {
logger.debug(
`Unable to inspect runner environment: ${util.getErrorMessage(err)}`,
+24 -6
View File
@@ -2,7 +2,10 @@ import * as fs from "fs";
import * as os from "os";
import path from "path";
import * as toolrunner from "@actions/exec/lib/toolrunner";
import * as io from "@actions/io";
import test, { ExecutionContext } from "ava";
import sinon from "sinon";
import { JavaEnvVars, KnownLanguage } from "../languages";
import {
@@ -25,6 +28,15 @@ import {
setupTests(test);
function stubToolrunner() {
sinon.stub(io, "which").throws(new Error("Java not installed"));
sinon.stub(toolrunner, "ToolRunner").returns({
exec: async () => {
return 0;
},
});
}
function assertEnvVarLogMessages(
t: ExecutionContext<any>,
envVars: string[],
@@ -166,30 +178,36 @@ test("checkProxyEnvVars - credentials are removed from URLs", (t) => {
);
});
test("checkProxyEnvironment - includes base checks for all known languages", (t) => {
test("checkProxyEnvironment - includes base checks for all known languages", async (t) => {
stubToolrunner();
for (const language of Object.values(KnownLanguage)) {
const messages: LoggedMessage[] = [];
const logger = getRecordingLogger(messages);
checkProxyEnvironment(logger, language);
await checkProxyEnvironment(logger, language);
assertEnvVarLogMessages(t, Object.keys(ProxyEnvVars), messages, false);
}
});
test("checkProxyEnvironment - includes Java checks for Java", (t) => {
test("checkProxyEnvironment - includes Java checks for Java", async (t) => {
const messages: LoggedMessage[] = [];
const logger = getRecordingLogger(messages);
checkProxyEnvironment(logger, KnownLanguage.java);
stubToolrunner();
await checkProxyEnvironment(logger, KnownLanguage.java);
assertEnvVarLogMessages(t, Object.keys(ProxyEnvVars), messages, false);
assertEnvVarLogMessages(t, JAVA_PROXY_ENV_VARS, messages, false);
});
test("checkProxyEnvironment - includes language-specific checks if the language is undefined", (t) => {
test("checkProxyEnvironment - includes language-specific checks if the language is undefined", async (t) => {
const messages: LoggedMessage[] = [];
const logger = getRecordingLogger(messages);
checkProxyEnvironment(logger, undefined);
stubToolrunner();
await checkProxyEnvironment(logger, undefined);
assertEnvVarLogMessages(t, Object.keys(ProxyEnvVars), messages, false);
assertEnvVarLogMessages(t, JAVA_PROXY_ENV_VARS, messages, false);
});
+37 -2
View File
@@ -1,6 +1,9 @@
import * as fs from "fs";
import * as path from "path";
import * as toolrunner from "@actions/exec/lib/toolrunner";
import * as io from "@actions/io";
import { JavaEnvVars, KnownLanguage, Language } from "../languages";
import { Logger } from "../logging";
import { getErrorMessage, isDefined } from "../util";
@@ -128,6 +131,36 @@ export function checkJdkSettings(logger: Logger, jdkHome: string) {
}
}
/** Invokes `java` to get it to show us the active configuration. */
async function showJavaSettings(logger: Logger): Promise<void> {
try {
const java = await io.which("java", true);
let output = "";
await new toolrunner.ToolRunner(
java,
["-XshowSettings:all", "-XshowSettings:security:all", "-version"],
{
silent: true,
listeners: {
stdout: (data) => {
output += String(data);
},
stderr: (data) => {
output += String(data);
},
},
},
).exec();
logger.startGroup("Java settings");
logger.info(output);
logger.endGroup();
} catch (err) {
logger.debug(`Failed to query java settings: ${getErrorMessage(err)}`);
}
}
/** Enumerates environment variable names which may contain information about proxy settings. */
export enum ProxyEnvVars {
HTTP_PROXY = "HTTP_PROXY",
@@ -154,10 +187,10 @@ export function checkProxyEnvVars(logger: Logger) {
* @param logger The logger to use.
* @param language The enabled language, if known.
*/
export function checkProxyEnvironment(
export async function checkProxyEnvironment(
logger: Logger,
language: Language | undefined,
) {
): Promise<void> {
// Determine whether there is an existing proxy configured.
checkProxyEnvVars(logger);
@@ -166,6 +199,8 @@ export function checkProxyEnvironment(
if (language === undefined || language === KnownLanguage.java) {
checkJavaEnvVars(logger);
await showJavaSettings(logger);
const jdks = discoverActionsJdks();
for (const jdk of jdks) {
checkJdkSettings(logger, jdk);