v16.1
This commit is contained in:
parent
5fa8b11896
commit
7387d14ebd
|
@ -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
|
||||
|
|
|
@ -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'))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
]
|
|
@ -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
|
||||
}
|
||||
]
|
|
@ -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
|
||||
|
|
|
@ -1,2 +1,3 @@
|
|||
PyGithub
|
||||
python-gitlab
|
||||
xmltodict
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
]
|
Reference in New Issue