4040import java .util .List ;
4141import java .util .Map ;
4242import java .util .Objects ;
43+ import java .util .Optional ;
4344import java .util .TreeMap ;
4445import java .util .logging .Logger ;
4546import java .util .regex .Pattern ;
5253public final class GoModulesProvider extends Provider {
5354
5455 public static final String PROP_EXHORT_GO_MVS_LOGIC_ENABLED = "EXHORT_GO_MVS_LOGIC_ENABLED" ;
56+ private static final String GO_BINARY = "go" ;
5557 private static final Logger log = LoggersFactory .getLogger (GoModulesProvider .class .getName ());
5658 private static final String GO_HOST_ARCHITECTURE_ENV_NAME = "GOHOSTARCH" ;
5759 private static final String GO_HOST_OPERATION_SYSTEM_ENV_NAME = "GOHOSTOS" ;
@@ -67,8 +69,8 @@ public String getMainModuleVersion() {
6769
6870 public GoModulesProvider (Path manifest ) {
6971 super (Type .GOLANG , manifest );
70- this .goExecutable = Operations .getExecutable ("go" , "version" );
71- this .goEnvironmentVariableForPurl = getQualifiers (true );
72+ this .goExecutable = Operations .getExecutable (GO_BINARY , "version" );
73+ this .goEnvironmentVariableForPurl = getQualifiers ();
7274 this .mainModuleVersion = getDefaultMainModuleVersion ();
7375 }
7476
@@ -320,9 +322,9 @@ private Sbom buildSbomFromGraph(
320322
321323 private Map <String , List <String >> getFinalPackagesVersionsForModule (
322324 Map <String , List <String >> edges , Path manifestPath ) {
323- Operations .runProcessGetOutput (manifestPath .getParent (), "go" , "mod" , "download" );
325+ Operations .runProcessGetOutput (manifestPath .getParent (), GO_BINARY , "mod" , "download" );
324326 String finalVersionsForAllModules =
325- Operations .runProcessGetOutput (manifestPath .getParent (), "go" , "list" , "-m" , "all" );
327+ Operations .runProcessGetOutput (manifestPath .getParent (), GO_BINARY , "list" , "-m" , "all" );
326328 Map <String , String > finalModulesVersions =
327329 Arrays .stream (finalVersionsForAllModules .split (System .lineSeparator ()))
328330 .filter (string -> string .trim ().split (" " ).length == 2 )
@@ -378,26 +380,32 @@ private static List<String> collectAllDirectDependencies(List<String> targetLine
378380 .collect (Collectors .toList ());
379381 }
380382
381- private TreeMap <String , String > getQualifiers (boolean includeOsAndArch ) {
382- if ( includeOsAndArch ) {
383- String goEnvironmentVariables = Operations . runProcessGetOutput ( null , goExecutable , "env" );
384- String hostArch =
385- getEnvironmentVariable ( goEnvironmentVariables , GO_HOST_ARCHITECTURE_ENV_NAME );
386- String hostOS =
387- getEnvironmentVariable ( goEnvironmentVariables , GO_HOST_OPERATION_SYSTEM_ENV_NAME );
388- return new TreeMap <>( Map . of ( "type" , "module" , " goos" , hostOS , "goarch" , hostArch ));
383+ private TreeMap <String , String > getQualifiers () {
384+ String goEnvironmentVariables = Operations . runProcessGetOutput ( null , goExecutable , "env" );
385+ var hostArch = getEnvironmentVariable ( goEnvironmentVariables , GO_HOST_ARCHITECTURE_ENV_NAME );
386+ var hostOS = getEnvironmentVariable ( goEnvironmentVariables , GO_HOST_OPERATION_SYSTEM_ENV_NAME );
387+ var qualifiers = new TreeMap < String , String >( );
388+ qualifiers . put ( "type" , "module" );
389+ if ( hostOS . isPresent ()) {
390+ qualifiers . put ( " goos" , hostOS . get ( ));
389391 }
390-
391- return new TreeMap <>(Map .of ("type" , "module" ));
392+ if (hostArch .isPresent ()) {
393+ qualifiers .put ("goarch" , hostArch .get ());
394+ }
395+ return qualifiers ;
392396 }
393397
394- private static String getEnvironmentVariable (String goEnvironmentVariables , String envName ) {
398+ private static Optional <String > getEnvironmentVariable (
399+ String goEnvironmentVariables , String envName ) {
395400 int i = goEnvironmentVariables .indexOf (String .format ("%s=" , envName ));
401+ if (i == -1 ) {
402+ return Optional .empty ();
403+ }
396404 int beginIndex = i + String .format ("%s=" , envName ).length ();
397405 int endOfLineIndex =
398406 goEnvironmentVariables .substring (beginIndex ).indexOf (System .lineSeparator ());
399407 String envValue = goEnvironmentVariables .substring (beginIndex ).substring (0 , endOfLineIndex );
400- return envValue .replaceAll ("\" " , "" );
408+ return Optional . of ( envValue .replaceAll ("\" " , "" ) );
401409 }
402410
403411 private String buildGoModulesDependencies (Path manifestPath ) {
0 commit comments