From 14dba4af37fa01ebe0080698dcfcd622479ecb49 Mon Sep 17 00:00:00 2001 From: renfeiw Date: Wed, 28 Jun 2023 15:25:13 -0400 Subject: [PATCH] Fix machineInfo curl validation - update curl version command - switch machineInfo detection to warning mode - processBuilder to use env copied from the parent shell environment Signed-off-by: renfeiw --- src/org/openj9/envInfo/CmdExecutor.java | 8 ++++++++ src/org/openj9/envInfo/MachineInfo.java | 27 ++++++++++++++----------- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/org/openj9/envInfo/CmdExecutor.java b/src/org/openj9/envInfo/CmdExecutor.java index 52609f47..68552455 100644 --- a/src/org/openj9/envInfo/CmdExecutor.java +++ b/src/org/openj9/envInfo/CmdExecutor.java @@ -18,6 +18,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; +import java.util.Map; public class CmdExecutor { private static CmdExecutor instance; @@ -36,9 +37,16 @@ public String execute(String[] commands) { String rt = null; try { ProcessBuilder builder = new ProcessBuilder(Arrays.asList(commands)); + Map env = builder.environment(); + // clear env and copy from the parent shell environment + env.clear(); + Map shellEnv = System.getenv(); + env.putAll(shellEnv); + System.out.println(String.join(" ",builder.command().toArray(new String[0]))); builder.redirectErrorStream(true); Process proc = builder.start(); BufferedReader stdOutput = new BufferedReader(new InputStreamReader(proc.getInputStream())); + StringBuilder sb = new StringBuilder(); String line = null; String newline = ""; diff --git a/src/org/openj9/envInfo/MachineInfo.java b/src/org/openj9/envInfo/MachineInfo.java index 0685fb2f..41b8f016 100644 --- a/src/org/openj9/envInfo/MachineInfo.java +++ b/src/org/openj9/envInfo/MachineInfo.java @@ -61,7 +61,7 @@ public class MachineInfo { public static final String[] ANT_VERSION_CMD = new String[] {"bash", "-c", "ant -version"}; public static final String[] MAKE_VERSION_CMD = new String[] {"bash", "-c", "make --version"}; public static final String[] PERL_VERSION_CMD = new String[] {"bash", "-c", "perl --version"}; - public static final String[] CURL_VERSION_CMD = new String[] {"bash", "-c", "curl --version"}; + public static final String[] CURL_VERSION_CMD = new String[] {"bash", "-c", "curl --version | head -n 1 | awk '{ print $2 }'"}; // Console @@ -142,11 +142,12 @@ private void makeSameLength(ArrayList list, int requiredLength){ } } - private boolean validateVersion(String versionName, String actualVersionStr, String requriedVersionStr) { + private boolean validateVersion(Info info, String requriedVersionStr) { boolean isValid = true; + String actualVersionStr = parseInfo(info.output); + ArrayList accVer = versionStr2ArrList(actualVersionStr); + ArrayList reqVer = versionStr2ArrList(requriedVersionStr); try { - ArrayList accVer = versionStr2ArrList(actualVersionStr); - ArrayList reqVer = versionStr2ArrList(requriedVersionStr); int accVerLen = accVer.size(); int reqVerLen = reqVer.size(); if (accVerLen > reqVerLen) { @@ -162,11 +163,11 @@ private boolean validateVersion(String versionName, String actualVersionStr, Str } } if (!isValid) { - System.out.println("Error: required " + versionName + ": " + requriedVersionStr + ". Installed version: " + actualVersionStr); + System.out.println("Warning: required " + info.name + ": " + requriedVersionStr + ". Output:\n" + info.output); } } catch (NumberFormatException e){ - System.out.println("Warning: "+ versionName + " information cannot be extracted."); - System.out.println(versionName + " output: " + actualVersionStr); + System.out.println("Warning: "+ info.name + " information cannot be extracted."); + System.out.println(info.name + " output: " + actualVersionStr); } return isValid; } @@ -175,13 +176,15 @@ private void validateInfo() { boolean valid = true; for (Info info : infoMap.values()) { if (info.req != null) { - String version = parseInfo(info.output); - valid &= validateVersion(info.name, version, info.req); + valid &= validateVersion(info, info.req); } } - if (!valid) { - System.exit(1); - } + + // Do not fail if the check not pass for the build environment. + // We need to add an option to toggle the failure or warning mode. + // if (!valid) { + // System.exit(1); + //} } private void getSysInfo() {