2929def parse_args () -> argparse .Namespace :
3030 parser = argparse .ArgumentParser (description = "Check metadata files for consistent software versions using canonical PEP 440 and SemVer" )
3131 parser .add_argument ('--base-version' , required = False , help = 'A base version from which to check' )
32- parser .add_argument ('--fail-for-missing-file' , required = False , help = 'Fail for any checked file that is missing' )
33- parser .add_argument ('--check-citation-cff' , required = False , help = 'Check CITATION.cff? (true/false)' )
34- parser .add_argument ('--citation-cff-path' , required = False , help = 'Path to CITATION.cff file' )
35- parser .add_argument ('--check-pyproject-toml' , required = False , help = 'Check pyproject.toml? (true/false)' )
36- parser .add_argument ('--pyproject-toml-path' , required = False , help = 'Path to pyproject.toml file' )
37- parser .add_argument ('--check-codemeta-json' , required = False , help = 'Check codemeta.json? (true/false)' )
38- parser .add_argument ('--codemeta-json-path' , required = False , help = 'Path to codemeta.json' )
39- parser .add_argument ('--check-zenodo-json' , required = False , help = 'Check .zenodo.json? (true/false)' )
40- parser .add_argument ('--zenodo-json-path' , required = False , help = 'Path to .zenodo.json' )
41- parser .add_argument ('--check-package-json' , required = False , help = 'Check package.json? (true/false)' )
42- parser .add_argument ('--package-json-path' , required = False , help = 'Path to package.json' )
43- parser .add_argument ('--check-setup-py' , required = False , help = 'Check setup.py? (true/false)' )
44- parser .add_argument ('--setup-py-path' , required = False , help = 'Path to setup.py' )
45- parser .add_argument ('--check-github-event' , required = False , help = 'Check GitHub events? (true/false)' )
32+ parser .add_argument ('--fail-for-missing-file' , default = False , required = False , help = 'Fail for any checked file that is missing' )
33+ parser .add_argument ('--check-citation-cff' , default = True , required = False , help = 'Check CITATION.cff? (true/false)' )
34+ parser .add_argument ('--citation-cff-path' , default = 'CITATION.cff' , required = False , help = 'Path to CITATION.cff file' )
35+ parser .add_argument ('--check-pyproject-toml' , default = True , required = False , help = 'Check pyproject.toml? (true/false)' )
36+ parser .add_argument ('--pyproject-toml-path' , default = 'pyproject.toml' , required = False , help = 'Path to pyproject.toml file' )
37+ parser .add_argument ('--check-codemeta-json' , default = True , required = False , help = 'Check codemeta.json? (true/false)' )
38+ parser .add_argument ('--codemeta-json-path' , default = 'codemeta.json' , required = False , help = 'Path to codemeta.json' )
39+ parser .add_argument ('--check-zenodo-json' , default = True , required = False , help = 'Check .zenodo.json? (true/false)' )
40+ parser .add_argument ('--zenodo-json-path' , default = '.zenodo.json' , required = False , help = 'Path to .zenodo.json' )
41+ parser .add_argument ('--check-package-json' , default = True , required = False , help = 'Check package.json? (true/false)' )
42+ parser .add_argument ('--package-json-path' , default = 'package.json' , required = False , help = 'Path to package.json' )
43+ parser .add_argument ('--check-setup-py' , default = True , required = False , help = 'Check setup.py? (true/false)' )
44+ parser .add_argument ('--setup-py-path' , default = 'setup.py' , required = False , help = 'Path to setup.py' )
45+ parser .add_argument ('--check-github-event' , default = False , required = False , help = 'Check GitHub events? (true/false)' )
4646 parser .add_argument ('--github-event-name' , required = False , help = 'GitHub event name (push/release)' )
4747 parser .add_argument ('--github-event-ref' , required = False , help = 'GitHub ref (for push event)' )
4848 parser .add_argument ('--github-event-release-tag' , required = False , help = 'GitHub release tag name (for release event)' )
@@ -51,67 +51,83 @@ def parse_args() -> argparse.Namespace:
5151
5252# --- Main ---
5353
54+
5455def main ():
5556 cli_args : argparse .Namespace = parse_args ()
5657
5758 base_version_str : str | None = CliExtractor (cli_args = cli_args ).extract_version ()
5859
5960 checkers : list [Checker ] = []
6061
62+ logger .info ('📦 Extracting software version metadata...' )
63+
6164 # GitHub Event
62- if cli_args . check_github_event .lower () == 'true' :
65+ if str ( getattr ( cli_args , ' check_github_event' , '' ) or '' ) .lower () == 'true' :
6366 github_event_extractor : GitHubEventExtractor = GitHubEventExtractor (cli_args = cli_args )
6467 github_event_checker : GitHubEventChecker = GitHubEventChecker (extractor = github_event_extractor , cli_args = cli_args )
6568 checkers .append (github_event_checker )
6669
70+
6771 # CITATION.cff
68- if cli_args . check_citation_cff .lower () == 'true' :
72+ if str ( getattr ( cli_args , ' check_citation_cff' , '' ) or '' ) .lower () == 'true' :
6973 citation_cff_extractor : CitationCffExtractor = CitationCffExtractor (cli_args = cli_args )
7074 citation_cff_checker : CitationCffChecker = CitationCffChecker (extractor = citation_cff_extractor , cli_args = cli_args )
7175 checkers .append (citation_cff_checker )
7276
77+
78+
7379 # pyproject.toml
74- if cli_args . check_pyproject_toml .lower () == 'true' :
80+ if str ( getattr ( cli_args , ' check_pyproject_toml' , '' ) or '' ) .lower () == 'true' :
7581 pyproject_toml_extractor : PyprojectTomlExtractor = PyprojectTomlExtractor (cli_args = cli_args )
7682 pyproject_toml_checker : PyprojectTomlChecker = PyprojectTomlChecker (extractor = pyproject_toml_extractor , cli_args = cli_args )
7783 checkers .append (pyproject_toml_checker )
7884
85+
7986 # setup.py
80- if cli_args . check_setup_py .lower () == 'true' :
87+ if str ( getattr ( cli_args , ' check_setup_py' , '' ) or '' ) .lower () == 'true' :
8188 setup_py_extractor : SetupPyExtractor = SetupPyExtractor (cli_args = cli_args )
8289 setup_py_checker : SetupPyChecker = SetupPyChecker (extractor = setup_py_extractor , cli_args = cli_args )
8390 checkers .append (setup_py_checker )
8491
92+
93+
8594 # package.json
86- if cli_args . check_package_json .lower () == 'true' :
95+ if str ( getattr ( cli_args , ' check_package_json' , '' ) or '' ) .lower () == 'true' :
8796 package_json_extractor : PackageJsonExtractor = PackageJsonExtractor (cli_args = cli_args )
8897 package_json_checker : PackageJsonChecker = PackageJsonChecker (extractor = package_json_extractor , cli_args = cli_args )
8998 checkers .append (package_json_checker )
90-
99+
100+
101+
91102 # codemeta.json
92- if cli_args . check_codemeta_json .lower () == 'true' :
103+ if str ( getattr ( cli_args , ' check_codemeta_json' , '' ) or '' ) .lower () == 'true' :
93104 codemeta_json_extractor : CodeMetaJsonExtractor = CodeMetaJsonExtractor (cli_args = cli_args )
94105 codemeta_json_checker : CodeMetaJsonChecker = CodeMetaJsonChecker (extractor = codemeta_json_extractor , cli_args = cli_args )
95106 checkers .append (codemeta_json_checker )
96107
108+
109+
97110 # .zenodo.json
98- if cli_args . check_zenodo_json .lower () == 'true' :
111+ if str ( getattr ( cli_args , ' check_zenodo_json' , '' ) or '' ) .lower () == 'true' :
99112 zenodo_json_extractor : ZenodoJsonExtractor = ZenodoJsonExtractor (cli_args = cli_args )
100113 zenodo_json_checker : ZenodoJsonChecker = ZenodoJsonChecker (extractor = zenodo_json_extractor , cli_args = cli_args )
101114 checkers .append (zenodo_json_checker )
102115
103116 # Loop through checkers
117+ logger .info ('📦 Checking software version metadata...' )
118+
104119 for checker in checkers :
105120 # find the base version if it does not exist
106121 if base_version_str is None and checker .target_version_str is not None :
107122 base_version_str = checker .target_version_str
108- logger .info (f'📦 Using base version ( { base_version_str } ) from { checker . target_name } ' )
123+ logger .info (f'📦 Using { checker . target_name } for base version: { base_version_str } ' )
109124 else :
110125 checker .check (base_version_str = base_version_str )
111126
112127 # Final result
113128
114129 if get_log_collector ().get_error_logs ():
130+ logger .error ("❌ Some versions do not match!" )
115131 sys .exit (1 )
116132 else :
117133 if base_version_str is None :
0 commit comments