asterisk: add update script

+68 -40
+14 -40
pkgs/servers/asterisk/default.nix
··· 90 90 sha256 = "1s9idx2miwk178sa731ig9r4fzx4gy1q8xazfqyd7q4lfd70s1cy"; 91 91 }; 92 92 93 - in rec { 93 + # auto-generated by update.py 94 + versions = lib.mapAttrs (_: {version, sha256}: common { 95 + inherit version sha256; 96 + externals = { 97 + "externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10; 98 + "addons/mp3" = mp3-202; 99 + }; 100 + }) (builtins.fromJSON (builtins.readFile ./versions.json)); 101 + 102 + in { 94 103 # Supported releases (as of 2020-10-26). 95 104 # Source: https://wiki.asterisk.org/wiki/display/AST/Asterisk+Versions 96 105 # Exact version can be found at https://www.asterisk.org/downloads/asterisk/all-asterisk-versions/ ··· 100 109 # 16.x LTS 2018-10-09 2022-10-09 2023-10-09 101 110 # 17.x Standard 2019-10-28 2020-10-28 2021-10-28 102 111 # 18.x LTS 2020-10-20 2024-10-20 2025-10-20 103 - asterisk-lts = asterisk_18; 104 - asterisk-stable = asterisk_18; 105 - asterisk = asterisk_18; 106 - 107 - asterisk_13 = common { 108 - version = "13.38.2"; 109 - sha256 = "1v7wgsa9vf7qycg3xpvmn2bkandkfh3x15pr8ylg0w0gvfkkf5b9"; 110 - externals = { 111 - "externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10; 112 - "addons/mp3" = mp3-202; 113 - }; 114 - }; 115 - 116 - asterisk_16 = common { 117 - version = "16.17.0"; 118 - sha256 = "1bzlsk9k735qf8a693b6sa548my7m9ahavmdicwmc14px70wrvnw"; 119 - externals = { 120 - "externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10; 121 - "addons/mp3" = mp3-202; 122 - }; 123 - }; 112 + asterisk-lts = versions.asterisk_18; 113 + asterisk-stable = versions.asterisk_18; 114 + asterisk = versions.asterisk_18; 124 115 125 - asterisk_17 = common { 126 - version = "17.9.3"; 127 - sha256 = "0nhk0izrxx24pz806fwnhidjmciwrkcrsvxvhrdvibiqyvfk8yk7"; 128 - externals = { 129 - "externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10; 130 - "addons/mp3" = mp3-202; 131 - }; 132 - }; 133 - 134 - asterisk_18 = common { 135 - version = "18.3.0"; 136 - sha256 = "1xb953i9ay82vcdv8izi5dd5xnspcsvg10ajiyph377jw2xnd5fb"; 137 - externals = { 138 - "externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10; 139 - "addons/mp3" = mp3-202; 140 - }; 141 - }; 142 - } 116 + } // versions
+36
pkgs/servers/asterisk/update.py
··· 1 + #!/usr/bin/env nix-shell 2 + #!nix-shell -i python3 -p python39 python39.pkgs.packaging python39.pkgs.beautifulsoup4 python39.pkgs.requests 3 + from packaging import version 4 + from bs4 import BeautifulSoup 5 + import re, requests, json 6 + 7 + URL = "https://downloads.asterisk.org/pub/telephony/asterisk" 8 + 9 + page = requests.get(URL) 10 + changelog = re.compile("^ChangeLog-\d+\.\d+\.\d+$") 11 + changelogs = [a.get_text() for a in BeautifulSoup(page.text, 'html.parser').find_all('a') if changelog.match(a.get_text())] 12 + major_versions = {} 13 + for changelog in changelogs: 14 + v = version.parse(changelog.removeprefix("ChangeLog-")) 15 + major_versions.setdefault(v.major, []).append(v) 16 + 17 + out = {} 18 + for mv in major_versions.keys(): 19 + v = max(major_versions[mv]) 20 + sha = requests.get(f"{URL}/asterisk-{v}.sha256").text.split()[0] 21 + out["asterisk_" + str(mv)] = { 22 + "version": str(v), 23 + "sha256": sha 24 + } 25 + 26 + try: 27 + with open("versions.json", "r") as in_file: 28 + in_data = json.loads(in_file.read()) 29 + for v in in_data.keys(): 30 + print(v + ":", in_data[v]["version"], "->", out[v]["version"]) 31 + except: 32 + # nice to have for the PR, not a requirement 33 + pass 34 + 35 + with open("versions.json", "w") as out_file: 36 + out_file.write(json.dumps(out, sort_keys=True, indent=2))
+18
pkgs/servers/asterisk/versions.json
··· 1 + { 2 + "asterisk_13": { 3 + "sha256": "1v7wgsa9vf7qycg3xpvmn2bkandkfh3x15pr8ylg0w0gvfkkf5b9", 4 + "version": "13.38.2" 5 + }, 6 + "asterisk_16": { 7 + "sha256": "1bzlsk9k735qf8a693b6sa548my7m9ahavmdicwmc14px70wrvnw", 8 + "version": "16.17.0" 9 + }, 10 + "asterisk_17": { 11 + "sha256": "0nhk0izrxx24pz806fwnhidjmciwrkcrsvxvhrdvibiqyvfk8yk7", 12 + "version": "17.9.3" 13 + }, 14 + "asterisk_18": { 15 + "sha256": "1xb953i9ay82vcdv8izi5dd5xnspcsvg10ajiyph377jw2xnd5fb", 16 + "version": "18.3.0" 17 + } 18 + }