Skip to content

Commit 0def994

Browse files
committed
feat(docks, generate_doc): implement example generation in doc generation
1 parent 16d1b54 commit 0def994

1 file changed

Lines changed: 53 additions & 11 deletions

File tree

docks/generate_doc.py

Lines changed: 53 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,41 @@
11
"""
2+
Generates Dockerfile documentation with a Docker build example.
23
"""
34

45
from .base_image import extract_base_images
56
from .files import extract_files
67
from .ports import extract_exposed_ports
78
from .variables import extract_variables
9+
from .generate_example import extract_dockerfile_details, generate_docker_build_markdown
10+
from .mounts import extract_mounts
811

912

1013
def generate_markdown(
11-
dockerfile_path: str, output_path: str = "dockerfile-doc.md", verbose: str = True
14+
dockerfile_path: str, output_path: str = "dockerfile-doc.md", verbose: bool = True
1215
) -> None:
1316
"""
1417
Generates Markdown documentation for the given Dockerfile.
18+
19+
Parameters
20+
----------
21+
dockerfile_path : str
22+
Path to the Dockerfile.
23+
output_path : str, optional
24+
Path to save the generated Markdown documentation (default: "dockerfile-doc.md").
25+
verbose : bool, optional
26+
If True, prints a message when done (default: True).
1527
"""
1628
base_images = extract_base_images(dockerfile_path)
1729
variables = extract_variables(dockerfile_path)
1830
ports = extract_exposed_ports(dockerfile_path)
1931
files = extract_files(dockerfile_path)
32+
mounts = extract_mounts(dockerfile_path)
33+
docker_details = extract_dockerfile_details(
34+
dockerfile_path
35+
) # Extract details for the example
36+
docker_example = generate_docker_build_markdown(
37+
docker_details
38+
) # Create docker build example
2039

2140
with open(output_path, "w") as md_file:
2241
md_file.write("# Dockerfile Documentation\n\n")
@@ -26,12 +45,27 @@ def generate_markdown(
2645
for image in base_images:
2746
md_file.write(f"- `{image['image']}` (Alias: {image['alias']})\n")
2847

48+
# Secret Mounts
49+
md_file.write("\n## Mounted Volumes\n\n")
50+
mounts = extract_mounts(dockerfile_path)
51+
if mounts:
52+
for mount in mounts:
53+
md_file.write(
54+
f"- **Type:** `{mount['type']}`\n"
55+
f" - **ID:** `{mount['id'] or 'N/A'}`\n"
56+
f" - **Destination:** `{mount['dst'] or 'N/A'}`\n"
57+
)
58+
else:
59+
md_file.write("(No mounts declared)\n")
60+
2961
# Variables
3062
md_file.write("\n## Variables\n\n")
63+
3164
# ARG variables
3265
md_file.write("### ARG Variables\n\n")
33-
for var in variables:
34-
if var["type"] == "ARG":
66+
arg_vars = [var for var in variables if var["type"] == "ARG"]
67+
if arg_vars:
68+
for var in arg_vars:
3569
md_file.write(
3670
f"- `{var['name']}`: Defaults to `{var['value'] or ' '}`."
3771
)
@@ -40,10 +74,14 @@ def generate_markdown(
4074
if var["reference"]:
4175
md_file.write(f" - [Reference]({var['reference']})")
4276
md_file.write("\n")
77+
else:
78+
md_file.write("(None)\n")
79+
4380
# ENV variables
4481
md_file.write("\n### ENV Variables\n\n")
45-
for var in variables:
46-
if var["type"] == "ENV":
82+
env_vars = [var for var in variables if var["type"] == "ENV"]
83+
if env_vars:
84+
for var in env_vars:
4785
md_file.write(
4886
f"- `{var['name']}`: Defaults to `{var['value'] or ' '}`."
4987
)
@@ -52,30 +90,34 @@ def generate_markdown(
5290
if var["reference"]:
5391
md_file.write(f" - [Reference]({var['reference']})")
5492
md_file.write("\n")
93+
else:
94+
md_file.write("(None)\n")
5595

5696
# Ports
5797
md_file.write("\n## Exposed Ports\n\n")
58-
if len(ports) > 0:
98+
if ports:
5999
for port in ports:
60100
md_file.write(
61101
f"- **{port['port']}**: {port['docstring'] or 'No description'}\n"
62102
)
63103
else:
64-
md_file.write("None.")
65-
md_file.write("\n")
104+
md_file.write("(None)\n")
66105

67106
# Files
68107
md_file.write("\n## Files Copied/Added\n\n")
69-
if len(files) > 0:
108+
if files:
70109
for file in files:
71110
md_file.write(
72111
f"- `{file['command']}`: `{file['source']}` -> `{file['destination'] or 'N/A'}`\n"
73112
)
74113
if file["docstring"]:
75114
md_file.write(f" - {file['docstring']}\n")
76115
else:
77-
md_file.write("None.")
78-
md_file.write("\n")
116+
md_file.write("(None)\n")
117+
118+
# Docker Build Example
119+
md_file.write("\n## Docker Build Command Example\n\n")
120+
md_file.write(docker_example)
79121

80122
if verbose:
81123
print(f"Documentation generated at {output_path}")

0 commit comments

Comments
 (0)