jolt 0.9.172__py3-none-any.whl → 0.9.435__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. jolt/__init__.py +80 -7
  2. jolt/__main__.py +9 -1
  3. jolt/bin/fstree-darwin-x86_64 +0 -0
  4. jolt/bin/fstree-linux-x86_64 +0 -0
  5. jolt/cache.py +596 -252
  6. jolt/chroot.py +36 -11
  7. jolt/cli.py +143 -130
  8. jolt/common_pb2.py +45 -45
  9. jolt/config.py +76 -40
  10. jolt/error.py +19 -4
  11. jolt/filesystem.py +2 -6
  12. jolt/graph.py +400 -82
  13. jolt/influence.py +110 -3
  14. jolt/loader.py +338 -174
  15. jolt/log.py +127 -31
  16. jolt/manifest.py +13 -46
  17. jolt/options.py +35 -11
  18. jolt/pkgs/abseil.py +42 -0
  19. jolt/pkgs/asio.py +25 -0
  20. jolt/pkgs/autoconf.py +41 -0
  21. jolt/pkgs/automake.py +41 -0
  22. jolt/pkgs/b2.py +31 -0
  23. jolt/pkgs/boost.py +111 -0
  24. jolt/pkgs/boringssl.py +32 -0
  25. jolt/pkgs/busybox.py +39 -0
  26. jolt/pkgs/bzip2.py +43 -0
  27. jolt/pkgs/cares.py +29 -0
  28. jolt/pkgs/catch2.py +36 -0
  29. jolt/pkgs/cbindgen.py +17 -0
  30. jolt/pkgs/cista.py +19 -0
  31. jolt/pkgs/clang.py +44 -0
  32. jolt/pkgs/cli11.py +24 -0
  33. jolt/pkgs/cmake.py +48 -0
  34. jolt/pkgs/cpython.py +196 -0
  35. jolt/pkgs/crun.py +29 -0
  36. jolt/pkgs/curl.py +38 -0
  37. jolt/pkgs/dbus.py +18 -0
  38. jolt/pkgs/double_conversion.py +24 -0
  39. jolt/pkgs/fastfloat.py +21 -0
  40. jolt/pkgs/ffmpeg.py +28 -0
  41. jolt/pkgs/flatbuffers.py +29 -0
  42. jolt/pkgs/fmt.py +27 -0
  43. jolt/pkgs/fstree.py +20 -0
  44. jolt/pkgs/gflags.py +18 -0
  45. jolt/pkgs/glib.py +18 -0
  46. jolt/pkgs/glog.py +25 -0
  47. jolt/pkgs/glslang.py +21 -0
  48. jolt/pkgs/golang.py +16 -11
  49. jolt/pkgs/googlebenchmark.py +18 -0
  50. jolt/pkgs/googletest.py +46 -0
  51. jolt/pkgs/gperf.py +15 -0
  52. jolt/pkgs/grpc.py +73 -0
  53. jolt/pkgs/hdf5.py +19 -0
  54. jolt/pkgs/help2man.py +14 -0
  55. jolt/pkgs/inja.py +28 -0
  56. jolt/pkgs/jsoncpp.py +31 -0
  57. jolt/pkgs/libarchive.py +43 -0
  58. jolt/pkgs/libcap.py +44 -0
  59. jolt/pkgs/libdrm.py +44 -0
  60. jolt/pkgs/libedit.py +42 -0
  61. jolt/pkgs/libevent.py +31 -0
  62. jolt/pkgs/libexpat.py +27 -0
  63. jolt/pkgs/libfastjson.py +21 -0
  64. jolt/pkgs/libffi.py +16 -0
  65. jolt/pkgs/libglvnd.py +30 -0
  66. jolt/pkgs/libogg.py +28 -0
  67. jolt/pkgs/libpciaccess.py +18 -0
  68. jolt/pkgs/libseccomp.py +21 -0
  69. jolt/pkgs/libtirpc.py +24 -0
  70. jolt/pkgs/libtool.py +42 -0
  71. jolt/pkgs/libunwind.py +35 -0
  72. jolt/pkgs/libva.py +18 -0
  73. jolt/pkgs/libvorbis.py +33 -0
  74. jolt/pkgs/libxml2.py +35 -0
  75. jolt/pkgs/libxslt.py +17 -0
  76. jolt/pkgs/libyajl.py +16 -0
  77. jolt/pkgs/llvm.py +81 -0
  78. jolt/pkgs/lua.py +54 -0
  79. jolt/pkgs/lz4.py +26 -0
  80. jolt/pkgs/m4.py +14 -0
  81. jolt/pkgs/make.py +17 -0
  82. jolt/pkgs/mesa.py +81 -0
  83. jolt/pkgs/meson.py +17 -0
  84. jolt/pkgs/mstch.py +28 -0
  85. jolt/pkgs/mysql.py +60 -0
  86. jolt/pkgs/nasm.py +49 -0
  87. jolt/pkgs/ncurses.py +30 -0
  88. jolt/pkgs/ng_log.py +25 -0
  89. jolt/pkgs/ninja.py +45 -0
  90. jolt/pkgs/nlohmann_json.py +25 -0
  91. jolt/pkgs/nodejs.py +19 -11
  92. jolt/pkgs/opencv.py +24 -0
  93. jolt/pkgs/openjdk.py +26 -0
  94. jolt/pkgs/openssl.py +103 -0
  95. jolt/pkgs/paho.py +76 -0
  96. jolt/pkgs/patchelf.py +16 -0
  97. jolt/pkgs/perl.py +42 -0
  98. jolt/pkgs/pkgconfig.py +64 -0
  99. jolt/pkgs/poco.py +39 -0
  100. jolt/pkgs/protobuf.py +77 -0
  101. jolt/pkgs/pugixml.py +27 -0
  102. jolt/pkgs/python.py +19 -0
  103. jolt/pkgs/qt.py +35 -0
  104. jolt/pkgs/rapidjson.py +26 -0
  105. jolt/pkgs/rapidyaml.py +28 -0
  106. jolt/pkgs/re2.py +30 -0
  107. jolt/pkgs/re2c.py +17 -0
  108. jolt/pkgs/readline.py +15 -0
  109. jolt/pkgs/rust.py +41 -0
  110. jolt/pkgs/sdl.py +28 -0
  111. jolt/pkgs/simdjson.py +27 -0
  112. jolt/pkgs/soci.py +46 -0
  113. jolt/pkgs/spdlog.py +29 -0
  114. jolt/pkgs/spirv_llvm.py +21 -0
  115. jolt/pkgs/spirv_tools.py +24 -0
  116. jolt/pkgs/sqlite.py +83 -0
  117. jolt/pkgs/ssl.py +12 -0
  118. jolt/pkgs/texinfo.py +15 -0
  119. jolt/pkgs/tomlplusplus.py +22 -0
  120. jolt/pkgs/wayland.py +26 -0
  121. jolt/pkgs/x11.py +58 -0
  122. jolt/pkgs/xerces_c.py +20 -0
  123. jolt/pkgs/xorg.py +360 -0
  124. jolt/pkgs/xz.py +29 -0
  125. jolt/pkgs/yamlcpp.py +30 -0
  126. jolt/pkgs/zeromq.py +47 -0
  127. jolt/pkgs/zlib.py +87 -0
  128. jolt/pkgs/zstd.py +33 -0
  129. jolt/plugins/alias.py +3 -0
  130. jolt/plugins/allure.py +2 -2
  131. jolt/plugins/autotools.py +66 -0
  132. jolt/plugins/cache.py +1 -1
  133. jolt/plugins/cmake.py +74 -6
  134. jolt/plugins/conan.py +238 -0
  135. jolt/plugins/cxxinfo.py +7 -0
  136. jolt/plugins/docker.py +76 -19
  137. jolt/plugins/email.xslt +141 -118
  138. jolt/plugins/environ.py +11 -0
  139. jolt/plugins/fetch.py +141 -0
  140. jolt/plugins/gdb.py +33 -14
  141. jolt/plugins/gerrit.py +0 -13
  142. jolt/plugins/git.py +248 -66
  143. jolt/plugins/googletest.py +1 -1
  144. jolt/plugins/http.py +1 -1
  145. jolt/plugins/libtool.py +63 -0
  146. jolt/plugins/linux.py +990 -0
  147. jolt/plugins/logstash.py +4 -4
  148. jolt/plugins/meson.py +61 -0
  149. jolt/plugins/ninja-compdb.py +96 -28
  150. jolt/plugins/ninja.py +424 -150
  151. jolt/plugins/paths.py +11 -1
  152. jolt/plugins/pkgconfig.py +219 -0
  153. jolt/plugins/podman.py +131 -87
  154. jolt/plugins/python.py +137 -0
  155. jolt/plugins/remote_execution/administration_pb2.py +27 -19
  156. jolt/plugins/remote_execution/log_pb2.py +12 -12
  157. jolt/plugins/remote_execution/scheduler_pb2.py +23 -23
  158. jolt/plugins/remote_execution/worker_pb2.py +19 -19
  159. jolt/plugins/report.py +7 -2
  160. jolt/plugins/rust.py +25 -0
  161. jolt/plugins/scheduler.py +135 -86
  162. jolt/plugins/selfdeploy/setup.py +6 -6
  163. jolt/plugins/selfdeploy.py +49 -31
  164. jolt/plugins/strings.py +35 -22
  165. jolt/plugins/symlinks.py +11 -4
  166. jolt/plugins/telemetry.py +1 -2
  167. jolt/plugins/timeline.py +13 -3
  168. jolt/scheduler.py +467 -165
  169. jolt/tasks.py +427 -111
  170. jolt/templates/timeline.html.template +44 -47
  171. jolt/timer.py +22 -0
  172. jolt/tools.py +527 -188
  173. jolt/utils.py +183 -3
  174. jolt/version.py +1 -1
  175. jolt/xmldom.py +12 -2
  176. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/METADATA +97 -41
  177. jolt-0.9.435.dist-info/RECORD +207 -0
  178. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/WHEEL +1 -1
  179. jolt/plugins/amqp.py +0 -855
  180. jolt/plugins/debian.py +0 -338
  181. jolt/plugins/repo.py +0 -253
  182. jolt/plugins/snap.py +0 -122
  183. jolt-0.9.172.dist-info/RECORD +0 -92
  184. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/entry_points.txt +0 -0
  185. {jolt-0.9.172.dist-info → jolt-0.9.435.dist-info}/top_level.txt +0 -0
jolt/chroot.py CHANGED
@@ -20,27 +20,31 @@ MS_BIND = 4096
20
20
  MS_REC = 16384
21
21
 
22
22
 
23
- def mount_bind(src, dst, ro=False):
23
+ def prepare_bind(root, src):
24
24
  src = os.path.normpath(src)
25
- dst = os.path.normpath(dst)
25
+ dst = os.path.normpath(os.path.join(root, src.lstrip("/")))
26
26
 
27
27
  if os.path.isdir(src):
28
28
  os.makedirs(dst, exist_ok=True)
29
29
  else:
30
30
  os.makedirs(os.path.dirname(dst), exist_ok=True)
31
- if not os.path.exists(dst):
32
- with open(dst, "a"):
33
- pass
31
+ with open(dst, "w"):
32
+ pass
33
+
34
+
35
+ def mount_bind(src, dst, ro=False):
36
+ src = os.path.normpath(src)
37
+ dst = os.path.normpath(dst)
34
38
 
35
39
  assert libc.mount(
36
40
  c_char_p(src.encode("utf-8")),
37
41
  c_char_p(dst.encode("utf-8")),
38
42
  None,
39
43
  MS_BIND | MS_REC | (MS_RDONLY if ro else 0),
40
- None) == 0
44
+ None) == 0, f"Failed to bind mount {src}"
41
45
 
42
46
 
43
- def mount_overlay(src, dst, temp):
47
+ def mount_overlay(src, binds, dst, temp):
44
48
  src = os.path.normpath(src)
45
49
  dst = os.path.normpath(dst)
46
50
 
@@ -54,7 +58,7 @@ def mount_overlay(src, dst, temp):
54
58
  c_char_p(dst.encode("utf-8")),
55
59
  c_char_p("overlay".encode("utf-8")),
56
60
  0,
57
- f"lowerdir={src},upperdir={upper},workdir={work}".encode("utf-8")) == 0
61
+ f"lowerdir={src}:{binds},upperdir={upper},workdir={work}".encode("utf-8")) == 0
58
62
 
59
63
 
60
64
  def mount_tmpfs(path):
@@ -71,11 +75,16 @@ def main():
71
75
  description='Runs a command in a chroot using linux namespaces')
72
76
  parser.add_argument('command', nargs='+')
73
77
  parser.add_argument('-b', '--bind', nargs="*")
78
+ parser.add_argument('-t', '--temp', required=True)
74
79
  parser.add_argument('-c', '--chroot', required=True)
75
80
  parser.add_argument('-d', '--chdir')
76
81
  parser.add_argument('--shell', default="True")
77
82
  args = parser.parse_args()
78
83
 
84
+ # Prepare bind mount targets outside userns
85
+ for path in args.bind or []:
86
+ prepare_bind(args.temp, path)
87
+
79
88
  cwd = os.getcwd()
80
89
  gid = os.getegid()
81
90
  uid = os.geteuid()
@@ -83,8 +92,9 @@ def main():
83
92
  uidmap = [uid, uid, 1]
84
93
  gidmap = [str(i) for i in gidmap]
85
94
  uidmap = [str(i) for i in uidmap]
86
- newgidmap = "/usr/bin/newgidmap"
87
- newuidmap = "/usr/bin/newuidmap"
95
+
96
+ newgidmap = shutil.which("newgidmap") or shutil.which("/usr/bin/newgidmap")
97
+ newuidmap = shutil.which("newuidmap") or shutil.which("/usr/bin/newuidmap")
88
98
 
89
99
  sem = multiprocessing.Semaphore(0)
90
100
  parent = os.getpid()
@@ -106,7 +116,7 @@ def main():
106
116
  assert status == 0, f"Failed to map GIDs: newgidmap exit status: {status}"
107
117
 
108
118
  mount_tmpfs("/mnt")
109
- if not mount_overlay(args.chroot, "/mnt", "/mnt"):
119
+ if not mount_overlay(args.chroot, args.temp, "/mnt", "/mnt"):
110
120
  mount_bind(args.chroot, "/mnt", True)
111
121
  mount_bind("/proc", "/mnt/proc", True)
112
122
 
@@ -116,6 +126,21 @@ def main():
116
126
  os.chroot("/mnt")
117
127
  os.chdir(args.chdir or cwd)
118
128
 
129
+ # Adjust PATH to include standard paths, if missing
130
+ path = os.environ.get("PATH", None)
131
+ if path is None:
132
+ path = "/usr/local/bin:/usr/bin:/bin"
133
+ else:
134
+ path = path.split(os.pathsep)
135
+ if "/usr/local/bin" not in path:
136
+ path.append("/usr/local/bin")
137
+ if "/usr/bin" not in path:
138
+ path.append("/usr/bin")
139
+ if "/bin" not in path:
140
+ path.append("/bin")
141
+ path = os.pathsep.join(path)
142
+ os.environ["PATH"] = path
143
+
119
144
  if args.shell in ["True", "true"]:
120
145
  os.execve("/bin/sh", ["sh", "-c", " ".join(args.command)], os.environ)
121
146
  else: