Skip to content

Commit e2792dd

Browse files
committed
adding hash of archive + other minor changes
1 parent f96c258 commit e2792dd

6 files changed

Lines changed: 123 additions & 70 deletions

File tree

builder-tool/src/builderTool.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -124,10 +124,14 @@ def __init__(self):
124124
}
125125
} #type: dict[str, dict[str, BaseBuilder.RequireMode]]
126126

127+
self.debugLevel = LEVELS.INFO
128+
127129
if self.args.debug:
128-
Logger.setLevel('stdout', LEVELS.DEBUG)
130+
self.debugLevel = LEVELS.DEBUG
129131
elif self.args.deep_debug:
130-
Logger.setLevel('stdout', LEVELS.DEEP_DEBUG)
132+
self.debugLevel = LEVELS.DEEP_DEBUG
133+
134+
Logger.setLevel('stdout', self.debugLevel)
131135

132136

133137
Logger.debug("Using gamuLogger version : " + gamuLogger.__version__)
@@ -158,8 +162,15 @@ def addAndReplaceByPackageVersion(self, src, dest = None, versionString = "{vers
158162
file.write(content)
159163
return True
160164

161-
def runCommand(self, command, hideOutput = True) -> bool:
162-
"""Execute a command in the temporary directory"""
165+
def runCommand(self, command : str, hideOutput = True, debugArg = "", deepDebugArg : str = None) -> bool:
166+
"""
167+
Execute a command in the temporary directory\n
168+
Default value for deepDebugArg is the same as debugArg
169+
"""
170+
if self.debugLevel == LEVELS.DEBUG:
171+
command += debugArg
172+
elif self.debugLevel == LEVELS.DEEP_DEBUG:
173+
command += deepDebugArg if deepDebugArg is not None else debugArg
163174
Logger.debug(f'Executing command {command}\n working directory: {self.tempDir}')
164175
if hideOutput:
165176
stdoutFile, stdoutPath = mkstemp()

create-module/src/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
from .main import Archive
1+
from .createModule import Archive

create-module/src/__main__.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import argparse
2-
from .main import Archive
2+
from .createModule import Archive
33
from .customTypes import Version, ModuleTypes
44
from gamuLogger import Logger, error, info, critical, LEVELS
55

@@ -16,6 +16,7 @@ def createParser():
1616
parser.add_argument("module_type", help="The module type")
1717
parser.add_argument("module_description", help="The module description")
1818
parser.add_argument("module_author", help="The module author")
19+
parser.add_argument("--outDir", "-o", help="The output directory for the archive", default=".")
1920
parser.add_argument("--branch", help="The branch of the repository", default="main")
2021
parser.add_argument("--debug", "-d", help="Enable debug mode", action="store_true")
2122
return parser
@@ -24,24 +25,26 @@ def createParser():
2425

2526
info("Starting module creation")
2627

27-
try:
28-
parser = createParser()
29-
args = parser.parse_args()
30-
31-
if args.debug:
32-
Logger.setLevel("stdout", LEVELS.DEBUG)
3328

34-
module_version = Version.fromString(args.module_version)
35-
module_type = ModuleTypes.fromString(args.module_type)
29+
parser = createParser()
30+
args = parser.parse_args()
31+
32+
if args.debug:
33+
Logger.setLevel("stdout", LEVELS.DEBUG)
34+
35+
module_version = Version.fromString(args.module_version)
36+
module_type = ModuleTypes.fromString(args.module_type)
3637

37-
info(f"Creating archive for module {args.module_name} version {module_version}")
38+
info(f"Creating archive for module {args.module_name} version {module_version}")
39+
40+
archive = Archive(args.outDir, args.compiled_code_folder, args.module_name, module_version, module_type, args.module_description, args.module_author, args.branch)
3841

39-
archive = Archive(args.compiled_code_folder, args.module_name, module_version, module_type, args.module_description, args.module_author, args.branch)
42+
try:
4043
archive.create()
41-
4244
except Exception as e:
4345
critical(f"Error creating module: {str(e)}")
4446
exit(1)
45-
46-
info(f"Archive created: {archive}")
47-
exit(0)
47+
else:
48+
info(f"Archive created: {archive}")
49+
info(f"MD5: {archive.getMD5()}")
50+
exit(0)

create-module/src/createModule.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
2+
from zipfile import ZipFile
3+
import json
4+
from datetime import datetime
5+
import hashlib
6+
import os
7+
8+
from gamuLogger import Logger
9+
from .customTypes import Version, ModuleTypes, Step
10+
11+
from .utils import addFolderToZip
12+
13+
class Archive:
14+
def __init__(self,
15+
outDir : str,
16+
compiled_code_folder : str,
17+
module_name : str,
18+
module_version : Version,
19+
module_type : ModuleTypes,
20+
module_description : str,
21+
module_author : str,
22+
branch : str = "main"):
23+
self.compiled_code_folder = compiled_code_folder
24+
self.module_name = module_name
25+
self.module_version = module_version
26+
self.module_type = module_type
27+
self.module_description = module_description
28+
self.module_author = module_author
29+
self.branch = branch
30+
31+
self.archiveName = f'{outDir}/{self.module_name}-{str(self.module_version)}.gamod'
32+
33+
self.step = Step.INITIATED
34+
35+
def create(self):
36+
if self.step != Step.INITIATED:
37+
raise ValueError("Archive already created")
38+
39+
Logger.info(f"starting creation of archive {self.archiveName}")
40+
self.__checkFolderContent()
41+
self.zipFile = ZipFile(self.archiveName, 'w')
42+
self.__addCode()
43+
self.__createJson()
44+
Logger.info(f"Archive {self.archiveName} created")
45+
self.step = Step.BUILT
46+
47+
48+
def getMD5(self):
49+
if self.step != Step.BUILT:
50+
raise ValueError("Archive not created")
51+
md5 = hashlib.md5()
52+
with open(self.archiveName, "rb") as f:
53+
for chunk in iter(lambda: f.read(4096), b""):
54+
md5.update(chunk)
55+
return md5.hexdigest()
56+
57+
def __checkFolderContent(self):
58+
for requiredFile in ["server/main.js", "client/index.html"]:
59+
if requiredFile not in os.listdir(self.compiled_code_folder):
60+
raise FileNotFoundError(f"File {requiredFile} not found in {self.compiled_code_folder}")
61+
62+
def __addCode(self):
63+
Logger.debug(f"Adding code from {self.compiled_code_folder} to zip")
64+
addFolderToZip(self.zipFile, "build", self.compiled_code_folder)
65+
66+
def __createJson(self):
67+
Logger.debug(f"Creating json file for module {self.module_name} version {self.module_version}")
68+
module = {
69+
"name": self.module_name,
70+
"version": str(self.module_version),
71+
"type": str(self.module_type),
72+
"description": self.module_description,
73+
"author": self.module_author,
74+
"created_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
75+
"repository": f"https://github.com/GamuNetwork/{self.module_name}",
76+
"branch": self.branch
77+
}
78+
result = json.dumps(module, indent=4)
79+
self.zipFile.writestr('module.json', result)
80+
Logger.debug(f"Json file created:\n{result}")
81+
82+
def __str__(self):
83+
return self.archiveName

create-module/src/customTypes.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,9 @@ def fromString(type : str) -> 'ModuleTypes':
7979
elif type == "interface":
8080
return ModuleTypes.INTERFACE
8181
else:
82-
return ModuleTypes.OTHER
82+
return ModuleTypes.OTHER
83+
84+
class Step(Enum):
85+
INITIATED = 1
86+
BUILT = 2
87+

create-module/src/main.py

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)