tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
lol
0
fork
atom
overview
issues
pulls
pipelines
asterisk: add update script
Yorick van Pelt
4 years ago
ab3980e7
f1d1ed4f
+68
-40
3 changed files
expand all
collapse all
unified
split
pkgs
servers
asterisk
default.nix
update.py
versions.json
+14
-40
pkgs/servers/asterisk/default.nix
···
90
90
sha256 = "1s9idx2miwk178sa731ig9r4fzx4gy1q8xazfqyd7q4lfd70s1cy";
91
91
};
92
92
93
93
-
in rec {
93
93
+
# auto-generated by update.py
94
94
+
versions = lib.mapAttrs (_: {version, sha256}: common {
95
95
+
inherit version sha256;
96
96
+
externals = {
97
97
+
"externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10;
98
98
+
"addons/mp3" = mp3-202;
99
99
+
};
100
100
+
}) (builtins.fromJSON (builtins.readFile ./versions.json));
101
101
+
102
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
103
-
asterisk-lts = asterisk_18;
104
104
-
asterisk-stable = asterisk_18;
105
105
-
asterisk = asterisk_18;
106
106
-
107
107
-
asterisk_13 = common {
108
108
-
version = "13.38.2";
109
109
-
sha256 = "1v7wgsa9vf7qycg3xpvmn2bkandkfh3x15pr8ylg0w0gvfkkf5b9";
110
110
-
externals = {
111
111
-
"externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10;
112
112
-
"addons/mp3" = mp3-202;
113
113
-
};
114
114
-
};
115
115
-
116
116
-
asterisk_16 = common {
117
117
-
version = "16.17.0";
118
118
-
sha256 = "1bzlsk9k735qf8a693b6sa548my7m9ahavmdicwmc14px70wrvnw";
119
119
-
externals = {
120
120
-
"externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10;
121
121
-
"addons/mp3" = mp3-202;
122
122
-
};
123
123
-
};
112
112
+
asterisk-lts = versions.asterisk_18;
113
113
+
asterisk-stable = versions.asterisk_18;
114
114
+
asterisk = versions.asterisk_18;
124
115
125
125
-
asterisk_17 = common {
126
126
-
version = "17.9.3";
127
127
-
sha256 = "0nhk0izrxx24pz806fwnhidjmciwrkcrsvxvhrdvibiqyvfk8yk7";
128
128
-
externals = {
129
129
-
"externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10;
130
130
-
"addons/mp3" = mp3-202;
131
131
-
};
132
132
-
};
133
133
-
134
134
-
asterisk_18 = common {
135
135
-
version = "18.3.0";
136
136
-
sha256 = "1xb953i9ay82vcdv8izi5dd5xnspcsvg10ajiyph377jw2xnd5fb";
137
137
-
externals = {
138
138
-
"externals_cache/pjproject-2.10.tar.bz2" = pjproject_2_10;
139
139
-
"addons/mp3" = mp3-202;
140
140
-
};
141
141
-
};
142
142
-
}
116
116
+
} // versions
+36
pkgs/servers/asterisk/update.py
···
1
1
+
#!/usr/bin/env nix-shell
2
2
+
#!nix-shell -i python3 -p python39 python39.pkgs.packaging python39.pkgs.beautifulsoup4 python39.pkgs.requests
3
3
+
from packaging import version
4
4
+
from bs4 import BeautifulSoup
5
5
+
import re, requests, json
6
6
+
7
7
+
URL = "https://downloads.asterisk.org/pub/telephony/asterisk"
8
8
+
9
9
+
page = requests.get(URL)
10
10
+
changelog = re.compile("^ChangeLog-\d+\.\d+\.\d+$")
11
11
+
changelogs = [a.get_text() for a in BeautifulSoup(page.text, 'html.parser').find_all('a') if changelog.match(a.get_text())]
12
12
+
major_versions = {}
13
13
+
for changelog in changelogs:
14
14
+
v = version.parse(changelog.removeprefix("ChangeLog-"))
15
15
+
major_versions.setdefault(v.major, []).append(v)
16
16
+
17
17
+
out = {}
18
18
+
for mv in major_versions.keys():
19
19
+
v = max(major_versions[mv])
20
20
+
sha = requests.get(f"{URL}/asterisk-{v}.sha256").text.split()[0]
21
21
+
out["asterisk_" + str(mv)] = {
22
22
+
"version": str(v),
23
23
+
"sha256": sha
24
24
+
}
25
25
+
26
26
+
try:
27
27
+
with open("versions.json", "r") as in_file:
28
28
+
in_data = json.loads(in_file.read())
29
29
+
for v in in_data.keys():
30
30
+
print(v + ":", in_data[v]["version"], "->", out[v]["version"])
31
31
+
except:
32
32
+
# nice to have for the PR, not a requirement
33
33
+
pass
34
34
+
35
35
+
with open("versions.json", "w") as out_file:
36
36
+
out_file.write(json.dumps(out, sort_keys=True, indent=2))
+18
pkgs/servers/asterisk/versions.json
···
1
1
+
{
2
2
+
"asterisk_13": {
3
3
+
"sha256": "1v7wgsa9vf7qycg3xpvmn2bkandkfh3x15pr8ylg0w0gvfkkf5b9",
4
4
+
"version": "13.38.2"
5
5
+
},
6
6
+
"asterisk_16": {
7
7
+
"sha256": "1bzlsk9k735qf8a693b6sa548my7m9ahavmdicwmc14px70wrvnw",
8
8
+
"version": "16.17.0"
9
9
+
},
10
10
+
"asterisk_17": {
11
11
+
"sha256": "0nhk0izrxx24pz806fwnhidjmciwrkcrsvxvhrdvibiqyvfk8yk7",
12
12
+
"version": "17.9.3"
13
13
+
},
14
14
+
"asterisk_18": {
15
15
+
"sha256": "1xb953i9ay82vcdv8izi5dd5xnspcsvg10ajiyph377jw2xnd5fb",
16
16
+
"version": "18.3.0"
17
17
+
}
18
18
+
}