lisa-on-cuda / lisa_on_cuda /utils /frontend_builder.py
alessandro trinca tornidor
feat: add support for compiling a custom frontend using pnpm and nodejs v18 from debian packages
c13c67e
raw
history blame
3.09 kB
import logging
import os
import subprocess
from pathlib import Path
from dotenv import load_dotenv
from lisa_on_cuda.utils import session_logger
load_dotenv()
LOGLEVEL = os.getenv('LOGLEVEL', 'INFO').upper()
session_logger.change_logging(LOGLEVEL)
root_folder = Path(globals().get("__file__", "./_")).absolute().parent.parent.parent
env_project_root_folder = Path(os.getenv("PROJECT_ROOT_FOLDER", root_folder))
env_input_css_path = Path(os.getenv("INPUT_CSS_PATH"))
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, capture_output: bool = True, text: bool = True, check: bool = True) -> None:
try:
output_content_home = subprocess.run(
commands_list,
capture_output=capture_output,
text=text,
check=check
)
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(
project_root_folder: str | Path,
input_css_path: str | Path,
output_dist_folder: Path = root_folder / "static" / "dist",
) -> None:
assert_envs([
str(project_root_folder),
str(input_css_path)
])
# install deps
os.chdir(Path(project_root_folder) / "static")
current_folder = os.getcwd()
logging.info(f"current_folder:{current_folder}, install pnpm...")
run_command(["npm", "install", "-g", "npm", "pnpm"])
logging.info(f"install pnpm dependencies...")
run_command(["pnpm", "install"])
# build frontend dist and assert for its correct build
output_css = str(output_dist_folder / "output.css")
output_index_html = str(output_dist_folder / "index.html")
output_dist_folder = str(output_dist_folder)
logging.info(f"pnpm: build '{output_dist_folder}'...")
run_command(["pnpm", "build"])
logging.info(f"pnpm: ls -l {output_index_html}:")
run_command(["ls", "-l", output_index_html])
cmd = ["pnpm", "tailwindcss", "-i", str(input_css_path), "-o", output_css]
logging.info(f"pnpm: {' '.join(cmd)}...")
run_command(["pnpm", "tailwindcss", "-i", str(input_css_path), "-o", output_css])
logging.info(f"pnpm: ls -l {output_css}:")
run_command(["ls", "-l", output_css])
logging.info(f"end!")
if __name__ == '__main__':
build_frontend(
project_root_folder=env_project_root_folder,
input_css_path=env_input_css_path
)