lol

optifinePackages: update versions, refactor version generation

optifinePackages.optifine-latest: 1.18.1_HD_U_H4 -> 1.19.2_HD_U_H9

optifinePackages.optifine_1_19_2: init at 1.19.2_HD_U_H9
optifinePackages.optifine_1_19_1: init at 1.19.1_HD_U_H9
optifinePackages.optifine_1_19: init at 1.19_HD_U_H9

optifinePackages.optifine_1_18_2: init at 1.18.2_HD_U_H7
optifinePackages.optifine_1_18_1: 1.18.1_HD_U_H4 -> 1.18.1_HD_U_H6
optifinePackages.optifine_1_18: init at 1.18_HD_U_H3

optifinePackages.optifine_1_16_4: init at 1.16.4_HD_U_G7
optifinePackages.optifine_1_16_3: init at 1.16.3_HD_U_G5
optifinePackages.optifine_1_16_2: init at 1.16.2_HD_U_G5
optifinePackages.optifine_1_16_1: init at 1.16.1_HD_U_G2

optifinePackages.optifine_1_15_2: 1.16.5_HD_U_G8 -> 1.15.2_HD_U_G6

optifinePackages.optifine_1_14_3: init at 1.14.3_HD_U_F2
optifinePackages.optifine_1_14_2: init at 1.14.2_HD_U_F1

optifinePackages.optifine_1_13_1: init at 1.13.1_HD_U_E4
optifinePackages.optifine_1_13: init at 1.13_HD_U_E4

optifinePackages.optifine_1_12_1: init at 1.12.1_HD_U_G5
optifinePackages.optifine_1_12: init at 1.12_HD_U_G5

optifinePackages.optifine_1_11: init at 1.11_HD_U_G5

optifinePackages.optifine_1_10_2: init at 1.10.2_HD_U_I5

optifinePackages.optifine_1_9_2: init at 1.9.2_HD_U_E3
optifinePackages.optifine_1_9_0: init at 1.9.0_HD_U_I5

optifinePackages.optifine_1_8_8: init at 1.8.8_HD_U_I7
optifinePackages.optifine_1_8_0: init at 1.8.0_HD_U_I7

optifinePackages.optifine_1_7_2: init at 1.7.2_HD_U_F7

usertam 6de2d274 a6b17313

+218 -61
+11 -61
pkgs/tools/games/minecraft/optifine/default.nix
··· 1 1 { recurseIntoAttrs 2 2 , callPackage 3 + , lib 3 4 }: 4 5 5 - recurseIntoAttrs rec { 6 - optifine-latest = optifine_1_18_1; 7 - 8 - optifine_1_18_1 = callPackage ./generic.nix { 9 - version = "1.18.1_HD_U_H4"; 10 - sha256 = "sha256-MlFoVpshotzegpmYdvaeydivdSAqcCFpHyq+3k2B3Ow="; 11 - }; 12 - 13 - optifine_1_17_1 = callPackage ./generic.nix { 14 - version = "1.17.1_HD_U_H1"; 15 - sha256 = "sha256-HHt747bIHYY/WNAx19mNgvnLrLCqaKIqwXmmB7A895M="; 16 - }; 17 - 18 - optifine_1_16_5 = callPackage ./generic.nix { 19 - version = "1.16.5_HD_U_G8"; 20 - sha256 = "sha256-PHa8kO1EvOVnzufCDrLENhkm8jqG5TZ9WW9uYk0LSU8="; 21 - }; 22 - 23 - optifine_1_15_2 = callPackage ./generic.nix { 24 - version = "1.16.5_HD_U_G8"; 25 - sha256 = "sha256-PHa8kO1EvOVnzufCDrLENhkm8jqG5TZ9WW9uYk0LSU8="; 26 - }; 27 - 28 - optifine_1_14_4 = callPackage ./generic.nix { 29 - version = "1.14.4_HD_U_G5"; 30 - sha256 = "sha256-I+65vQO6yG4AQ0ZLAfX73ImsFKAQkTyrIOnQHldTibs="; 31 - }; 32 - 33 - optifine_1_13_2 = callPackage ./generic.nix { 34 - version = "1.13.2_HD_U_G5"; 35 - sha256 = "sha256-sjUQot8fPdbZTiLqt+exbF5T8kI5bLQevu7atW9Xu3E="; 36 - }; 37 - 38 - optifine_1_12_2 = callPackage ./generic.nix { 39 - version = "1.12.2_HD_U_G5"; 40 - sha256 = "sha256-OwAGeXdx/rl/LQ0pCK58mnjO+y5zCvHC6F0IqDm6Jx4="; 41 - }; 42 - 43 - optifine_1_11_2 = callPackage ./generic.nix { 44 - version = "1.11.2_HD_U_G5"; 45 - sha256 = "sha256-1sLUBtM5e5LDTUFCRZf9UeH6WOA8zY6TAmB9PCS5iv4="; 46 - }; 47 - 48 - optifine_1_10 = callPackage ./generic.nix { 49 - version = "1.10_HD_U_I5"; 50 - sha256 = "sha256-oKOsaNFnOKfhWLDDYG/0Z4h/ZCDtyJWS9LXPaKAApc0="; 51 - }; 52 - 53 - optifine_1_9_4 = callPackage ./generic.nix { 54 - version = "1.9.4_HD_U_I5"; 55 - sha256 = "sha256-t+OxIf0Tl/NZxUTl+LGnWRUhEwZ+vxiZfhclxEAf6yI="; 56 - }; 6 + # All versions are taken from `version.json` created by `update.py`, and realised with `generic.nix`. 7 + # The `update.py` is a web scraper script that writes the latest versions into `version.json`. 57 8 58 - optifine_1_8_9 = callPackage ./generic.nix { 59 - version = "1.8.9_HD_U_M5"; 60 - sha256 = "sha256-Jzl2CnD8pq5cfcgXvMYoPxj1Xjj6I3eNp/OHprckssQ="; 61 - }; 9 + # The `versions.json` can be automatically updated and committed with a commit summary. 10 + # To do so, change directory to nixpkgs root, and do: 11 + # $ nix-shell ./maintainers/scripts/update.nix --argstr package optifinePackages.optifine-latest --argstr commit true 62 12 63 - optifine_1_7_10 = callPackage ./generic.nix { 64 - version = "1.7.10_HD_U_E7"; 65 - sha256 = "sha256-i82dg94AGgWR9JgQXzafBwxH0skZJ3TVpbafZG5E+rQ="; 66 - }; 67 - } 13 + recurseIntoAttrs ( 14 + lib.mapAttrs 15 + (name: value: callPackage ./generic.nix value) 16 + (lib.importJSON ./versions.json) 17 + )
+5
pkgs/tools/games/minecraft/optifine/generic.nix
··· 22 22 23 23 nativeBuildInputs = [ jre makeWrapper ]; 24 24 25 + passthru.updateScript = { 26 + command = [ ./update.py ]; 27 + supportedFeatures = [ "commit" ]; 28 + }; 29 + 25 30 meta = with lib; { 26 31 homepage = "https://optifine.net/"; 27 32 description = "A Minecraft ${mcVersion} optimization mod";
+60
pkgs/tools/games/minecraft/optifine/update.py
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -I nixpkgs=./. -i python3 -p python3.pkgs.requests python3.pkgs.lxml nix 3 + 4 + from lxml import html 5 + import json 6 + import os.path 7 + import re 8 + import requests 9 + import subprocess 10 + 11 + def nix_prefetch_sha256(name): 12 + return subprocess.run(['nix-prefetch-url', '--type', 'sha256', 'https://optifine.net/download?f=' + name], capture_output=True, text=True).stdout.strip() 13 + 14 + # fetch download page 15 + sess = requests.session() 16 + page = sess.get('https://optifine.net/downloads') 17 + tree = html.fromstring(page.content) 18 + 19 + # parse and extract main jar file names 20 + href = tree.xpath('//tr[@class="downloadLine downloadLineMain"]/td[@class="colMirror"]/a/@href') 21 + expr = re.compile('(OptiFine_)([0-9.]*)(.*)\.jar') 22 + result = [ expr.search(x) for x in href ] 23 + 24 + # format name, version and hash for each file 25 + catalogue = {} 26 + for i, r in enumerate(result): 27 + index = r.group(1).lower() + r.group(2).replace('.', '_') 28 + version = r.group(2) + r.group(3) 29 + catalogue[index] = { 30 + "version": version, 31 + "sha256": nix_prefetch_sha256(r.group(0)) 32 + } 33 + 34 + # latest version should be the first entry 35 + if len(catalogue) > 0: 36 + catalogue['optifine-latest'] = list(catalogue.values())[0] 37 + 38 + # read previous versions 39 + d = os.path.dirname(os.path.abspath(__file__)) 40 + with open(os.path.join(d, 'versions.json'), 'r') as f: 41 + prev = json.load(f) 42 + 43 + # `maintainers/scripts/update.py` will extract stdout to write commit message 44 + # embed the commit message in json and print it 45 + changes = [ { 'commitMessage': 'optifinePackages: update versions\n\n' } ] 46 + 47 + # build a longest common subsequence, natural sorted by keys 48 + for key, value in sorted({**prev, **catalogue}.items(), key=lambda item: [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', item[0])]): 49 + if key not in prev: 50 + changes[0]['commitMessage'] += 'optifinePackages.{}: init at {}\n'.format(key, value['version']) 51 + elif value['version'] != prev[key]['version']: 52 + changes[0]['commitMessage'] += 'optifinePackages.{}: {} -> {}\n'.format(key, prev[key]['version'], value['version']) 53 + 54 + # print the changes in stdout 55 + print(json.dumps(changes)) 56 + 57 + # write catalogue to file 58 + with open(os.path.join(d, 'versions.json'), 'w') as f: 59 + json.dump(catalogue, f, indent=4) 60 + f.write('\n')
+142
pkgs/tools/games/minecraft/optifine/versions.json
··· 1 + { 2 + "optifine_1_19_2": { 3 + "version": "1.19.2_HD_U_H9", 4 + "sha256": "1xyg98i7zar5x3xbgpn2nm48mc3r9q6yqisxnqk3g254ghjcy4xx" 5 + }, 6 + "optifine_1_19_1": { 7 + "version": "1.19.1_HD_U_H9", 8 + "sha256": "1p5a3i383ca2l3snsm36dyngfz9a1f9xffaxk439149h0i2d0nlj" 9 + }, 10 + "optifine_1_19": { 11 + "version": "1.19_HD_U_H9", 12 + "sha256": "19zjvwg0sr6279plj5qxj7hdlw9w8q3qd78dg6911m356z6g87ah" 13 + }, 14 + "optifine_1_18_2": { 15 + "version": "1.18.2_HD_U_H7", 16 + "sha256": "169ajvw3zrb0xrz2h1z3x6vdr4122s8m3rxb461s8y2fk6i4y9kr" 17 + }, 18 + "optifine_1_18_1": { 19 + "version": "1.18.1_HD_U_H6", 20 + "sha256": "0nh8ls306rs1qcbyibb6idapws4z5cyaqrgh9ipvm1vcwvxxj9ys" 21 + }, 22 + "optifine_1_18": { 23 + "version": "1.18_HD_U_H3", 24 + "sha256": "11zqiwmqj4ja6l87acwzs7cnabsgn2x36510hap8gj139l3vbrvb" 25 + }, 26 + "optifine_1_17_1": { 27 + "version": "1.17.1_HD_U_H1", 28 + "sha256": "14zp7jq0g9krq4ma4s5an2ncpyc2ipcxfcfhb0zqc7f8nvipnyqw" 29 + }, 30 + "optifine_1_16_5": { 31 + "version": "1.16.5_HD_U_G8", 32 + "sha256": "0ks91d6n4vkgb5ykdrc67br2c69nqjr0xhp7rrkybg24xn8bqxiw" 33 + }, 34 + "optifine_1_16_4": { 35 + "version": "1.16.4_HD_U_G7", 36 + "sha256": "063zdfmhzq5jgfdy27c8b0008sribl8rbvfxa7nkk86qwpvz6v8h" 37 + }, 38 + "optifine_1_16_3": { 39 + "version": "1.16.3_HD_U_G5", 40 + "sha256": "0pipr77jrva5wrllil40myansyrxxvcckxlvf4k2vhqf2g1mfigl" 41 + }, 42 + "optifine_1_16_2": { 43 + "version": "1.16.2_HD_U_G5", 44 + "sha256": "1iav08qqk7wb43ars9nilbgm4ybdi02pd0ahb0xy7clkxvlnjcx2" 45 + }, 46 + "optifine_1_16_1": { 47 + "version": "1.16.1_HD_U_G2", 48 + "sha256": "1gwbxv3dx82lxkbp9gaf1nqczkcxdzlfsspxlrv6gcn7w8vvwf5v" 49 + }, 50 + "optifine_1_15_2": { 51 + "version": "1.15.2_HD_U_G6", 52 + "sha256": "10qz6y3h80s56wsk3f5wwg52d0d7mkklhhhvgp6y84zlzq6xdbq4" 53 + }, 54 + "optifine_1_14_4": { 55 + "version": "1.14.4_HD_U_G5", 56 + "sha256": "1fw9adbixl7942mkr48hl0aar2fwzgsh2js68c06xj5s0fyvkvi3" 57 + }, 58 + "optifine_1_14_3": { 59 + "version": "1.14.3_HD_U_F2", 60 + "sha256": "00wys29pmgfsc4j2jy2mpfl493vy52jdxprxl92hcg2xz77ipqjh" 61 + }, 62 + "optifine_1_14_2": { 63 + "version": "1.14.2_HD_U_F1", 64 + "sha256": "0645d38z8llnnv546zfkflqp441kxvf8vd0l3zjsls81w3bpc6n8" 65 + }, 66 + "optifine_1_13_2": { 67 + "version": "1.13.2_HD_U_G5", 68 + "sha256": "0wdvaxpvbnpfpqgb8v1r8br56pkcn7kvgsi29vcxcg8zvyi10ddj" 69 + }, 70 + "optifine_1_13_1": { 71 + "version": "1.13.1_HD_U_E4", 72 + "sha256": "0r5x703pgwi8vakii0nhlij7j24zkq1xvyscqd8lv6w3yq7xd5b3" 73 + }, 74 + "optifine_1_13": { 75 + "version": "1.13_HD_U_E4", 76 + "sha256": "0x8ynnm9dglzrajb3ffmvmwkx6ipzs306qadwhcp0ah148wiz1l3" 77 + }, 78 + "optifine_1_12_2": { 79 + "version": "1.12.2_HD_U_G5", 80 + "sha256": "07i7p8wsh22xx31g22kk5vxwwy4sgjp0ha8d5mzvkzkifxwhc01v" 81 + }, 82 + "optifine_1_12_1": { 83 + "version": "1.12.1_HD_U_G5", 84 + "sha256": "1jn02mknpf622q6i942v63x3kzs9q7n394x188nfh508rn9fpipn" 85 + }, 86 + "optifine_1_12": { 87 + "version": "1.12_HD_U_G5", 88 + "sha256": "1slbz0ss670gwlzv4dw362cc5wlpxjv81004n04vcsip8l491pdb" 89 + }, 90 + "optifine_1_11_2": { 91 + "version": "1.11.2_HD_U_G5", 92 + "sha256": "1zlap4j3qzb00a9qxk9ww1cgmqaiznblahj19p1r4yrrsc3d9hnn" 93 + }, 94 + "optifine_1_11": { 95 + "version": "1.11_HD_U_G5", 96 + "sha256": "1azgnsqbl71087i83dn6wyb7qdz2wa42f04cabnlhmdcmdd4kcsj" 97 + }, 98 + "optifine_1_10_2": { 99 + "version": "1.10.2_HD_U_I5", 100 + "sha256": "0m05xqcmh8kaqvlb57yz0mslf22wr89wamlf1q1cma4fn385i57f" 101 + }, 102 + "optifine_1_10": { 103 + "version": "1.10_HD_U_I5", 104 + "sha256": "1kd502h6ikxmyj99bj7d41j7z237yipn1hxhb3hsff37s5lar8x0" 105 + }, 106 + "optifine_1_9_4": { 107 + "version": "1.9.4_HD_U_I5", 108 + "sha256": "08pb3x0c898pgsciigvy0q9j25arlyqzira4qmcz75qkzlhv3qxp" 109 + }, 110 + "optifine_1_9_2": { 111 + "version": "1.9.2_HD_U_E3", 112 + "sha256": "1bgyxhs554wswavidsnmm6mahngndd5bc98jma6wgi7g5qrngcrp" 113 + }, 114 + "optifine_1_9_0": { 115 + "version": "1.9.0_HD_U_I5", 116 + "sha256": "1nyiv91hm9765244xa6mh9cf62l329ppm8rdib35lb3ghgasid9n" 117 + }, 118 + "optifine_1_8_9": { 119 + "version": "1.8.9_HD_U_M5", 120 + "sha256": "1i5j4jvsd1zkly6pf8zs71gga61z533bq5y8gmfax9pwf057cf97" 121 + }, 122 + "optifine_1_8_8": { 123 + "version": "1.8.8_HD_U_I7", 124 + "sha256": "0x4aambs2kww9lanm4kp2jw4h3cwk25fa6xwsm9r7a1jv42jlyay" 125 + }, 126 + "optifine_1_8_0": { 127 + "version": "1.8.0_HD_U_I7", 128 + "sha256": "1ig013l61f7yj061ncnvmjsp9j2nd8fy8j03f8ry045d0s7idnfk" 129 + }, 130 + "optifine_1_7_10": { 131 + "version": "1.7.10_HD_U_E7", 132 + "sha256": "1d7s8ip697xnlpap89qrr794f307kwv5y44qyj8ha6h0vs1rvkcb" 133 + }, 134 + "optifine_1_7_2": { 135 + "version": "1.7.2_HD_U_F7", 136 + "sha256": "18lzyh639mi7r2hzwnmxv0a6v1ay7dk9bzasvwff82dxq0y9zi7m" 137 + }, 138 + "optifine-latest": { 139 + "version": "1.19.2_HD_U_H9", 140 + "sha256": "1xyg98i7zar5x3xbgpn2nm48mc3r9q6yqisxnqk3g254ghjcy4xx" 141 + } 142 + }