Coverage for dlabel/dockerfile.py: 74%
35 statements
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-25 23:32 +0000
« prev ^ index » next coverage.py v7.10.0, created at 2025-07-25 23:32 +0000
1import docker
2from .util import get_diff, get_archives
3from logging import getLogger
5_log = getLogger(__name__)
8def get_dockerfile(container: docker.models.containers.Container, # noqa: C901
9 ignore, labels, do_output: bool):
10 """make Dockerfile from running container"""
11 import shlex
12 deleted, added, modified, link = get_diff(container, ignore)
13 if do_output: 13 ↛ 14line 13 didn't jump to line 14 because the condition on line 13 was never true
14 ignore_str = """*
15!added.tar.gz
16!modified.tar.gz
17"""
18 yield ".dockerignore", ignore_str.encode()
19 added_tar = get_archives(container, added, ignore)
20 if added_tar:
21 yield "added.tar.gz", added_tar
22 modified_tar = get_archives(container, modified, ignore)
23 if modified_tar:
24 yield "modified.tar.gz", modified_tar
25 from_image = container.attrs.get("Config", {}).get("Image")
26 res: list[str] = []
27 res.append(f"FROM {from_image}")
28 if deleted:
29 res.append("RUN rm -rf " + shlex.join(sorted(deleted)))
30 if added:
31 res.append("ADD added.tar.gz /")
32 if modified:
33 res.append("ADD modified.tar.gz /")
34 for k, v in sorted(link.items()): 34 ↛ 35line 34 didn't jump to line 35 because the loop on line 34 never started
35 res.append(f"RUN ln -sf {shlex.quote(v)} {shlex.quote(k)}")
36 if labels:
37 image_labels = container.image.labels
38 for k, v in container.labels.items():
39 if k.startswith("com.docker.compose."):
40 continue
41 if image_labels.get(k) != v:
42 res.append(f"LABEL {shlex.quote(k)}={shlex.quote(v)}")
43 yield "Dockerfile", "\n".join(res+[""]).encode()