11"""
2+ Generates Dockerfile documentation with a Docker build example.
23"""
34
45from .base_image import extract_base_images
56from .files import extract_files
67from .ports import extract_exposed_ports
78from .variables import extract_variables
9+ from .generate_example import extract_dockerfile_details , generate_docker_build_markdown
10+ from .mounts import extract_mounts
811
912
1013def 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