All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.technologybrewery.habushu.exec.Platform Maven / Gradle / Ivy

Go to download

Leverages Poetry and Pyenv to provide an automated, predictable order of execution of build commands that apply DevOps and configuration management best practices

There is a newer version: 2.17.0
Show newest version
package org.technologybrewery.habushu.exec;

import java.io.File;

/**
 * Largely pulled from the com.github.eirslett:frontend-maven-plugin and then
 * culled of any Node/front-end specific references. The visibility of this
 * class within the frontend-maven-plugin does not easily facilitate reuse in
 * other modules, so a pared-down version is maintained here.
 */
enum Architecture {
    x86, x64, ppc64le, s390x, arm64, armv7l;

    public static Architecture guess() {
	String arch = System.getProperty("os.arch");
	String version = System.getProperty("os.version");

	if (arch.equals("ppc64le")) {
	    return ppc64le;
	} else if (arch.equals("aarch64")) {
	    return arm64;
	} else if (arch.equals("s390x")) {
	    return s390x;
	} else if (arch.equals("arm") && version.contains("v7")) {
	    return armv7l;
	} else {
	    return arch.contains("64") ? x64 : x86;
	}
    }
}

enum OS {
    Windows, Mac, Linux, SunOS;

    public static OS guess() {
	final String osName = System.getProperty("os.name");
	return osName.contains("Windows") ? OS.Windows
		: osName.contains("Mac") ? OS.Mac : osName.contains("SunOS") ? OS.SunOS : OS.Linux;
    }

    public String getArchiveExtension() {
	if (this == OS.Windows) {
	    return "zip";
	} else {
	    return "tar.gz";
	}
    }

    public String getCodename() {
	if (this == OS.Mac) {
	    return "darwin";
	} else if (this == OS.Windows) {
	    return "win";
	} else if (this == OS.SunOS) {
	    return "sunos";
	} else {
	    return "linux";
	}
    }
}

public class Platform {
    private final OS os;
    private final Architecture architecture;
    private final String classifier;

    public Platform(OS os, Architecture architecture) {
	this(os, architecture, null);
    }

    public Platform(OS os, Architecture architecture, String classifier) {
	this.os = os;
	this.architecture = architecture;
	this.classifier = classifier;
    }

    public static Platform guess() {
	OS os = OS.guess();
	Architecture architecture = Architecture.guess();
	// The default libc is glibc, but Alpine uses musl. When not default, the nodejs
	// download
	// (and path within it) needs a classifier in the suffix (ex. -musl).
	// We know Alpine is in use if the release file exists, and this is the simplest
	// check.
	if (os == OS.Linux && new File("/etc/alpine-release").exists()) {
	    return new Platform(os, architecture, "musl");
	}
	return new Platform(os, architecture);
    }

    public String getArchiveExtension() {
	return os.getArchiveExtension();
    }

    public String getCodename() {
	return os.getCodename();
    }

    public boolean isWindows() {
	return os == OS.Windows;
    }

    public boolean isMac() {
	return os == OS.Mac;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy