mirror of
https://github.com/Lore09/Tesi-Magistrale.git
synced 2025-12-19 04:14:35 +00:00
WASM build with docker container
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
REGISTRY_URL=
|
REGISTRY_URL=
|
||||||
REGISTRY_USER=
|
REGISTRY_USER=
|
||||||
REGISTRY_PASSWORD=
|
REGISTRY_PASSWORD=
|
||||||
|
PARALLEL_BUILD=
|
||||||
10
.gitignore
vendored
10
.gitignore
vendored
@@ -1,3 +1,7 @@
|
|||||||
build/*
|
# Python
|
||||||
__pycache__/
|
**/__pycache__/
|
||||||
.venv
|
.venv
|
||||||
|
|
||||||
|
# Environment
|
||||||
|
.env
|
||||||
|
.vscode
|
||||||
@@ -17,7 +17,7 @@ def main():
|
|||||||
parser_deploy = subparsers.add_parser("deploy", help="Deploy WASM components")
|
parser_deploy = subparsers.add_parser("deploy", help="Deploy WASM components")
|
||||||
parser_deploy.add_argument("dir", type=str, help="Project directory")
|
parser_deploy.add_argument("dir", type=str, help="Project directory")
|
||||||
|
|
||||||
parser_all = subparsers.add_parser("crazy", help="Everything above")
|
parser_all = subparsers.add_parser("brush", help="Everything above")
|
||||||
parser_all.add_argument("dir", type=str, help="Project directory")
|
parser_all.add_argument("dir", type=str, help="Project directory")
|
||||||
|
|
||||||
# Parsing degli argomenti
|
# Parsing degli argomenti
|
||||||
@@ -33,10 +33,8 @@ def main():
|
|||||||
pelato.build(args.dir)
|
pelato.build(args.dir)
|
||||||
elif args.command == "deploy":
|
elif args.command == "deploy":
|
||||||
pelato.deploy(args.dir)
|
pelato.deploy(args.dir)
|
||||||
elif args.command == "crazy":
|
elif args.command == "brush":
|
||||||
pelato.generate(args.dir)
|
pelato.all(args.dir)
|
||||||
pelato.build(args.dir)
|
|
||||||
pelato.deploy(args.dir)
|
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ from dotenv import load_dotenv
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
import src.code_generator.generator as code_generator
|
import src.code_generator.generator as code_generator
|
||||||
|
import src.wasm_builder.build as wasm_builder
|
||||||
|
|
||||||
class Pelato:
|
class Pelato:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -14,12 +15,13 @@ class Pelato:
|
|||||||
self.registry_url = os.getenv('REGISTRY_URL')
|
self.registry_url = os.getenv('REGISTRY_URL')
|
||||||
self.reg_user = os.getenv('REGISTRY_USER')
|
self.reg_user = os.getenv('REGISTRY_USER')
|
||||||
self.reg_pass = os.getenv('REGISTRY_PASSWORD')
|
self.reg_pass = os.getenv('REGISTRY_PASSWORD')
|
||||||
|
self.detached = os.getenv('PARALLEL_BUILD')
|
||||||
|
|
||||||
def generate(self, project_dir):
|
def generate(self, project_dir):
|
||||||
code_generator.generate(project_dir, self.registry_url)
|
code_generator.generate(project_dir, self.registry_url)
|
||||||
|
|
||||||
def build(self, project_dir):
|
def build(self, project_dir):
|
||||||
print(f"Building WASM component for project {project_dir}")
|
wasm_builder.build_project(project_dir, self.reg_user, self.reg_pass, self.detached)
|
||||||
|
|
||||||
def deploy(self, project_dir):
|
def deploy(self, project_dir):
|
||||||
print(f"Deploying WASM components for project {project_dir}")
|
print(f"Deploying WASM components for project {project_dir}")
|
||||||
|
|||||||
65
src/wasm_builder/build.py
Normal file
65
src/wasm_builder/build.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
import docker
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import yaml
|
||||||
|
|
||||||
|
def build_project(project_dir, reg_user, reg_pass, detached):
|
||||||
|
|
||||||
|
# Check if the project directory is valid
|
||||||
|
if not os.path.exists(f"{project_dir}/gen"):
|
||||||
|
logging.error(f"Project directory is not valid")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Docker client
|
||||||
|
client = docker.from_env()
|
||||||
|
|
||||||
|
# Build the images for the project if they don't exist
|
||||||
|
try:
|
||||||
|
client.images.get("wash-build-image:latest")
|
||||||
|
except docker.errors.ImageNotFound:
|
||||||
|
client.images.build(
|
||||||
|
path="src/wasm_builder/docker",
|
||||||
|
dockerfile="build.Dockerfile",
|
||||||
|
tag="wash-build-image:latest"
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
for task in os.listdir(f"{project_dir}/gen"):
|
||||||
|
__build_wasm(f"{project_dir}/gen/{task}", client, reg_user, reg_pass, detached)
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Error building project: {e}")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("Project built successfully")
|
||||||
|
|
||||||
|
def __build_wasm(task_dir, client, reg_user, reg_pass, detached):
|
||||||
|
|
||||||
|
wadm = __parse_yaml(f"{task_dir}/wadm.yaml")
|
||||||
|
|
||||||
|
path = os.path.abspath(task_dir)
|
||||||
|
|
||||||
|
oci_url = wadm['spec']['components'][0]['properties']['image']
|
||||||
|
|
||||||
|
# Build the wasm module
|
||||||
|
print(f" - Building WASM module {oci_url}")
|
||||||
|
container = client.containers.run(
|
||||||
|
"wash-build-image:latest",
|
||||||
|
environment=[f'REGISTRY={oci_url}',
|
||||||
|
f'WASH_REG_USER={reg_user}',
|
||||||
|
f'WASH_REG_PASSWORD={reg_pass}'],
|
||||||
|
volumes={path: {'bind': '/app', 'mode': 'rw'}},
|
||||||
|
remove=True,
|
||||||
|
detach=True
|
||||||
|
)
|
||||||
|
|
||||||
|
if detached == 'False':
|
||||||
|
container.wait()
|
||||||
|
|
||||||
|
|
||||||
|
def __parse_yaml(yaml_file):
|
||||||
|
with open(yaml_file, 'r') as stream:
|
||||||
|
try:
|
||||||
|
return yaml.safe_load(stream)
|
||||||
|
except yaml.YAMLError as exc:
|
||||||
|
print(exc)
|
||||||
|
return None
|
||||||
Reference in New Issue
Block a user