@@ -33,6 +33,30 @@ def rust_get_package_versions(package_name: str) -> list[str]:
3333 return list (reversed ([version ['num' ] for version in resp ['versions' ]]))
3434
3535
36+ def docker_image_get_package_versions (package_name : str ) -> list [str ]:
37+ # If package_name contains a slash, it's a user/org repository,
38+ # otherwise it's an official repository
39+ if '/' not in package_name :
40+ package_name = f'library/{ package_name } '
41+ base_url = (
42+ 'https://hub.docker.com/v2/repositories/'
43+ f'{ package_name } /tags?page_size=100'
44+ )
45+
46+ all_tags : list [str ] = []
47+ url = base_url
48+
49+ # Fetch all pages of results
50+ while url :
51+ resp = json .load (urllib .request .urlopen (url ))
52+ # Add tags from the current page
53+ all_tags .extend (tag ['name' ] for tag in resp ['results' ])
54+ # Get URL for next page, if any
55+ url = resp .get ('next' )
56+
57+ return list (reversed (all_tags ))
58+
59+
3660def node_get_additional_dependencies (
3761 package_name : str , package_version : str ,
3862) -> list [str ]:
@@ -46,6 +70,7 @@ def rust_get_additional_dependencies(
4670
4771
4872LIST_VERSIONS = {
73+ 'docker_image' : docker_image_get_package_versions ,
4974 'node' : node_get_package_versions ,
5075 'python' : python_get_package_versions ,
5176 'ruby' : ruby_get_package_versions ,
0 commit comments