Linux.hx 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package runci;
  2. import runci.System.*;
  3. using StringTools;
  4. class Linux {
  5. static public var arch(get, null):Arch;
  6. static function get_arch() {
  7. if(arch == null)
  8. arch = switch commandResult('arch', []).stdout.replace('\n', '') {
  9. case 'arm64' | 'aarch64': Arm64;
  10. case _: Amd64;
  11. }
  12. return arch;
  13. }
  14. static public function isAptPackageInstalled(aptPackage:String):Bool {
  15. return commandSucceed("dpkg-query", ["-W", "-f='${Status}'", aptPackage]);
  16. }
  17. static inline function hasAptGet() {
  18. // CI always runs on ubuntu, otherwise check for apt-get
  19. return Config.isCi() || commandSucceed("type", ["apt-get"]);
  20. }
  21. static public function requireAptPackages(packages:Array<String>):Void {
  22. if (!hasAptGet()){
  23. infoMsg("System does not have apt-get installed.");
  24. return;
  25. }
  26. var notYetInstalled = [for (p in packages) if (!isAptPackageInstalled(p)) p];
  27. if (notYetInstalled.length > 0) {
  28. var aptCacheDir = Sys.getEnv("APT_CACHE_DIR");
  29. var baseCommand = if (aptCacheDir != null) {
  30. ["apt-get", "-o", 'dir::cache::archives=${aptCacheDir}', "install", "-qqy"];
  31. } else {
  32. ["apt-get", "install", "-qqy"];
  33. };
  34. runNetworkCommand("sudo", baseCommand.concat(notYetInstalled));
  35. }
  36. }
  37. }
  38. enum abstract Arch(Int) {
  39. final Arm64;
  40. final Amd64;
  41. }