From 142415605383feec1aac7175dbdbfac1c323d098 Mon Sep 17 00:00:00 2001 From: Ruben Romero Montes Date: Wed, 23 Jul 2025 16:40:51 +0200 Subject: [PATCH] fix: allow missing go env vars Signed-off-by: Ruben Romero Montes --- .../exhort/providers/GoModulesProvider.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java index 9e688f0f..ef961aac 100644 --- a/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java +++ b/src/main/java/com/redhat/exhort/providers/GoModulesProvider.java @@ -40,6 +40,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.TreeMap; import java.util.logging.Logger; import java.util.regex.Pattern; @@ -381,23 +382,42 @@ private static List collectAllDirectDependencies(List targetLine private TreeMap getQualifiers(boolean includeOsAndArch) { if (includeOsAndArch) { String goEnvironmentVariables = Operations.runProcessGetOutput(null, goExecutable, "env"); - String hostArch = + var qualifiers = new TreeMap(); + qualifiers.put("type", "module"); + Optional hostArch = getEnvironmentVariable(goEnvironmentVariables, GO_HOST_ARCHITECTURE_ENV_NAME); - String hostOS = + Optional hostOS = getEnvironmentVariable(goEnvironmentVariables, GO_HOST_OPERATION_SYSTEM_ENV_NAME); - return new TreeMap<>(Map.of("type", "module", "goos", hostOS, "goarch", hostArch)); + if (hostArch.isPresent()) { + qualifiers.put("goarch", hostArch.get()); + } + if (hostOS.isPresent()) { + qualifiers.put("goos", hostOS.get()); + } + return qualifiers; } return new TreeMap<>(Map.of("type", "module")); } - private static String getEnvironmentVariable(String goEnvironmentVariables, String envName) { + private static Optional getEnvironmentVariable( + String goEnvironmentVariables, String envName) { int i = goEnvironmentVariables.indexOf(String.format("%s=", envName)); + if (i == -1) { + return Optional.empty(); + } int beginIndex = i + String.format("%s=", envName).length(); int endOfLineIndex = goEnvironmentVariables.substring(beginIndex).indexOf(System.lineSeparator()); - String envValue = goEnvironmentVariables.substring(beginIndex).substring(0, endOfLineIndex); - return envValue.replaceAll("\"", ""); + + String envValue; + if (endOfLineIndex == -1) { + envValue = goEnvironmentVariables.substring(beginIndex); + } else { + envValue = goEnvironmentVariables.substring(beginIndex).substring(0, endOfLineIndex); + } + + return Optional.of(envValue.replaceAll("\"", "")); } private String buildGoModulesDependencies(Path manifestPath) {