@@ -48,23 +48,33 @@ def upload_to_s3(s3_client, local_path, s3_key):
4848
4949
5050def clone_and_tar (name , version , url , work_dir ):
51- """Clone repo and create tarball. Returns tarball path or None."""
51+ """Clone repo or download tarball and create tarball. Returns tarball path or None."""
5252 dir_name = f"{ name } _v{ version } _source_code"
5353 local_dir = os .path .join (work_dir , dir_name )
5454 tarball = f"{ local_dir } .tar.gz"
55+ url = url .strip ()
56+ is_tarball = url .endswith ((".tar.gz" , ".tar.xz" , ".tar.bz2" , ".tgz" ))
5557
5658 for attempt in range (MAX_RETRIES ):
5759 try :
5860 if not os .path .isdir (local_dir ):
59- subprocess .run (
60- ["git" , "clone" , url .strip (), local_dir ],
61- check = True ,
62- capture_output = True ,
63- )
61+ if is_tarball :
62+ downloaded = os .path .join (work_dir , os .path .basename (url ))
63+ subprocess .run (
64+ ["curl" , "-fsSL" , "-o" , downloaded , url ], check = True , capture_output = True
65+ )
66+ os .makedirs (local_dir )
67+ subprocess .run (
68+ ["tar" , "-xf" , downloaded , "-C" , local_dir , "--strip-components=1" ],
69+ check = True ,
70+ capture_output = True ,
71+ )
72+ else :
73+ subprocess .run (
74+ ["git" , "clone" , url , local_dir ], check = True , capture_output = True
75+ )
6476 subprocess .run (
65- ["tar" , "-czf" , tarball , "-C" , work_dir , dir_name ],
66- check = True ,
67- capture_output = True ,
77+ ["tar" , "-czf" , tarball , "-C" , work_dir , dir_name ], check = True , capture_output = True
6878 )
6979 return tarball
7080 except Exception as e :
0 commit comments