diff --git a/podman_compose.py b/podman_compose.py index 28408d9..d523924 100755 --- a/podman_compose.py +++ b/podman_compose.py @@ -2752,8 +2752,10 @@ def container_to_build_args( build_args = [] if not is_path_git_url(ctx): + custom_dockerfile_given = False if dockerfile: dockerfile = os.path.join(ctx, dockerfile) + custom_dockerfile_given = True else: dockerfile_alts = [ "Containerfile", @@ -2773,6 +2775,9 @@ def container_to_build_args( dockerfile = os.path.normpath(os.path.join(ctx, dockerfile)) build_args.extend(["-f", dockerfile]) else: + if custom_dockerfile_given: + # custom dockerfile name was also not found in the file system + raise OSError(f"Dockerfile not found in {dockerfile}") raise OSError(f"Dockerfile not found in {ctx}") build_args.extend(["-t", cnt["image"]]) diff --git a/tests/integration/build_fail/context_no_file/NotDockerfile b/tests/integration/build_fail/context_no_file/NotDockerfile new file mode 100644 index 0000000..9daeafb --- /dev/null +++ b/tests/integration/build_fail/context_no_file/NotDockerfile @@ -0,0 +1 @@ +test diff --git a/tests/integration/build_fail/docker-compose.yml b/tests/integration/build_fail/docker-compose.yml index 5641a64..818cba7 100644 --- a/tests/integration/build_fail/docker-compose.yml +++ b/tests/integration/build_fail/docker-compose.yml @@ -3,3 +3,12 @@ services: test: build: ./context image: build-fail-img + test_no_dockerfile: + build: + context: ./context_no_file + image: busybox + test_no_custom_dockerfile: + build: + context: ./context_no_file + dockerfile: Dockerfile-alt + image: busybox diff --git a/tests/integration/build_fail/test_podman_compose_build_fail.py b/tests/integration/build_fail/test_podman_compose_build_fail.py index 44dd920..010a673 100644 --- a/tests/integration/build_fail/test_podman_compose_build_fail.py +++ b/tests/integration/build_fail/test_podman_compose_build_fail.py @@ -22,9 +22,48 @@ class TestComposeBuildFail(unittest.TestCase, RunSubprocessMixin): "-f", compose_yaml_path(), "build", + "test", ], expected_returncode=127, ) self.assertIn("RUN this_command_does_not_exist", str(output)) self.assertIn("this_command_does_not_exist: not found", str(error)) self.assertIn("while running runtime: exit status 127", str(error)) + + def test_dockerfile_does_not_exist(self): + out, error = self.run_subprocess_assert_returncode( + [ + podman_compose_path(), + "-f", + compose_yaml_path(), + "build", + "test_no_dockerfile", + ], + expected_returncode=1, + ) + error = error.decode('utf-8') + result = '\n'.join(error.splitlines()[-1:]) + + expected_path = os.path.join(os.path.dirname(__file__), "context_no_file") + expected = f'OSError: Dockerfile not found in {expected_path}' + + self.assertEqual(expected, result) + + def test_custom_dockerfile_does_not_exist(self): + out, error = self.run_subprocess_assert_returncode( + [ + podman_compose_path(), + "-f", + compose_yaml_path(), + "build", + "test_no_custom_dockerfile", + ], + expected_returncode=1, + ) + error = error.decode('utf-8') + result = '\n'.join(error.splitlines()[-1:]) + + expected_path = os.path.join(os.path.dirname(__file__), "context_no_file/Dockerfile-alt") + expected = f'OSError: Dockerfile not found in {expected_path}' + + self.assertEqual(expected, result)