import sys
import subprocess
import shutil
import tarfile
import os
def extract(package_path, dest_path, package_name):
try:
with tarfile.open(package_path, 'r:gz') as tar:
tar.extractall(path=dest_path)
except tarfile.TarError as e:
print(f'Error extracting files: {e}')
dest_package_path = os.path.join(dest_path, package_name)
if (os.path.exists(dest_package_path)):
shutil.rmtree(dest_package_path)
os.rename(os.path.join(dest_path, 'package'), dest_package_path)
def copy_dir(source_path, dest_path):
try:
run_cmd(['rm', '-rf', dest_path])
shutil.copytree(source_path, dest_path, dirs_exist_ok=True, symlinks=True)
except Exception as err:
raise Exception(err.decode())
def run_cmd(cmd, execution_ath=None):
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=execution_ath)
stdout, stderr = proc.communicate(timeout=300)
if proc.returncode != 0:
raise Exception(stderr.decode())
def run_build(execution_path):
cmd = ["npm", "run", "build"]
run_cmd(cmd, execution_path)
def run_pack(execution_path):
cmd = ["npm", "pack"]
run_cmd(cmd, execution_path)
def main(args):
source_path = args[0]
tsc_package_path = args[1]
dest_and_exec_path = args[2]
copy_dir(source_path, dest_and_exec_path)
node_modules_path = os.path.join(dest_and_exec_path, "node_modules")
extract(tsc_package_path, node_modules_path, "typescript")
run_build(dest_and_exec_path)
run_pack(dest_and_exec_path)
if __name__ == '__main__':
main(sys.argv[1:])