From e311c885cf29d179f5c73da56b1d84ae729140ce Mon Sep 17 00:00:00 2001 From: Miro <200482516+Mirochill@users.noreply.github.com> Date: Mon, 25 May 2026 21:09:07 +0200 Subject: [PATCH] Detect lowercase prefixed Dockerfile names Signed-off-by: Miro <200482516+Mirochill@users.noreply.github.com> --- src/container_inspector/dockerfile.py | 45 ++++++++++--------- .../container-inspector.dockerfile | 2 + tests/test_dockerfile.py | 11 +++++ 3 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 tests/data/dockerfiles/container-inspector.dockerfile diff --git a/src/container_inspector/dockerfile.py b/src/container_inspector/dockerfile.py index 5228b67..abf0576 100755 --- a/src/container_inspector/dockerfile.py +++ b/src/container_inspector/dockerfile.py @@ -32,7 +32,7 @@ def get_dockerfile(location): otherwise return None. """ fn = path.basename(location) - if not "Dockerfile" in fn: + if "dockerfile" not in fn.lower(): return {} if TRACE: @@ -43,27 +43,28 @@ def get_dockerfile(location): # assign the comments before an instruction line to a line "comment" attribute # assign end of line comment to the line # assign top of file and end of file comments to file level comment attribute - df = dockerfile_parse.DockerfileParser(location) - - df_data = dict() - df_data["location"] = location - df_data["base_image"] = df.baseimage - df_data["instructions"] = [] - - for entry in df.structure: - entry = dict( - [ - (k, v) - for k, v in sorted(entry.items()) - if k - in ( - "instruction", - "startline", - "value", - ) - ] - ) - df_data["instructions"].append(entry) + with open(location, "rb") as df_file: + df = dockerfile_parse.DockerfileParser(fileobj=df_file) + + df_data = dict() + df_data["location"] = location + df_data["base_image"] = df.baseimage + df_data["instructions"] = [] + + for entry in df.structure: + entry = dict( + [ + (k, v) + for k, v in sorted(entry.items()) + if k + in ( + "instruction", + "startline", + "value", + ) + ] + ) + df_data["instructions"].append(entry) return {location: df_data} except: if TRACE: diff --git a/tests/data/dockerfiles/container-inspector.dockerfile b/tests/data/dockerfiles/container-inspector.dockerfile new file mode 100644 index 0000000..265295f --- /dev/null +++ b/tests/data/dockerfiles/container-inspector.dockerfile @@ -0,0 +1,2 @@ +FROM alpine:3.20 +RUN echo hello diff --git a/tests/test_dockerfile.py b/tests/test_dockerfile.py index d31622b..158ad1c 100644 --- a/tests/test_dockerfile.py +++ b/tests/test_dockerfile.py @@ -10,12 +10,23 @@ from commoncode.testcase import FileBasedTesting +from container_inspector.dockerfile import get_dockerfile from container_inspector.dockerfile import normalized_layer_command class TestDockerfile(FileBasedTesting): test_data_dir = os.path.join(os.path.dirname(__file__), "data") + def test_get_dockerfile_accepts_lowercase_prefixed_dockerfile_name(self): + test_file = os.path.join( + self.test_data_dir, + "dockerfiles", + "container-inspector.dockerfile", + ) + dockerfiles = get_dockerfile(test_file) + assert test_file in dockerfiles + assert "alpine:3.20" == dockerfiles[test_file]["base_image"] + def test_normalized_layer_command(self): # tuple of command and expected result tuples test_data = [