old_console/cicd/scripts/build.py
2024-11-02 14:12:45 +03:00

98 lines
3.2 KiB
Python

#! /usr/bin/python3
import os
import argparse
import subprocess
import re
import shutil
from pathlib import Path
from distutils.dir_util import copy_tree
import fileinput
from dotenv import dotenv_values
def parse_arguments() -> argparse.Namespace:
parser = argparse.ArgumentParser()
parser.add_argument("-n", "--name",
required=False,
type=str,
help="Internal repository part to be built")
parser.add_argument("-v", "--version",
required=True,
type=str,
help="Repository version")
return parser.parse_args()
def main() -> None:
args = parse_arguments()
if args.name is None or args.name == 'amccore':
front_path = "frontend"
back_path = "console"
footer_path = f"{front_path}/src/components/Layout/components/Footer"
console_base_path = "console/settings/base.py"
# PUBLIC_URL for react app
react_env = dotenv_values('deb/react.env')
os.environ['PUBLIC_URL'] = react_env['PUBLIC_URL']
# version
version_found = False
# change base.py version
with fileinput.input(files=console_base_path, inplace=True) as fileLines:
for line in fileLines:
if re.search('SITE_INFO = {', line) is not None:
version_found = True
if version_found and re.search(' *}', line) is not None:
version_found = False
if version_found:
res = re.sub(r"(.*version': )[^,]*", rf"\g<1>'{args.version}'", line)
else:
res = line
if res is not None:
print(res, flush=True, end="")
# check environment.js for localhost
with open(f'{front_path}/src/enviroments/enviroments.js', 'r') as file:
for line in file:
if re.match(r'.*localhost: *.*localhost.*', line) is not None:
print('Error: localhost in enviroments.js')
exit(1)
# -----------------------------build React-------------------------------------
res = subprocess.Popen(['npm', 'ci'], cwd=front_path)#, env=react_env)
res.wait()
if res.returncode != 0:
print("npm ci failed", flush=True)
exit(1)
else:
print("npm ci successed", flush=True)
res = subprocess.Popen(['npm', 'run', 'build'], cwd=front_path)#, env=react_env)
res.wait()
if res.returncode != 0:
print("'npm run build' failed", flush=True)
exit(1)
else:
print("'npm run build' successed", flush=True)
shutil.rmtree(f'{front_path}/node_modules')
shutil.move(f'{front_path}/build/index.html', f'{back_path}/templates/console/index.html')
if os.path.exists(f'{back_path}/static/react'):
shutil.rmtree(f'{back_path}/static/react')
Path(f'{back_path}/static/react').mkdir(parents=True, exist_ok=True)
copy_tree(f'{front_path}/build/', f'{back_path}/static/react/')
if __name__ == "__main__":
main()