Files
braf/make/__main__.py

129 lines
4.1 KiB
Python

__version__ = "2.00"
import sys
from format import array_to_string, format_objects_to_markdown, read_last_lines
from terminal import print_error, print_green, print_yellow
if sys.version_info[0] == 2:
print("Python 3 is required.")
sys.exit(1)
import os
import os.path
import subprocess
from pathlib import Path
import requests
from obsfuschatedList import obfuschatedList
def Fract_Sec(s):
temp = float()
temp = float(s) / (60*60*24)
d = int(temp)
temp = (temp - d) * 24
h = int(temp)
temp = (temp - h) * 60
m = int(temp)
temp = (temp - m) * 60
sec = temp
return d,h,m,sec
#endef Fract_Sec
failedBuilds = []
def pack_directory(directory):
output_dir = os.getenv("OUTPUT_DIR")
if not output_dir:
print_error("OUTPUT_DIR not set")
sys.exit(1)
absolute_output_dir = os.path.abspath(output_dir)
if not os.path.exists(absolute_output_dir):
os.makedirs(absolute_output_dir)
try:
absolute_path = os.path.abspath("P:/braf/" + directory)
print("Packing Directory {}".format(absolute_path))
print("Target Directory {}".format(absolute_output_dir))
cmd = ["pboproject","-P", absolute_path, "+M={}".format(absolute_output_dir)]
if directory in obfuschatedList:
cmd.append("+O")
else:
cmd.append("-O")
returnOutput = subprocess.call(cmd)
print("Builded {}".format(directory))
if returnOutput == 0:
print_green("Addon {} successfully built/signed.".format(directory))
else:
print_error("Addon {} not successfully built/signed".format(directory))
temp_dir = r'P:/temp'
if os.path.exists(temp_dir):
errorLog = read_last_lines(os.path.join(temp_dir,directory+".packing.log"), 10)
if errorLog is not None:
print_yellow("The last 10 lines of the log are:\n {}".format(errorLog))
else:
print_error("The log could not be found.")
failedBuilds.append({"directory": directory, "errorLog": [errorLog]})
else:
print_error("The temp folder could not be found.")
failedBuilds.append({"directory": directory, "errorLog": ["The log could not be found."]})
print ("Resuming build...")
except subprocess.CalledProcessError as e:
print(f"Error running command in {directory}: {e}")
def main():
if len(sys.argv) < 2:
print_error("No directories provided!")
sys.exit(1)
if len(sys.argv) == 2 and " " in sys.argv[1]:
directories = sys.argv[1].split()
else:
directories = sys.argv[1:]
for directory in directories:
path = Path(directory)
if path.is_dir():
pack_directory(directory)
else:
print_error(f"{directory} is not a valid directory path")
sys.exit(1)
print_yellow("There were {} failed builds".format(len(failedBuilds)))
discord_webhook = os.getenv("DISCORD_WEBHOOK")
if len(failedBuilds) > 0:
print_error("There were {} failed builds:\n {}".format(len(failedBuilds), (failedBuilds)))
if discord_webhook != "":
requests.post(discord_webhook, json={
"content": "**There were {} failed builds:**\n {}\n".format(len(failedBuilds), format_objects_to_markdown(failedBuilds)),
"username": "Build Failed",
"avatar_url": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQE6prA5NL5oqTqEDMAkU823YY4xGMq9c3ucg&s"
})
sys.exit(1)
else:
print_green("All builds were successful")
if discord_webhook != "":
if len(directories) > 0:
requests.post(discord_webhook, json={
"content": "**All builds were successful** \n builded addons: {}".format(array_to_string(directories)),
"username": "Build Success",
"avatar_url": "https://cdn1.iconfinder.com/data/icons/basic-ui-elements-color-round/3/15-512.png"
})
sys.exit(0)
if __name__ == "__main__":
main()