109 lines
3.6 KiB
Python
109 lines
3.6 KiB
Python
# pyChaChaDummyProject (c) by chacha
|
|
#
|
|
# pyChaChaDummyProject is licensed under a
|
|
# Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International Unported License.
|
|
#
|
|
# You should have received a copy of the license along with this
|
|
# work. If not, see <https://creativecommons.org/licenses/by-nc-sa/4.0/>.
|
|
|
|
from __future__ import annotations
|
|
from typing import TYPE_CHECKING
|
|
|
|
from pathlib import Path
|
|
import tomli
|
|
import argparse
|
|
import os
|
|
import logging
|
|
import sys
|
|
|
|
if __package__ == "helpers":
|
|
# when calling the module from: > python -m helpers
|
|
from .types_check import types_check
|
|
from .quality_check import quality_check
|
|
from .unit_test import unit_test
|
|
from .doc_gen import doc_gen
|
|
from .changelog_gen import changelog_gen
|
|
else:
|
|
# when calling the __main__.py file (from IDE)
|
|
from helpers.types_check import types_check
|
|
from helpers.quality_check import quality_check
|
|
from helpers.unit_test import unit_test
|
|
from helpers.doc_gen import doc_gen
|
|
from helpers.changelog_gen import changelog_gen
|
|
|
|
logging.getLogger().setLevel(logging.INFO)
|
|
|
|
if __name__ == "__main__":
|
|
project_rootdir_path = Path(__file__).parent.parent.absolute()
|
|
|
|
with open(project_rootdir_path / "pyproject.toml", mode="rb") as fp:
|
|
pyproject = tomli.load(fp)
|
|
|
|
parser = argparse.ArgumentParser(
|
|
prog="continuous-integration-helper", description="A tiny set of scripts to help continous integration on python"
|
|
)
|
|
|
|
parser.add_argument("-tc", "--type-check", dest="typecheck", action="store_true", help="enable static typing check")
|
|
|
|
parser.add_argument("-ut", "--unit-test", dest="unittest", action="store_true", help="enable unit-test")
|
|
parser.add_argument(
|
|
"-cc", "--coverage-check", dest="coveragecheck", action="store_true", help="enable unit-test coverage check (requires unit-test)"
|
|
)
|
|
|
|
parser.add_argument("-qc", "--quality-check", dest="qualitycheck", action="store_true", help="enable code quality check")
|
|
|
|
parser.add_argument("-dg", "--doc-gen", dest="docgen", action="store_true", help="enable documentation generation using MkDoc")
|
|
parser.add_argument(
|
|
"-pdf", "--doc-gen-pdf", dest="docgenpdf", action="store_true", help="enable pdf documentation export (requires doc-gen)"
|
|
)
|
|
|
|
parser.add_argument("-clg", "--changelog-gen", dest="changeloggen", action="store_true", help="enable changelog generation")
|
|
|
|
args = parser.parse_args()
|
|
|
|
##################################
|
|
# Dev / Debug forced toogles
|
|
#
|
|
# --------------------------------
|
|
#
|
|
# args.typecheck = True
|
|
# args.qualitycheck = True
|
|
# args.unittest = True
|
|
# args.coveragecheck = True
|
|
# args.docgen = True
|
|
# args.docgenpdf = True
|
|
# args.changeloggen = True
|
|
|
|
helpers = []
|
|
if args.typecheck == True:
|
|
helpers.append(types_check)
|
|
|
|
if args.unittest == True:
|
|
helpers.append(unit_test)
|
|
|
|
if args.coveragecheck == True:
|
|
if args.unittest == True:
|
|
unit_test.enable_coverage_check = True
|
|
else:
|
|
raise RuntimeError("unit-test is required to enable coverage-check")
|
|
|
|
if args.qualitycheck == True:
|
|
helpers.append(quality_check)
|
|
|
|
if args.docgen == True:
|
|
helpers.append(doc_gen)
|
|
|
|
if args.docgenpdf == True:
|
|
if args.docgen == True:
|
|
doc_gen.enable_gen_pdf = True
|
|
else:
|
|
raise RuntimeError("doc-gen is required to enable doc-gen-pdf")
|
|
|
|
if args.changeloggen == True:
|
|
helpers.append(changelog_gen)
|
|
|
|
for helper in helpers:
|
|
helper.set_context(project_rootdir_path, pyproject)
|
|
helper.reset_result_dir()
|
|
helper.do_job()
|