This commit is contained in:
Nichole Mattera 2020-05-05 17:04:42 -04:00 committed by GitHub
parent 5fa8b11896
commit 7387d14ebd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 506 additions and 150 deletions

View File

@ -26,6 +26,7 @@ icon=bootloader/res/icon_payload.bmp
{}
[CFW (EMUMMC)]
emummcforce=1
fss0=atmosphere/fusee-secondary.bin
atmosphere=1
logopath=bootloader/bootlogo.bmp

View File

@ -52,6 +52,11 @@ def parse_args():
help='Perform an auto build.')
parser_sdsetup.set_defaults(command=common.Command.SDSetup)
# Kosmos Minimal subcommands
parser_kosmos = subparsers.add_parser('kosmos-mini', help='Create a release build of Kosmos Minimal.')
parser_kosmos.add_argument('output', help='Zip file to create.')
parser_kosmos.set_defaults(command=common.Command.KosmosMinimal)
# Parse arguments
args = parser.parse_args()
@ -71,6 +76,8 @@ def init_version_messages(args, kosmos_version):
return [ f'Kosmos {kosmos_version} built with:' ]
elif args.command == common.Command.SDSetup and not args.auto:
return [ 'SDSetup Modules built with:' ]
elif args.command == common.Command.KosmosMinimal:
return [ f'Kosmos Minimal {kosmos_version} built with:' ]
return []
if __name__ == '__main__':
@ -86,21 +93,20 @@ if __name__ == '__main__':
version_messages = init_version_messages(args, kosmos_version)
is_kosmos_build = args.command == common.Command.Kosmos
build_messages = modules.build(temp_directory, kosmos_version, is_kosmos_build, auto_build)
build_messages = modules.build(temp_directory, kosmos_version, args.command, auto_build)
common.delete_path(args.output)
if build_messages is not None:
version_messages += build_messages
if is_kosmos_build:
if args.command == common.Command.SDSetup:
shutil.move(temp_directory, args.output)
else:
shutil.make_archive(
os.path.splitext(args.output)[0],
'zip',
temp_directory)
else:
shutil.move(temp_directory, args.output)
common.delete_path(os.path.join(os.getcwd(), 'tmp'))

View File

@ -28,10 +28,12 @@ import uuid
class Command(enum.Enum):
Kosmos = 0
SDSetup = 1
KosmosMinimal = 2
class GitService(enum.Enum):
GitHub = 0
GitLab = 1
SourceForge = 2
def generate_temp_path():
return os.path.join(os.getcwd(), 'tmp', str(uuid.uuid4()))
@ -63,3 +65,12 @@ def sed(pattern, replace, file_path):
def mkdir(path):
if not os.path.exists(path):
os.makedirs(path)
def move_contents_of_folder(source, dest):
files = os.listdir(source)
for f in files:
if os.path.isdir(os.path.join(source, f)):
move_contents_of_folder(os.path.join(source, f), os.path.join(dest, f))
else:
shutil.move(os.path.join(source, f), dest)

View File

@ -0,0 +1,33 @@
[
{
"name": "Atmosphère",
"download_function_name": "download_atmosphere",
"git": {
"service": 0,
"org_name": "Atmosphere-NX",
"repo_name": "Atmosphere",
"asset_patterns": [
".*atmosphere.*\\.zip",
".*fusee.*\\.bin"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": null
},
{
"name": "Hekate",
"download_function_name": "download_hekate",
"git": {
"service": 0,
"org_name": "CTCaer",
"repo_name": "hekate",
"asset_patterns": [
".*hekate.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": null
}
]

View File

@ -10,12 +10,10 @@
".*atmosphere.*\\.zip",
".*fusee.*\\.bin"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "must_have"
}
"sdsetup_module_name": null
},
{
"name": "Hekate",
@ -27,12 +25,25 @@
"asset_patterns": [
".*hekate.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "hekate"
}
"sdsetup_module_name": null
},
{
"name": "Hekate Icons",
"download_function_name": "download_hekate_icons",
"git": {
"service": 0,
"org_name": "NicholeMattera",
"repo_name": "Hekate-Icons",
"asset_patterns": [
".*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": null
},
{
"name": "Homebrew App Store",
@ -44,12 +55,10 @@
"asset_patterns": [
"\\[.*\\.nro\\.zip\\]\\((.*\\.nro\\.zip)\\)"
],
"group": 0
"group": 0,
"version_pattern": null
},
"sdsetup": {
"included": false,
"name": null
}
"sdsetup_module_name": null
},
{
"name": "EdiZon",
@ -59,14 +68,13 @@
"org_name": "WerWolv",
"repo_name": "EdiZon",
"asset_patterns": [
".*\\.nro"
".*\\.nro",
".*\\.ovl"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": false,
"name": null
}
"sdsetup_module_name": null
},
{
"name": "Emuiibo",
@ -78,12 +86,10 @@
"asset_patterns": [
".*emuiibo.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "emuiibo"
}
"sdsetup_module_name": null
},
{
"name": "Goldleaf",
@ -95,12 +101,10 @@
"asset_patterns": [
".*\\.nro"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": false,
"name": null
}
"sdsetup_module_name": null
},
{
"name": "Kosmos Cleaner",
@ -112,12 +116,10 @@
"asset_patterns": [
".*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "kosmos_cleaner"
}
"sdsetup_module_name": null
},
{
"name": "Kosmos Toolbox",
@ -129,12 +131,10 @@
"asset_patterns": [
".*\\.nro"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "kosmos_toolbox"
}
"sdsetup_module_name": null
},
{
"name": "Kosmos Updater",
@ -146,12 +146,10 @@
"asset_patterns": [
".*\\.nro"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "kosmos_updater"
}
"sdsetup_module_name": null
},
{
"name": "ldn_mitm",
@ -163,12 +161,10 @@
"asset_patterns": [
".*ldn_mitm.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "ldn_mitm"
}
"sdsetup_module_name": null
},
{
"name": "Lockpick",
@ -180,12 +176,10 @@
"asset_patterns": [
".*\\.nro"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": false,
"name": null
}
"sdsetup_module_name": null
},
{
"name": "Lockpick_RCM",
@ -197,12 +191,10 @@
"asset_patterns": [
".*\\.bin"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "lockpick_rcm"
}
"sdsetup_module_name": null
},
{
"name": "nxdumptool",
@ -214,12 +206,10 @@
"asset_patterns": [
".*nxdumptool.*\\.nro"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": false,
"name": null
}
"sdsetup_module_name": null
},
{
"name": "nx-ovlloader",
@ -231,12 +221,10 @@
"asset_patterns": [
".*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "nx_ovlloader"
}
"sdsetup_module_name": null
},
{
"name": "ovlSysModules",
@ -248,12 +236,10 @@
"asset_patterns": [
".*\\.ovl"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "ovl_sysmodules"
}
"sdsetup_module_name": null
},
{
"name": "Status Monitor Overlay",
@ -265,12 +251,10 @@
"asset_patterns": [
".*\\.ovl"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "status_monitor_overlay"
}
"sdsetup_module_name": null
},
{
"name": "sys-clk",
@ -282,12 +266,10 @@
"asset_patterns": [
".*sys-clk-.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "sys_clk"
}
"sdsetup_module_name": null
},
{
"name": "sys-con",
@ -299,12 +281,10 @@
"asset_patterns": [
".*sys-con-.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "sys_con"
}
"sdsetup_module_name": null
},
{
"name": "sys-ftpd-light",
@ -316,12 +296,10 @@
"asset_patterns": [
".*sys-ftpd-light.*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "sys_ftpd"
}
"sdsetup_module_name": null
},
{
"name": "Tesla-Menu",
@ -333,11 +311,9 @@
"asset_patterns": [
".*\\.zip"
],
"group": null
"group": null,
"version_pattern": null
},
"sdsetup": {
"included": true,
"name": "tesla_menu"
}
"sdsetup_module_name": null
}
]

View File

@ -28,13 +28,14 @@ import re
import shutil
import urllib.request
import uuid
import xmltodict
import zipfile
gh = Github(config.github_username, config.github_password)
gl = Gitlab('https://gitlab.com', private_token=config.gitlab_private_access_token)
gl.auth()
def get_latest_release(module):
def get_latest_release(module, include_prereleases = True):
if common.GitService(module['git']['service']) == common.GitService.GitHub:
try:
repo = gh.get_repo(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
@ -47,8 +48,15 @@ def get_latest_release(module):
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
return None
if include_prereleases:
return releases[0]
else:
for release in releases:
if not release.prerelease:
return release
return None
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
try:
project = gl.projects.get(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
except:
@ -62,6 +70,12 @@ def get_latest_release(module):
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
return None
else:
releases = None
with urllib.request.urlopen(f'https://sourceforge.net/projects/{module["git"]["repo_name"]}/rss?path=/') as fd:
releases = xmltodict.parse(fd.read().decode('utf-8'))
return releases
def download_asset(module, release, index):
pattern = module['git']['asset_patterns'][index]
@ -84,7 +98,7 @@ def download_asset(module, release, index):
urllib.request.urlretrieve(matched_asset.browser_download_url, download_path)
return download_path
else:
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
group = module['git']['group']
match = re.search(pattern, release.release['description'])
@ -98,6 +112,21 @@ def download_asset(module, release, index):
download_path = common.generate_temp_path()
urllib.request.urlretrieve(f'https://gitlab.com/{module["git"]["org_name"]}/{module["git"]["repo_name"]}{groups[group]}', download_path)
return download_path
else:
matched_item = None
for item in release['rss']['channel']['item']:
if re.search(pattern, item['title']):
matched_item = item
break
if matched_item is None:
print(f'[Error] Unable to find asset that match pattern: "{pattern}"')
return None
download_path = common.generate_temp_path()
urllib.request.urlretrieve(matched_item['link'], download_path)
return download_path
def find_asset(release, pattern):
@ -107,6 +136,31 @@ def find_asset(release, pattern):
return None
def get_version(module, release, index):
if common.GitService(module['git']['service']) == common.GitService.GitHub:
return release.tag_name
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
return release.name
else:
matched_item = None
for item in release['rss']['channel']['item']:
if re.search(module['git']['asset_patterns'][index], item['title']):
matched_item = item
break
if matched_item is None:
return "Latest"
match = re.search(module['git']['version_pattern'], matched_item['title'])
if match is None:
return "Latest"
groups = match.groups()
if len(groups) == 0:
return "Latest"
return groups[0]
def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
bundle_path = download_asset(module, release, 0)
@ -118,6 +172,7 @@ def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(bundle_path)
common.delete_path(os.path.join(temp_directory, 'switch', 'reboot_to_payload.nro'))
common.delete_path(os.path.join(temp_directory, 'switch'))
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
payload_path = download_asset(module, release, 1)
@ -132,7 +187,7 @@ def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
if not kosmos_build:
common.delete_path(os.path.join(temp_directory, 'hbmenu.nro'))
return release.tag_name
return get_version(module, release, 0)
def download_hekate(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -155,13 +210,32 @@ def download_hekate(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'atmosphere'))
shutil.copyfile(payload[0], os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
common.delete_path(os.path.join(temp_directory, 'nyx_usb_max_rate (run once per windows pc).reg'))
if not kosmos_build:
common.mkdir(os.path.join(temp_directory, '..', 'must_have'))
shutil.move(os.path.join(temp_directory, 'bootloader'), os.path.join(temp_directory, '..', 'must_have', 'bootloader'))
common.move_contents_of_folder(os.path.join(temp_directory, 'bootloader'), os.path.join(temp_directory, '..', 'must_have', 'bootloader'))
shutil.move(os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'), os.path.join(temp_directory, '..', 'must_have', 'atmosphere', 'reboot_payload.bin'))
common.delete_path(os.path.join(temp_directory, 'atmosphere'))
return release.tag_name
return get_version(module, release, 0)
def download_hekate_icons(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
bundle_path = download_asset(module, release, 0)
if bundle_path is None:
return None
with zipfile.ZipFile(bundle_path, 'r') as zip_ref:
zip_ref.extractall(temp_directory)
common.delete_path(bundle_path)
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload_hue.bmp'))
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload_custom.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_payload.bmp'))
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch_hue.bmp'))
shutil.move(os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch_custom.bmp'), os.path.join(temp_directory, 'bootloader', 'res', 'icon_switch.bmp'))
return get_version(module, release, 0)
def download_appstore(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -176,7 +250,7 @@ def download_appstore(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'switch', 'appstore'))
shutil.move(os.path.join(temp_directory, 'appstore.nro'), os.path.join(temp_directory, 'switch', 'appstore', 'appstore.nro'))
return release.name
return get_version(module, release, 0)
def download_edizon(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -187,7 +261,14 @@ def download_edizon(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'switch', 'EdiZon'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'EdiZon', 'EdiZon.nro'))
return release.tag_name
overlay_path = download_asset(module, release, 1)
if overlay_path is None:
return None
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
shutil.move(overlay_path, os.path.join(temp_directory, 'switch', '.overlays', 'ovlEdiZon.ovl'))
return get_version(module, release, 0)
def download_emuiibo(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -208,7 +289,7 @@ def download_emuiibo(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352', 'flags', 'boot2.flag'))
common.copy_module_file('emuiibo', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '0100000000000352', 'toolbox.json'))
return release.tag_name
return get_version(module, release, 0)
def download_goldleaf(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -219,7 +300,7 @@ def download_goldleaf(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'switch', 'Goldleaf'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Goldleaf', 'Goldleaf.nro'))
return release.tag_name
return get_version(module, release, 0)
def download_kosmos_cleaner(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -230,7 +311,7 @@ def download_kosmos_cleaner(module, temp_directory, kosmos_version, kosmos_build
with zipfile.ZipFile(bundle_path, 'r') as zip_ref:
zip_ref.extractall(temp_directory)
return release.tag_name
return get_version(module, release, 0)
def download_kosmos_toolbox(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -242,7 +323,7 @@ def download_kosmos_toolbox(module, temp_directory, kosmos_version, kosmos_build
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'KosmosToolbox', 'KosmosToolbox.nro'))
common.copy_module_file('kosmos-toolbox', 'config.json', os.path.join(temp_directory, 'switch', 'KosmosToolbox', 'config.json'))
return release.tag_name
return get_version(module, release, 0)
def download_kosmos_updater(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -255,7 +336,7 @@ def download_kosmos_updater(module, temp_directory, kosmos_version, kosmos_build
common.copy_module_file('kosmos-updater', 'internal.db', os.path.join(temp_directory, 'switch', 'KosmosUpdater', 'internal.db'))
common.sed('KOSMOS_VERSION', kosmos_version, os.path.join(temp_directory, 'switch', 'KosmosUpdater', 'internal.db'))
return release.tag_name
return get_version(module, release, 0)
def download_ldn_mitm(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -271,7 +352,7 @@ def download_ldn_mitm(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '4200000000000010', 'flags', 'boot2.flag'))
common.copy_module_file('ldn_mitm', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '4200000000000010', 'toolbox.json'))
return release.tag_name
return get_version(module, release, 0)
def download_lockpick(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -282,7 +363,7 @@ def download_lockpick(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'switch', 'Lockpick'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Lockpick', 'Lockpick.nro'))
return release.tag_name
return get_version(module, release, 0)
def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -296,7 +377,7 @@ def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
else:
shutil.move(payload_path, os.path.join(temp_directory, 'Lockpick_RCM.bin'))
return release.tag_name
return get_version(module, release, 0)
def download_nxdumptool(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -307,7 +388,7 @@ def download_nxdumptool(module, temp_directory, kosmos_version, kosmos_build):
common.mkdir(os.path.join(temp_directory, 'switch', 'NXDumpTool'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'NXDumpTool', 'NXDumpTool.nro'))
return release.tag_name
return get_version(module, release, 0)
def download_nx_ovlloader(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -320,7 +401,7 @@ def download_nx_ovlloader(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(bundle_path)
return release.tag_name
return get_version(module, release, 0)
def download_ovl_sysmodules(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -331,7 +412,7 @@ def download_ovl_sysmodules(module, temp_directory, kosmos_version, kosmos_build
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'ovlSysmodules.ovl'))
return release.tag_name
return get_version(module, release, 0)
def download_status_monitor_overlay(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -342,7 +423,7 @@ def download_status_monitor_overlay(module, temp_directory, kosmos_version, kosm
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'Status-Monitor-Overlay.ovl'))
return release.tag_name
return get_version(module, release, 0)
def download_sys_clk(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -359,7 +440,7 @@ def download_sys_clk(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(os.path.join(temp_directory, 'README.md'))
common.copy_module_file('sys-clk', 'toolbox.json', os.path.join(temp_directory, 'atmosphere', 'contents', '00FF0000636C6BFF', 'toolbox.json'))
return release.tag_name
return get_version(module, release, 0)
def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -374,7 +455,7 @@ def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
if kosmos_build:
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '690000000000000D', 'flags', 'boot2.flag'))
return release.tag_name
return get_version(module, release, 0)
def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -389,7 +470,7 @@ def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build
if kosmos_build:
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '420000000000000E', 'flags', 'boot2.flag'))
return release.tag_name
return get_version(module, release, 0)
def download_tesla_menu(module, temp_directory, kosmos_version, kosmos_build):
release = get_latest_release(module)
@ -402,50 +483,54 @@ def download_tesla_menu(module, temp_directory, kosmos_version, kosmos_build):
common.delete_path(bundle_path)
return release.tag_name
return get_version(module, release, 0)
def build(temp_directory, kosmos_version, kosmos_build, auto_build):
def build(temp_directory, kosmos_version, command, auto_build):
results = []
modules_filename = 'kosmos.json'
if command == common.Command.KosmosMinimal:
modules_filename = 'kosmos-minimal.json'
elif command == common.Command.SDSetup:
modules_filename = 'sdsetup.json'
# Open up modules.json
with open('modules.json') as json_file:
with open(modules_filename) as json_file:
# Parse JSON
data = json.load(json_file)
# Loop through modules
for module in data:
sdsetup_opts = module['sdsetup']
# Running a Kosmos Build
if kosmos_build:
# Download the module.
print(f'Downloading {module["name"]}...')
download = globals()[module['download_function_name']]
version = download(module, temp_directory, kosmos_version, kosmos_build)
if version is None:
return None
results.append(f' {module["name"]} - {version}')
# Running a SDSetup Build
elif not kosmos_build and sdsetup_opts['included']:
if command == common.Command.SDSetup:
# Only show prompts when it's not an auto build.
if not auto_build:
print(f'Downloading {module["name"]}...')
# Make sure module directory is created.
module_directory = os.path.join(temp_directory, sdsetup_opts['name'])
module_directory = os.path.join(temp_directory, module['sdsetup_module_name'])
common.mkdir(module_directory)
# Download the module.
download = globals()[module['download_function_name']]
version = download(module, module_directory, kosmos_version, kosmos_build)
version = download(module, module_directory, kosmos_version, False)
if version is None:
return None
# Auto builds have a different prompt at the end for parsing.
if auto_build:
results.append(f'{sdsetup_opts["name"]}:{version}')
results.append(f'{module["sdsetup_module_name"]}:{version}')
else:
results.append(f' {module["name"]} - {version}')
# Running a Kosmos Build
else:
# Download the module.
print(f'Downloading {module["name"]}...')
download = globals()[module['download_function_name']]
version = download(module, temp_directory, kosmos_version, True)
if version is None:
return None
results.append(f' {module["name"]} - {version}')
return results

View File

@ -1,2 +1,3 @@
PyGithub
python-gitlab
xmltodict

243
Builder/sdsetup.json Normal file
View File

@ -0,0 +1,243 @@
[
{
"name": "Atmosphère",
"download_function_name": "download_atmosphere",
"git": {
"service": 0,
"org_name": "Atmosphere-NX",
"repo_name": "Atmosphere",
"asset_patterns": [
".*atmosphere.*\\.zip",
".*fusee.*\\.bin"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "must_have"
},
{
"name": "Hekate",
"download_function_name": "download_hekate",
"git": {
"service": 0,
"org_name": "CTCaer",
"repo_name": "hekate",
"asset_patterns": [
".*hekate.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "hekate"
},
{
"name": "Hekate Icons",
"download_function_name": "download_hekate_icons",
"git": {
"service": 0,
"org_name": "NicholeMattera",
"repo_name": "Hekate-Icons",
"asset_patterns": [
".*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "hekate_icons"
},
{
"name": "Emuiibo",
"download_function_name": "download_emuiibo",
"git": {
"service": 0,
"org_name": "XorTroll",
"repo_name": "emuiibo",
"asset_patterns": [
".*emuiibo.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "emuiibo"
},
{
"name": "Kosmos Cleaner",
"download_function_name": "download_kosmos_cleaner",
"git": {
"service": 0,
"org_name": "AtlasNX",
"repo_name": "Kosmos-Cleaner",
"asset_patterns": [
".*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "kosmos_cleaner"
},
{
"name": "Kosmos Toolbox",
"download_function_name": "download_kosmos_toolbox",
"git": {
"service": 0,
"org_name": "AtlasNX",
"repo_name": "Kosmos-Toolbox",
"asset_patterns": [
".*\\.nro"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "kosmos_toolbox"
},
{
"name": "Kosmos Updater",
"download_function_name": "download_kosmos_updater",
"git": {
"service": 0,
"org_name": "AtlasNX",
"repo_name": "Kosmos-Updater",
"asset_patterns": [
".*\\.nro"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "kosmos_updater"
},
{
"name": "ldn_mitm",
"download_function_name": "download_ldn_mitm",
"git": {
"service": 0,
"org_name": "spacemeowx2",
"repo_name": "ldn_mitm",
"asset_patterns": [
".*ldn_mitm.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "ldn_mitm"
},
{
"name": "Lockpick_RCM",
"download_function_name": "download_lockpick_rcm",
"git": {
"service": 0,
"org_name": "shchmue",
"repo_name": "Lockpick_RCM",
"asset_patterns": [
".*\\.bin"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "lockpick_rcm"
},
{
"name": "nx-ovlloader",
"download_function_name": "download_nx_ovlloader",
"git": {
"service": 0,
"org_name": "WerWolv",
"repo_name": "nx-ovlloader",
"asset_patterns": [
".*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "nx_ovlloader"
},
{
"name": "ovlSysModules",
"download_function_name": "download_ovl_sysmodules",
"git": {
"service": 0,
"org_name": "WerWolv",
"repo_name": "ovl-sysmodules",
"asset_patterns": [
".*\\.ovl"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "ovl_sysmodules"
},
{
"name": "Status Monitor Overlay",
"download_function_name": "download_status_monitor_overlay",
"git": {
"service": 0,
"org_name": "masagrator",
"repo_name": "Status-Monitor-Overlay",
"asset_patterns": [
".*\\.ovl"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "status_monitor_overlay"
},
{
"name": "sys-clk",
"download_function_name": "download_sys_clk",
"git": {
"service": 0,
"org_name": "retronx-team",
"repo_name": "sys-clk",
"asset_patterns": [
".*sys-clk-.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "sys_clk"
},
{
"name": "sys-con",
"download_function_name": "download_sys_con",
"git": {
"service": 0,
"org_name": "cathery",
"repo_name": "sys-con",
"asset_patterns": [
".*sys-con-.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "sys_con"
},
{
"name": "sys-ftpd-light",
"download_function_name": "download_sys_ftpd_light",
"git": {
"service": 0,
"org_name": "cathery",
"repo_name": "sys-ftpd-light",
"asset_patterns": [
".*sys-ftpd-light.*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "sys_ftpd"
},
{
"name": "Tesla-Menu",
"download_function_name": "download_tesla_menu",
"git": {
"service": 0,
"org_name": "WerWolv",
"repo_name": "Tesla-Menu",
"asset_patterns": [
".*\\.zip"
],
"group": null,
"version_pattern": null
},
"sdsetup_module_name": "tesla_menu"
}
]