Skip to content

Commit 140b7b2

Browse files
Jan EilJan Eil
authored andcommitted
Add language docker_image
1 parent b4c989f commit 140b7b2

File tree

5 files changed

+63
-0
lines changed

5 files changed

+63
-0
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
- id: {id}
2+
name: {name}
3+
description: {description!r}
4+
entry: '{entry}:{version}'
5+
language: {language}
6+
'{match_key}': {match_val}
7+
args: {args}
8+
require_serial: {require_serial}
9+
additional_dependencies: {additional_dependencies}
10+
minimum_pre_commit_version: {minimum_pre_commit_version!r}

pre_commit_mirror_maker/languages.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
3660
def 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

4872
LIST_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,

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ console_scripts =
3535
pre_commit_mirror_maker =
3636
all/.pre-commit-hooks.yaml
3737
all/.version
38+
docker_image/.pre-commit-hooks.yaml
3839
node/.npmignore
3940
node/*
4041
python/*

tests/languages_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from pre_commit_mirror_maker.languages import docker_image_get_package_versions
34
from pre_commit_mirror_maker.languages import node_get_package_versions
45
from pre_commit_mirror_maker.languages import python_get_package_versions
56
from pre_commit_mirror_maker.languages import ruby_get_package_versions
@@ -39,3 +40,9 @@ def test_rust_get_package_version_output():
3940
ret = rust_get_package_versions('clap')
4041
assert ret
4142
assert_all_text(ret)
43+
44+
45+
def test_docker_image_get_package_version_output():
46+
ret = docker_image_get_package_versions('alpine/flake8')
47+
assert ret
48+
assert_all_text(ret)

tests/make_repo_test.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,23 @@ def test_rust_integration(in_git_dir):
236236
assert _cmd('git', 'log', '--oneline')
237237

238238
# TODO: test that the package is installable
239+
240+
241+
def test_docker_image_integration(in_git_dir):
242+
make_repo(
243+
'.',
244+
language='docker_image', name='alpine/flake8', description='',
245+
entry='alpine/flake8', id='flake8-docker', match_key='files',
246+
match_val=r'\.py$', args='[]', require_serial='false',
247+
minimum_pre_commit_version='0',
248+
)
249+
# Our files should exist
250+
assert in_git_dir.join('.version').exists()
251+
assert in_git_dir.join('.pre-commit-hooks.yaml').exists()
252+
253+
# Should have made _some_ tags
254+
assert _cmd('git', 'tag', '-l')
255+
# Should have made _some_ commits
256+
assert _cmd('git', 'log', '--oneline')
257+
258+
# TODO: test that the package is installable

0 commit comments

Comments
 (0)