import logging import os import subprocess from pathlib import Path from lisa_on_cuda.utils import session_logger LOGLEVEL = os.getenv('LOGLEVEL', 'INFO').upper() session_logger.change_logging(LOGLEVEL) def assert_envs(envs_list): for current_env in envs_list: try: assert current_env is not None and current_env != "" except AssertionError as aex: logging.error(f"error on assertion for current_env: {current_env}.") raise aex def read_std_out_err(std_out_err, output_type: str, command: list): output = std_out_err.split("\n") logging.info(f"output type:{output_type} for command:{' '.join(command)}.") for line in iter(output): logging.info(f"output_content_home stdout:{line.strip()}.") logging.info("########") def run_command(commands_list: list) -> None: try: output_content_home = subprocess.run( commands_list, capture_output=True, text=True, check=True ) read_std_out_err(output_content_home.stdout, "stdout", commands_list) read_std_out_err(output_content_home.stderr, "stderr", commands_list) except Exception as ex: logging.error(f"ex:{ex}.") raise ex def build_frontend() -> None: home = os.getenv("HOME") root_folder = Path(globals().get("__file__", "./_")).absolute().parent.parent project_root_folder = Path(os.getenv("PROJECT_ROOT_FOLDER", root_folder)) nvm_url_base = os.getenv("NVM_URL_BASE") nvm_url_version = os.getenv("NVM_URL_VERSION") node_version = os.getenv("NODE_VERSION") assert_envs([ home, root_folder, project_root_folder, nvm_url_base, nvm_url_version, node_version ]) # compose nvm.sh url logging.info(f"NVM_URL_BASE:{nvm_url_base}.") logging.info(f"NVM_URL_VERSION:{nvm_url_version}.") nvm_url = nvm_url_base.format(nvm_url_version) logging.info(f"prepared nvm_url:{nvm_url}.") # download and install nodejs os.chdir(home) run_command(["curl", "-o", "install_nvm.sh", nvm_url]) run_command(["ls", "-l", f"{home}/install_nvm.sh"]) run_command(["bash", f"{home}/install_nvm.sh"]) run_command(["bash", "source", f"{home}/.bashrc"]) run_command(["nvm.sh", "install", node_version]) run_command(["npm", "install", "npm", "pnpm"]) # install deps os.chdir(Path(project_root_folder) / "static") run_command(["pnpm", "install"]) # build frontend dist and assert for its correct build run_command(["pnpm", "tailwindcss", "-i", "src/input.css", "-o", "dist/output.css"]) run_command(["pnpm", "build"]) run_command(["ls", "-l", "./dist"]) # uninstall node and nvm.sh nvm_dir = os.getenv("NVM_DIR") assert_envs([nvm_dir]) run_command(["rm", "-rf", f"{home}/install_nvm.sh", nvm_dir, f"{home}/.npm", f"{home}/.bower"]) if __name__ == '__main__': build_frontend()