32
32
CASSANDRA_ENDPOINT = 'https://dlcdn.apache.org/cassandra/'
33
33
34
34
CASSANDRA3_REGEX = re .compile (r'a href="(3)\.(\d+)\.(\d+)/"' )
35
+ CASSANDRA4_REGEX = re .compile (r'a href="(4)\.(\d+)\.(\d+)/"' )
35
36
36
37
COMMAND_LINE_ARGUMENT = re .compile (
37
- r'((?:(scylla-oss-stable):(\d+))|(?:(scylla-enterprise-stable):(\d+))|(?:(cassandra3-stable):(\d+))|(?:(scylla-oss-rc))|(?:(scylla-enterprise-rc)))' )
38
+ r'((?:(scylla-oss-stable):(\d+))|(?:(scylla-enterprise-stable):(\d+))|(?:(cassandra3-stable):(\d+))|(?:(cassandra4-stable):(\d+))|(?:( scylla-oss-rc))|(?:(scylla-enterprise-rc)))' )
38
39
39
40
40
41
def fetch_last_scylla_oss_minor_versions (count ):
@@ -177,13 +178,34 @@ def fetch_last_cassandra3_minor_versions(count):
177
178
data = [f'{ e [0 ]} .{ e [1 ]} .{ e [2 ]} ' for e in data ]
178
179
return data
179
180
181
+ def fetch_last_cassandra4_minor_versions (count ):
182
+ # Download folder listing for Cassandra download site
183
+ data = requests .get (CASSANDRA_ENDPOINT ).text
184
+
185
+ # Parse only those version numbers which match '4.NUM.NUM'
186
+ # into tuple (4, NUM, NUM)
187
+ data = CASSANDRA4_REGEX .finditer (data )
188
+ data = map (lambda e : e .groups (), data )
189
+ data = map (lambda e : tuple (map (int , e )), data )
190
+
191
+ # Group by (major, minor) and select latest patch version
192
+ data = sorted (data )
193
+ data = groupby (data , key = lambda e : (e [0 ], e [1 ]))
194
+ data = ((e [0 ][0 ], e [0 ][1 ], max (e [1 ])[2 ])
195
+ for e in data )
196
+
197
+ # Return the latest ones
198
+ data = list (data )[- count :]
199
+ data = [f'{ e [0 ]} .{ e [1 ]} .{ e [2 ]} ' for e in data ]
200
+ return data
201
+
180
202
181
203
if __name__ == '__main__' :
182
204
names = set ()
183
205
184
206
for arg in sys .argv [1 :]:
185
207
if not COMMAND_LINE_ARGUMENT .fullmatch (arg ):
186
- print ("Usage:" , sys .argv [0 ], "[scylla-oss-stable:COUNT] [scylla-oss-rc] [scylla-enterprise-stable:COUNT] [scylla-enterprise-rc] [cassandra3-stable:COUNT]..." , file = sys .stderr )
208
+ print ("Usage:" , sys .argv [0 ], "[scylla-oss-stable:COUNT] [scylla-oss-rc] [scylla-enterprise-stable:COUNT] [scylla-enterprise-rc] [cassandra3-stable:COUNT] [cassandra4-stable:COUNT] ..." , file = sys .stderr )
187
209
sys .exit (1 )
188
210
189
211
groups = COMMAND_LINE_ARGUMENT .match (arg ).groups ()
@@ -198,6 +220,9 @@ def fetch_last_cassandra3_minor_versions(count):
198
220
elif mode_name == 'cassandra3-stable' :
199
221
names .update (
200
222
fetch_last_cassandra3_minor_versions (int (groups [1 ])))
223
+ elif mode_name == 'cassandra4-stable' :
224
+ names .update (
225
+ fetch_last_cassandra4_minor_versions (int (groups [1 ])))
201
226
elif mode_name == 'scylla-oss-rc' :
202
227
names .update (fetch_all_scylla_oss_rc_versions ())
203
228
elif mode_name == 'scylla-enterprise-rc' :
0 commit comments