v16.1
This commit is contained in:
parent
5fa8b11896
commit
7387d14ebd
|
@ -26,6 +26,7 @@ icon=bootloader/res/icon_payload.bmp
|
||||||
{}
|
{}
|
||||||
|
|
||||||
[CFW (EMUMMC)]
|
[CFW (EMUMMC)]
|
||||||
|
emummcforce=1
|
||||||
fss0=atmosphere/fusee-secondary.bin
|
fss0=atmosphere/fusee-secondary.bin
|
||||||
atmosphere=1
|
atmosphere=1
|
||||||
logopath=bootloader/bootlogo.bmp
|
logopath=bootloader/bootlogo.bmp
|
||||||
|
|
|
@ -52,6 +52,11 @@ def parse_args():
|
||||||
help='Perform an auto build.')
|
help='Perform an auto build.')
|
||||||
parser_sdsetup.set_defaults(command=common.Command.SDSetup)
|
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
|
# Parse arguments
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
@ -71,6 +76,8 @@ def init_version_messages(args, kosmos_version):
|
||||||
return [ f'Kosmos {kosmos_version} built with:' ]
|
return [ f'Kosmos {kosmos_version} built with:' ]
|
||||||
elif args.command == common.Command.SDSetup and not args.auto:
|
elif args.command == common.Command.SDSetup and not args.auto:
|
||||||
return [ 'SDSetup Modules built with:' ]
|
return [ 'SDSetup Modules built with:' ]
|
||||||
|
elif args.command == common.Command.KosmosMinimal:
|
||||||
|
return [ f'Kosmos Minimal {kosmos_version} built with:' ]
|
||||||
return []
|
return []
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -86,21 +93,20 @@ if __name__ == '__main__':
|
||||||
|
|
||||||
version_messages = init_version_messages(args, kosmos_version)
|
version_messages = init_version_messages(args, kosmos_version)
|
||||||
|
|
||||||
is_kosmos_build = args.command == common.Command.Kosmos
|
build_messages = modules.build(temp_directory, kosmos_version, args.command, auto_build)
|
||||||
build_messages = modules.build(temp_directory, kosmos_version, is_kosmos_build, auto_build)
|
|
||||||
|
|
||||||
common.delete_path(args.output)
|
common.delete_path(args.output)
|
||||||
|
|
||||||
if build_messages is not None:
|
if build_messages is not None:
|
||||||
version_messages += build_messages
|
version_messages += build_messages
|
||||||
|
|
||||||
if is_kosmos_build:
|
if args.command == common.Command.SDSetup:
|
||||||
|
shutil.move(temp_directory, args.output)
|
||||||
|
else:
|
||||||
shutil.make_archive(
|
shutil.make_archive(
|
||||||
os.path.splitext(args.output)[0],
|
os.path.splitext(args.output)[0],
|
||||||
'zip',
|
'zip',
|
||||||
temp_directory)
|
temp_directory)
|
||||||
else:
|
|
||||||
shutil.move(temp_directory, args.output)
|
|
||||||
|
|
||||||
common.delete_path(os.path.join(os.getcwd(), 'tmp'))
|
common.delete_path(os.path.join(os.getcwd(), 'tmp'))
|
||||||
|
|
||||||
|
|
|
@ -28,10 +28,12 @@ import uuid
|
||||||
class Command(enum.Enum):
|
class Command(enum.Enum):
|
||||||
Kosmos = 0
|
Kosmos = 0
|
||||||
SDSetup = 1
|
SDSetup = 1
|
||||||
|
KosmosMinimal = 2
|
||||||
|
|
||||||
class GitService(enum.Enum):
|
class GitService(enum.Enum):
|
||||||
GitHub = 0
|
GitHub = 0
|
||||||
GitLab = 1
|
GitLab = 1
|
||||||
|
SourceForge = 2
|
||||||
|
|
||||||
def generate_temp_path():
|
def generate_temp_path():
|
||||||
return os.path.join(os.getcwd(), 'tmp', str(uuid.uuid4()))
|
return os.path.join(os.getcwd(), 'tmp', str(uuid.uuid4()))
|
||||||
|
@ -63,3 +65,12 @@ def sed(pattern, replace, file_path):
|
||||||
def mkdir(path):
|
def mkdir(path):
|
||||||
if not os.path.exists(path):
|
if not os.path.exists(path):
|
||||||
os.makedirs(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)
|
||||||
|
|
33
Builder/kosmos-minimal.json
Normal file
33
Builder/kosmos-minimal.json
Normal 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
|
||||||
|
}
|
||||||
|
]
|
|
@ -10,12 +10,10 @@
|
||||||
".*atmosphere.*\\.zip",
|
".*atmosphere.*\\.zip",
|
||||||
".*fusee.*\\.bin"
|
".*fusee.*\\.bin"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "must_have"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Hekate",
|
"name": "Hekate",
|
||||||
|
@ -27,12 +25,25 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*hekate.*\\.zip"
|
".*hekate.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
},
|
||||||
"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": null
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Homebrew App Store",
|
"name": "Homebrew App Store",
|
||||||
|
@ -44,12 +55,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
"\\[.*\\.nro\\.zip\\]\\((.*\\.nro\\.zip)\\)"
|
"\\[.*\\.nro\\.zip\\]\\((.*\\.nro\\.zip)\\)"
|
||||||
],
|
],
|
||||||
"group": 0
|
"group": 0,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": false,
|
|
||||||
"name": null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "EdiZon",
|
"name": "EdiZon",
|
||||||
|
@ -59,14 +68,13 @@
|
||||||
"org_name": "WerWolv",
|
"org_name": "WerWolv",
|
||||||
"repo_name": "EdiZon",
|
"repo_name": "EdiZon",
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.nro"
|
".*\\.nro",
|
||||||
|
".*\\.ovl"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": false,
|
|
||||||
"name": null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Emuiibo",
|
"name": "Emuiibo",
|
||||||
|
@ -78,12 +86,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*emuiibo.*\\.zip"
|
".*emuiibo.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "emuiibo"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Goldleaf",
|
"name": "Goldleaf",
|
||||||
|
@ -95,12 +101,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.nro"
|
".*\\.nro"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": false,
|
|
||||||
"name": null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Kosmos Cleaner",
|
"name": "Kosmos Cleaner",
|
||||||
|
@ -112,12 +116,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.zip"
|
".*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "kosmos_cleaner"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Kosmos Toolbox",
|
"name": "Kosmos Toolbox",
|
||||||
|
@ -129,12 +131,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.nro"
|
".*\\.nro"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "kosmos_toolbox"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Kosmos Updater",
|
"name": "Kosmos Updater",
|
||||||
|
@ -146,12 +146,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.nro"
|
".*\\.nro"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "kosmos_updater"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ldn_mitm",
|
"name": "ldn_mitm",
|
||||||
|
@ -163,12 +161,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*ldn_mitm.*\\.zip"
|
".*ldn_mitm.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "ldn_mitm"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Lockpick",
|
"name": "Lockpick",
|
||||||
|
@ -180,12 +176,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.nro"
|
".*\\.nro"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": false,
|
|
||||||
"name": null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Lockpick_RCM",
|
"name": "Lockpick_RCM",
|
||||||
|
@ -197,12 +191,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.bin"
|
".*\\.bin"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "lockpick_rcm"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nxdumptool",
|
"name": "nxdumptool",
|
||||||
|
@ -214,12 +206,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*nxdumptool.*\\.nro"
|
".*nxdumptool.*\\.nro"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": false,
|
|
||||||
"name": null
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nx-ovlloader",
|
"name": "nx-ovlloader",
|
||||||
|
@ -231,12 +221,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.zip"
|
".*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "nx_ovlloader"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "ovlSysModules",
|
"name": "ovlSysModules",
|
||||||
|
@ -248,12 +236,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.ovl"
|
".*\\.ovl"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "ovl_sysmodules"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Status Monitor Overlay",
|
"name": "Status Monitor Overlay",
|
||||||
|
@ -265,12 +251,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.ovl"
|
".*\\.ovl"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "status_monitor_overlay"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sys-clk",
|
"name": "sys-clk",
|
||||||
|
@ -282,12 +266,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*sys-clk-.*\\.zip"
|
".*sys-clk-.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "sys_clk"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sys-con",
|
"name": "sys-con",
|
||||||
|
@ -299,12 +281,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*sys-con-.*\\.zip"
|
".*sys-con-.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "sys_con"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sys-ftpd-light",
|
"name": "sys-ftpd-light",
|
||||||
|
@ -316,12 +296,10 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*sys-ftpd-light.*\\.zip"
|
".*sys-ftpd-light.*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "sys_ftpd"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "Tesla-Menu",
|
"name": "Tesla-Menu",
|
||||||
|
@ -333,11 +311,9 @@
|
||||||
"asset_patterns": [
|
"asset_patterns": [
|
||||||
".*\\.zip"
|
".*\\.zip"
|
||||||
],
|
],
|
||||||
"group": null
|
"group": null,
|
||||||
|
"version_pattern": null
|
||||||
},
|
},
|
||||||
"sdsetup": {
|
"sdsetup_module_name": null
|
||||||
"included": true,
|
|
||||||
"name": "tesla_menu"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -28,13 +28,14 @@ import re
|
||||||
import shutil
|
import shutil
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import uuid
|
import uuid
|
||||||
|
import xmltodict
|
||||||
import zipfile
|
import zipfile
|
||||||
|
|
||||||
gh = Github(config.github_username, config.github_password)
|
gh = Github(config.github_username, config.github_password)
|
||||||
gl = Gitlab('https://gitlab.com', private_token=config.gitlab_private_access_token)
|
gl = Gitlab('https://gitlab.com', private_token=config.gitlab_private_access_token)
|
||||||
gl.auth()
|
gl.auth()
|
||||||
|
|
||||||
def get_latest_release(module):
|
def get_latest_release(module, include_prereleases = True):
|
||||||
if common.GitService(module['git']['service']) == common.GitService.GitHub:
|
if common.GitService(module['git']['service']) == common.GitService.GitHub:
|
||||||
try:
|
try:
|
||||||
repo = gh.get_repo(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
repo = gh.get_repo(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||||
|
@ -46,9 +47,16 @@ def get_latest_release(module):
|
||||||
if releases.totalCount == 0:
|
if releases.totalCount == 0:
|
||||||
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if include_prereleases:
|
||||||
|
return releases[0]
|
||||||
|
|
||||||
|
for release in releases:
|
||||||
|
if not release.prerelease:
|
||||||
|
return release
|
||||||
|
|
||||||
return releases[0]
|
return None
|
||||||
else:
|
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
|
||||||
try:
|
try:
|
||||||
project = gl.projects.get(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
project = gl.projects.get(f'{module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||||
except:
|
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"]}')
|
print(f'[Error] Unable to find any releases for repo: {module["git"]["org_name"]}/{module["git"]["repo_name"]}')
|
||||||
return None
|
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):
|
def download_asset(module, release, index):
|
||||||
pattern = module['git']['asset_patterns'][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)
|
urllib.request.urlretrieve(matched_asset.browser_download_url, download_path)
|
||||||
|
|
||||||
return download_path
|
return download_path
|
||||||
else:
|
elif common.GitService(module['git']['service']) == common.GitService.GitLab:
|
||||||
group = module['git']['group']
|
group = module['git']['group']
|
||||||
|
|
||||||
match = re.search(pattern, release.release['description'])
|
match = re.search(pattern, release.release['description'])
|
||||||
|
@ -98,6 +112,21 @@ def download_asset(module, release, index):
|
||||||
download_path = common.generate_temp_path()
|
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)
|
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
|
return download_path
|
||||||
|
|
||||||
def find_asset(release, pattern):
|
def find_asset(release, pattern):
|
||||||
|
@ -107,6 +136,31 @@ def find_asset(release, pattern):
|
||||||
|
|
||||||
return None
|
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):
|
def download_atmosphere(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
release = get_latest_release(module)
|
||||||
bundle_path = download_asset(module, release, 0)
|
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(bundle_path)
|
||||||
common.delete_path(os.path.join(temp_directory, 'switch', 'reboot_to_payload.nro'))
|
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'))
|
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
|
||||||
|
|
||||||
payload_path = download_asset(module, release, 1)
|
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:
|
if not kosmos_build:
|
||||||
common.delete_path(os.path.join(temp_directory, 'hbmenu.nro'))
|
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):
|
def download_hekate(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'atmosphere'))
|
||||||
shutil.copyfile(payload[0], os.path.join(temp_directory, 'atmosphere', 'reboot_payload.bin'))
|
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:
|
if not kosmos_build:
|
||||||
common.mkdir(os.path.join(temp_directory, '..', 'must_have'))
|
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'))
|
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'))
|
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):
|
def download_appstore(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
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'))
|
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):
|
def download_edizon(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', 'EdiZon'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'EdiZon', 'EdiZon.nro'))
|
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):
|
def download_emuiibo(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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.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'))
|
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):
|
def download_goldleaf(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', 'Goldleaf'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Goldleaf', 'Goldleaf.nro'))
|
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):
|
def download_kosmos_cleaner(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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:
|
with zipfile.ZipFile(bundle_path, 'r') as zip_ref:
|
||||||
zip_ref.extractall(temp_directory)
|
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):
|
def download_kosmos_toolbox(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
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'))
|
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):
|
def download_kosmos_updater(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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.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'))
|
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):
|
def download_ldn_mitm(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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.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'))
|
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):
|
def download_lockpick(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', 'Lockpick'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'Lockpick', 'Lockpick.nro'))
|
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):
|
def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
release = get_latest_release(module)
|
||||||
|
@ -296,7 +377,7 @@ def download_lockpick_rcm(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
else:
|
else:
|
||||||
shutil.move(payload_path, os.path.join(temp_directory, 'Lockpick_RCM.bin'))
|
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):
|
def download_nxdumptool(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', 'NXDumpTool'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', 'NXDumpTool', 'NXDumpTool.nro'))
|
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):
|
def download_nx_ovlloader(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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)
|
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):
|
def download_ovl_sysmodules(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'ovlSysmodules.ovl'))
|
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):
|
def download_status_monitor_overlay(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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'))
|
common.mkdir(os.path.join(temp_directory, 'switch', '.overlays'))
|
||||||
shutil.move(app_path, os.path.join(temp_directory, 'switch', '.overlays', 'Status-Monitor-Overlay.ovl'))
|
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):
|
def download_sys_clk(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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.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'))
|
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):
|
def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
release = get_latest_release(module)
|
||||||
|
@ -374,7 +455,7 @@ def download_sys_con(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
if kosmos_build:
|
if kosmos_build:
|
||||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '690000000000000D', 'flags', 'boot2.flag'))
|
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):
|
def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
release = get_latest_release(module)
|
||||||
|
@ -389,7 +470,7 @@ def download_sys_ftpd_light(module, temp_directory, kosmos_version, kosmos_build
|
||||||
if kosmos_build:
|
if kosmos_build:
|
||||||
common.delete_path(os.path.join(temp_directory, 'atmosphere', 'contents', '420000000000000E', 'flags', 'boot2.flag'))
|
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):
|
def download_tesla_menu(module, temp_directory, kosmos_version, kosmos_build):
|
||||||
release = get_latest_release(module)
|
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)
|
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 = []
|
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
|
# Open up modules.json
|
||||||
with open('modules.json') as json_file:
|
with open(modules_filename) as json_file:
|
||||||
# Parse JSON
|
# Parse JSON
|
||||||
data = json.load(json_file)
|
data = json.load(json_file)
|
||||||
|
|
||||||
# Loop through modules
|
# Loop through modules
|
||||||
for module in data:
|
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
|
# 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.
|
# Only show prompts when it's not an auto build.
|
||||||
if not auto_build:
|
if not auto_build:
|
||||||
print(f'Downloading {module["name"]}...')
|
print(f'Downloading {module["name"]}...')
|
||||||
|
|
||||||
# Make sure module directory is created.
|
# 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)
|
common.mkdir(module_directory)
|
||||||
|
|
||||||
# Download the module.
|
# Download the module.
|
||||||
download = globals()[module['download_function_name']]
|
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:
|
if version is None:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# Auto builds have a different prompt at the end for parsing.
|
# Auto builds have a different prompt at the end for parsing.
|
||||||
if auto_build:
|
if auto_build:
|
||||||
results.append(f'{sdsetup_opts["name"]}:{version}')
|
results.append(f'{module["sdsetup_module_name"]}:{version}')
|
||||||
else:
|
else:
|
||||||
results.append(f' {module["name"]} - {version}')
|
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
|
return results
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
PyGithub
|
PyGithub
|
||||||
python-gitlab
|
python-gitlab
|
||||||
|
xmltodict
|
||||||
|
|
243
Builder/sdsetup.json
Normal file
243
Builder/sdsetup.json
Normal 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"
|
||||||
|
}
|
||||||
|
]
|
Reference in a new issue