libretro: add update.py script

+136
+136
pkgs/misc/emulators/retroarch/update.py
···
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i python3 -p "python3.withPackages (ps: with ps; [ requests nix-prefetch-github ])" -p "git" 3 + 4 + import json 5 + import sys 6 + from pathlib import Path 7 + 8 + from nix_prefetch_github import nix_prefetch_github 9 + 10 + SCRIPT_PATH = Path(__file__).absolute().parent 11 + HASHES_PATH = SCRIPT_PATH / "hashes.json" 12 + CORES = { 13 + "atari800": {"repo": "libretro-atari800"}, 14 + "beetle-snes": {"repo": "beetle-bsnes-libretro"}, 15 + "beetle-gba": {"repo": "beetle-gba-libretro"}, 16 + "beetle-lynx": {"repo": "beetle-lynx-libretro"}, 17 + "beetle-ngp": {"repo": "beetle-ngp-libretro"}, 18 + "beetle-pce-fast": {"repo": "beetle-pce-fast-libretro"}, 19 + "beetle-pcfx": {"repo": "beetle-pcfx-libretro"}, 20 + "beetle-psx": {"repo": "beetle-psx-libretro"}, 21 + "beetle-saturn": {"repo": "beetle-saturn-libretro"}, 22 + "beetle-supergrafx": {"repo": "beetle-supergrafx-libretro"}, 23 + "beetle-wswan": {"repo": "beetle-wswan-libretro"}, 24 + "beetle-vb": {"repo": "beetle-vb-libretro"}, 25 + "bluemsx": {"repo": "bluemsx-libretro"}, 26 + "bsnes-mercury": {"repo": "bsnes-mercury"}, 27 + "citra": {"repo": "citra", "fetch_submodules": True}, 28 + "desmume": {"repo": "desmume"}, 29 + "desmume2015": {"repo": "desmume2015"}, 30 + "dolphin": {"repo": "dolphin"}, 31 + "dosbox": {"repo": "dosbox-libretro"}, 32 + "eightyone": {"repo": "81-libretro"}, 33 + "fbalpha2012": {"repo": "fbalpha2012"}, 34 + "fbneo": {"repo": "fbneo"}, 35 + "fceumm": {"repo": "libretro-fceumm"}, 36 + "flycast": {"repo": "flycast"}, 37 + "fmsx": {"repo": "fmsx-libretro"}, 38 + "freeintv": {"repo": "freeintv"}, 39 + "gambatte": {"repo": "gambatte-libretro"}, 40 + "genesis-plus-gx": {"repo": "Genesis-Plus-GX"}, 41 + "gpsp": {"repo": "gpsp"}, 42 + "gw": {"repo": "gw-libretro"}, 43 + "handy": {"repo": "libretro-handy"}, 44 + "hatari": {"repo": "hatari"}, 45 + "mame": {"repo": "mame"}, 46 + "mame2000": {"repo": "mame2000-libretro"}, 47 + "mame2003": {"repo": "mame2003-libretro"}, 48 + "mame2003-plus": {"repo": "mame2003-plus-libretro"}, 49 + "mame2010": {"repo": "mame2010-libretro"}, 50 + "mame2015": {"repo": "mame2015-libretro"}, 51 + "mame2016": {"repo": "mame2016-libretro"}, 52 + "mesen": {"repo": "mesen", "owner": "SourMesen"}, 53 + "meteor": {"repo": "meteor-libretro"}, 54 + "mgba": {"repo": "mgba"}, 55 + "mupen64plus": {"repo": "mupen64plus-libretro-nx"}, 56 + "neocd": {"repo": "neocd_libretro"}, 57 + "nestopia": {"repo": "nestopia"}, 58 + "np2kai": {"repo": "NP2kai", "owner": "AZO234", "fetch_submodules": True}, 59 + "o2em": {"repo": "libretro-o2em"}, 60 + "opera": {"repo": "opera-libretro"}, 61 + "parallel-n64": {"repo": "parallel-n64"}, 62 + "pcsx_rearmed": {"repo": "pcsx_rearmed"}, 63 + "picodrive": {"repo": "picodrive", "fetch_submodules": True}, 64 + "play": {"repo": "Play-", "fetch_submodules": True}, 65 + "ppsspp": {"repo": "ppsspp", "owner": "hrydgard", "fetch_submodules": True}, 66 + "prboom": {"repo": "libretro-prboom"}, 67 + "prosystem": {"repo": "prosystem-libretro"}, 68 + "quicknes": {"repo": "QuickNES_Core"}, 69 + "sameboy": {"repo": "sameboy"}, 70 + "scummvm": {"repo": "scummvm"}, 71 + "smsplus-gx": {"repo": "smsplus-gx"}, 72 + "snes9x": {"repo": "snes9x", "owner": "snes9xgit"}, 73 + "snes9x2002": {"repo": "snes9x2002"}, 74 + "snes9x2005": {"repo": "snes9x2005"}, 75 + "snes9x2010": {"repo": "snes9x2010"}, 76 + "stella": {"repo": "stella", "owner": "stella-emu"}, 77 + "stella2014": {"repo": "stella2014-libretro"}, 78 + "tgbdual": {"repo": "tgbdual-libretro"}, 79 + "thepowdertoy": {"repo": "ThePowderToy"}, 80 + "tic80": {"repo": "tic-80", "fetch_submodules": True}, 81 + "vba-next": {"repo": "vba-next"}, 82 + "vba-m": {"repo": "vbam-libretro"}, 83 + "vecx": {"repo": "libretro-vecx"}, 84 + "virtualjaguar": {"repo": "virtualjaguar-libretro"}, 85 + "yabause": {"repo": "yabause"}, 86 + } 87 + 88 + 89 + def info(*msg): 90 + print(*msg, file=sys.stderr) 91 + 92 + 93 + def get_repo_hash_fetchFromGitHub(repo, owner="libretro", fetch_submodules=False): 94 + assert repo is not None, "Parameter 'repo' can't be None." 95 + 96 + repo_hash = nix_prefetch_github( 97 + owner=owner, repo=repo, fetch_submodules=fetch_submodules 98 + ) 99 + return { 100 + "owner": repo_hash.repository.owner, 101 + "repo": repo_hash.repository.name, 102 + "rev": repo_hash.rev, 103 + "sha256": repo_hash.sha256, 104 + "fetchSubmodules": repo_hash.fetch_submodules, 105 + } 106 + 107 + 108 + def get_repo_hash(fetcher="fetchFromGitHub", **kwargs): 109 + if fetcher == "fetchFromGitHub": 110 + return get_repo_hash_fetchFromGitHub(**kwargs) 111 + else: 112 + raise ValueError(f"Unsupported fetcher: {fetcher}") 113 + 114 + 115 + def get_repo_hashes(): 116 + repo_hashes = {} 117 + 118 + for core, repo in CORES.items(): 119 + info( 120 + f"Getting repo hash for '{core}'...", 121 + ) 122 + repo_hashes[core] = get_repo_hash(**repo) 123 + 124 + return repo_hashes 125 + 126 + 127 + def main(): 128 + repo_hashes = get_repo_hashes() 129 + info(f"Generating '{HASHES_PATH}'...") 130 + with open(HASHES_PATH, "w") as f: 131 + f.write(json.dumps(repo_hashes, indent=4)) 132 + info("Finished!") 133 + 134 + 135 + if __name__ == "__main__": 136 + main()