Skip to content

Commit 1cc3ed5

Browse files
yeoldegroveNotTheEvilOne
authored andcommitted
docs: add missing help test to CLIs and make them work with sphinx
Signed-off-by: Eike Waldt <waldt@b1-systems.de> On-behalf-of: SAP <eike.waldt@sap.com>
1 parent 4e90538 commit 1cc3ed5

File tree

5 files changed

+312
-56
lines changed

5 files changed

+312
-56
lines changed

src/gardenlinux/features/__main__.py

Lines changed: 74 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,33 +39,93 @@
3939
"""
4040

4141

42-
def main() -> None:
42+
def get_parser() -> argparse.ArgumentParser:
4343
"""
44-
gl-features-parse main()
44+
Get the argument parser for gl-features-parse.
45+
Used for documentation generation.
4546
46-
:since: 0.7.0
47+
:return: ArgumentParser instance
48+
:since: 0.10.9
4749
"""
50+
parser = argparse.ArgumentParser(
51+
description="Parse and extract information from GardenLinux features."
52+
)
4853

49-
parser = argparse.ArgumentParser()
50-
51-
parser.add_argument("--arch", dest="arch")
52-
parser.add_argument("--cname", dest="cname", required=True)
53-
parser.add_argument("--commit", dest="commit")
54-
parser.add_argument("--feature-dir", default="features")
55-
parser.add_argument("--release-file", dest="release_file")
56-
parser.add_argument("--default-arch", dest="default_arch")
57-
parser.add_argument("--default-version", dest="default_version")
58-
parser.add_argument("--version", dest="version")
54+
parser.add_argument(
55+
"--arch",
56+
dest="arch",
57+
help="Target architecture (e.g., amd64, arm64). Overrides architecture from cname.",
58+
)
59+
parser.add_argument(
60+
"--cname",
61+
dest="cname",
62+
required=True,
63+
help="Canonical name (cname) to parse. Must be a valid GardenLinux canonical name.",
64+
)
65+
parser.add_argument(
66+
"--commit",
67+
dest="commit",
68+
help="Git commit hash. If not specified, will be read from COMMIT file or release file.",
69+
)
70+
parser.add_argument(
71+
"--feature-dir",
72+
default="features",
73+
help="Path to the features directory (default: 'features'). Either --feature-dir or --release-file must be provided.",
74+
)
75+
parser.add_argument(
76+
"--release-file",
77+
dest="release_file",
78+
help="Path to a release file containing cname metadata. Either --feature-dir or --release-file must be provided.",
79+
)
80+
parser.add_argument(
81+
"--default-arch",
82+
dest="default_arch",
83+
help="Default architecture to use if architecture cannot be determined from cname or other sources.",
84+
)
85+
parser.add_argument(
86+
"--default-version",
87+
dest="default_version",
88+
help="Default version to use if version cannot be determined from files or other sources.",
89+
)
90+
parser.add_argument(
91+
"--version",
92+
dest="version",
93+
help="Version string. If not specified, will be read from VERSION file or release file.",
94+
)
5995

6096
parser.add_argument(
6197
"--ignore",
6298
dest="ignore",
6399
type=lambda arg: set([f for f in arg.split(",") if f]),
64100
default=set(),
101+
help="Comma-separated list of features to ignore when processing (e.g., 'feature1,feature2').",
65102
)
66103

67-
parser.add_argument("type", nargs="?", choices=_ARGS_TYPE_ALLOWED, default="cname")
104+
parser.add_argument(
105+
"type",
106+
nargs="?",
107+
choices=_ARGS_TYPE_ALLOWED,
108+
default="cname",
109+
help="Type of output to generate. Choices: {}. Default: 'cname'.".format(
110+
", ".join(_ARGS_TYPE_ALLOWED)
111+
),
112+
)
113+
return parser
114+
115+
116+
# Parser object for documentation generation
117+
parser = get_parser()
118+
parser.prog = "gl-features-parse"
119+
120+
121+
def main() -> None:
122+
"""
123+
gl-features-parse main()
124+
125+
:since: 0.7.0
126+
"""
68127

128+
parser = get_parser()
69129
args = parser.parse_args()
70130

71131
assert bool(args.feature_dir) or bool(args.release_file), (

src/gardenlinux/features/cname_main.py

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,57 @@
1818
from .parser import Parser
1919

2020

21+
def get_parser() -> argparse.ArgumentParser:
22+
"""
23+
Get the argument parser for gl-cname.
24+
Used for documentation generation.
25+
26+
:return: ArgumentParser instance
27+
:since: 1.0.0
28+
"""
29+
parser = argparse.ArgumentParser(
30+
description="Generate a canonical name (cname) from feature sets."
31+
)
32+
parser.add_argument(
33+
"--arch",
34+
dest="arch",
35+
help="Target architecture (e.g., amd64, arm64). If not specified, will be determined from the cname or feature set.",
36+
)
37+
parser.add_argument(
38+
"--commit",
39+
dest="commit",
40+
help="Git commit hash. If not specified, will be read from COMMIT file in the GardenLinux root directory.",
41+
)
42+
parser.add_argument(
43+
"--feature-dir",
44+
default="features",
45+
help="Path to the features directory (default: 'features').",
46+
)
47+
parser.add_argument(
48+
"--version",
49+
dest="version",
50+
help="Version string. If not specified, will be read from VERSION file in the GardenLinux root directory.",
51+
)
52+
parser.add_argument(
53+
"cname",
54+
help="Canonical name (cname) to process. Must be a valid GardenLinux canonical name format.",
55+
)
56+
return parser
57+
58+
59+
# Parser object for documentation generation
60+
parser = get_parser()
61+
parser.prog = "gl-cname"
62+
63+
2164
def main() -> None:
2265
"""
2366
gl-cname main()
2467
2568
:since: 0.7.0
2669
"""
2770

28-
parser = argparse.ArgumentParser()
29-
30-
parser.add_argument("--arch", dest="arch")
31-
parser.add_argument("--commit", dest="commit")
32-
parser.add_argument("--feature-dir", default="features")
33-
parser.add_argument("--version", dest="version")
34-
parser.add_argument("cname")
35-
71+
parser = get_parser()
3672
args = parser.parse_args()
3773

3874
re_match = re.match(

src/gardenlinux/flavors/__main__.py

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,14 @@ def generate_markdown_table(combinations: List[Tuple[Any, str]]) -> str:
4747
return table
4848

4949

50-
def parse_args() -> Namespace:
50+
def get_parser() -> ArgumentParser:
5151
"""
52-
Parses arguments used for main()
52+
Get the argument parser for gl-flavors-parse.
53+
Used for documentation generation.
5354
54-
:return: (object) Parsed argparse.ArgumentParser namespace
55-
:since: 0.7.0
55+
:return: ArgumentParser instance
56+
:since: 1.0.0
5657
"""
57-
5858
parser = ArgumentParser(description="Parse flavors.yaml and generate combinations.")
5959

6060
parser.add_argument(
@@ -122,7 +122,22 @@ def parse_args() -> Namespace:
122122
help="Generate a markdown table by platform.",
123123
)
124124

125-
return parser.parse_args()
125+
return parser
126+
127+
128+
# Parser object for documentation generation
129+
parser = get_parser()
130+
parser.prog = "gl-flavors-parse"
131+
132+
133+
def parse_args() -> Namespace:
134+
"""
135+
Parses arguments used for main()
136+
137+
:return: (object) Parsed argparse.ArgumentParser namespace
138+
:since: 0.7.0
139+
"""
140+
return get_parser().parse_args()
126141

127142

128143
def main() -> None:

src/gardenlinux/github/release/__main__.py

Lines changed: 124 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,131 @@
1414
LOGGER = LoggerSetup.get_logger("gardenlinux.github", logging.INFO)
1515

1616

17-
def main() -> None:
18-
parser = argparse.ArgumentParser(description="GitHub Release Script")
19-
subparsers = parser.add_subparsers(dest="command")
20-
21-
create_parser = subparsers.add_parser("create")
22-
create_parser.add_argument("--owner", default="gardenlinux")
23-
create_parser.add_argument("--repo", default="gardenlinux")
24-
create_parser.add_argument("--tag", required=True)
25-
create_parser.add_argument("--name")
26-
create_parser.add_argument("--body", required=True)
27-
create_parser.add_argument("--commit")
28-
create_parser.add_argument("--pre-release", action="store_true", default=True)
29-
create_parser.add_argument("--latest", action="store_true", default=False)
30-
31-
create_parser_gl = subparsers.add_parser("create-with-gl-release-notes")
32-
create_parser_gl.add_argument("--owner", default="gardenlinux")
33-
create_parser_gl.add_argument("--repo", default="gardenlinux")
34-
create_parser_gl.add_argument("--tag", required=True)
35-
create_parser_gl.add_argument("--commit", required=True)
36-
create_parser_gl.add_argument("--latest", action="store_true", default=False)
37-
create_parser_gl.add_argument("--dry-run", action="store_true", default=False)
38-
39-
upload_parser = subparsers.add_parser("upload")
40-
upload_parser.add_argument("--owner", default="gardenlinux")
41-
upload_parser.add_argument("--repo", default="gardenlinux")
42-
upload_parser.add_argument("--release_id", required=True)
43-
upload_parser.add_argument("--file_path", required=True)
44-
upload_parser.add_argument("--dry-run", action="store_true", default=False)
17+
def get_parser() -> argparse.ArgumentParser:
18+
"""
19+
Get the argument parser for gl-gh-release.
20+
Used for documentation generation.
21+
22+
:return: ArgumentParser instance
23+
:since: 1.0.0
24+
"""
25+
parser = argparse.ArgumentParser(description="Create and manage GitHub releases.")
26+
subparsers = parser.add_subparsers(dest="command", help="Available commands")
27+
28+
create_parser = subparsers.add_parser(
29+
"create", help="Create a new GitHub release."
30+
)
31+
create_parser.add_argument(
32+
"--owner",
33+
default="gardenlinux",
34+
help="GitHub repository owner (default: 'gardenlinux').",
35+
)
36+
create_parser.add_argument(
37+
"--repo",
38+
default="gardenlinux",
39+
help="GitHub repository name (default: 'gardenlinux').",
40+
)
41+
create_parser.add_argument(
42+
"--tag", required=True, help="Git tag name for the release (required)."
43+
)
44+
create_parser.add_argument(
45+
"--name", help="Release name/title. If not specified, the tag will be used."
46+
)
47+
create_parser.add_argument(
48+
"--body", required=True, help="Release notes/description body (required)."
49+
)
50+
create_parser.add_argument(
51+
"--commit",
52+
help="Git commit hash. If not specified, the tag will be used to find the commit.",
53+
)
54+
create_parser.add_argument(
55+
"--pre-release",
56+
action="store_true",
57+
default=True,
58+
help="Mark the release as a pre-release (default: True).",
59+
)
60+
create_parser.add_argument(
61+
"--latest",
62+
action="store_true",
63+
default=False,
64+
help="Mark this release as the latest release (default: False).",
65+
)
66+
67+
create_parser_gl = subparsers.add_parser(
68+
"create-with-gl-release-notes",
69+
help="Create a GitHub release with auto-generated GardenLinux release notes.",
70+
)
71+
create_parser_gl.add_argument(
72+
"--owner",
73+
default="gardenlinux",
74+
help="GitHub repository owner (default: 'gardenlinux').",
75+
)
76+
create_parser_gl.add_argument(
77+
"--repo",
78+
default="gardenlinux",
79+
help="GitHub repository name (default: 'gardenlinux').",
80+
)
81+
create_parser_gl.add_argument(
82+
"--tag", required=True, help="Git tag name for the release (required)."
83+
)
84+
create_parser_gl.add_argument(
85+
"--commit",
86+
required=True,
87+
help="Git commit hash used to generate release notes (required).",
88+
)
89+
create_parser_gl.add_argument(
90+
"--latest",
91+
action="store_true",
92+
default=False,
93+
help="Mark this release as the latest release (default: False).",
94+
)
95+
create_parser_gl.add_argument(
96+
"--dry-run",
97+
action="store_true",
98+
default=False,
99+
help="Perform a dry run without actually creating the release.",
100+
)
101+
102+
upload_parser = subparsers.add_parser(
103+
"upload", help="Upload a file to an existing GitHub release."
104+
)
105+
upload_parser.add_argument(
106+
"--owner",
107+
default="gardenlinux",
108+
help="GitHub repository owner (default: 'gardenlinux').",
109+
)
110+
upload_parser.add_argument(
111+
"--repo",
112+
default="gardenlinux",
113+
help="GitHub repository name (default: 'gardenlinux').",
114+
)
115+
upload_parser.add_argument(
116+
"--release_id",
117+
required=True,
118+
help="GitHub release ID to upload the file to (required).",
119+
)
120+
upload_parser.add_argument(
121+
"--file_path",
122+
required=True,
123+
help="Path to the file to upload (required).",
124+
)
125+
upload_parser.add_argument(
126+
"--dry-run",
127+
action="store_true",
128+
default=False,
129+
help="Perform a dry run without actually uploading the file.",
130+
)
45131

132+
return parser
133+
134+
135+
# Parser object for documentation generation
136+
parser = get_parser()
137+
parser.prog = "gl-gh-release"
138+
139+
140+
def main() -> None:
141+
parser = get_parser()
46142
args = parser.parse_args()
47143

48144
if args.command == "create":

0 commit comments

Comments
 (0)