ScriptCollection 3.5.3__py3-none-any.whl → 3.5.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ScriptCollection/Executables.py +5 -5
- ScriptCollection/GeneralUtilities.py +6 -0
- ScriptCollection/ProcessesRunner.py +41 -0
- ScriptCollection/RPStream.py +42 -0
- ScriptCollection/ScriptCollectionCore.py +145 -244
- ScriptCollection/TasksForCommonProjectStructure.py +167 -82
- ScriptCollection/UpdateCertificates.py +2 -2
- {ScriptCollection-3.5.3.dist-info → ScriptCollection-3.5.5.dist-info}/METADATA +2 -1
- ScriptCollection-3.5.5.dist-info/RECORD +16 -0
- {ScriptCollection-3.5.3.dist-info → ScriptCollection-3.5.5.dist-info}/WHEEL +1 -1
- ScriptCollection-3.5.3.dist-info/RECORD +0 -14
- {ScriptCollection-3.5.3.dist-info → ScriptCollection-3.5.5.dist-info}/entry_points.txt +0 -0
- {ScriptCollection-3.5.3.dist-info → ScriptCollection-3.5.5.dist-info}/top_level.txt +0 -0
|
@@ -21,6 +21,7 @@ from .GeneralUtilities import GeneralUtilities
|
|
|
21
21
|
from .ScriptCollectionCore import ScriptCollectionCore
|
|
22
22
|
from .ProgramRunnerEpew import ProgramRunnerEpew
|
|
23
23
|
|
|
24
|
+
|
|
24
25
|
class CreateReleaseConfiguration():
|
|
25
26
|
projectname: str
|
|
26
27
|
remotename: str
|
|
@@ -232,8 +233,7 @@ class TasksForCommonProjectStructure:
|
|
|
232
233
|
for target in targets:
|
|
233
234
|
GeneralUtilities.write_message_to_stdout(f"Build package {package_name} for target {target}...")
|
|
234
235
|
sc = ScriptCollectionCore()
|
|
235
|
-
|
|
236
|
-
sc.run_program("flutter", f"build {target}", src_folder, verbosity)
|
|
236
|
+
self.run_with_epew("flutter", f"build {target}", src_folder, verbosity)
|
|
237
237
|
if target == "web":
|
|
238
238
|
web_relase_folder = os.path.join(src_folder, "build/web")
|
|
239
239
|
web_folder = os.path.join(artifacts_folder, "BuildResult_WebApplication")
|
|
@@ -620,7 +620,7 @@ class TasksForCommonProjectStructure:
|
|
|
620
620
|
|
|
621
621
|
@GeneralUtilities.check_arguments
|
|
622
622
|
def __standardized_tasks_build_for_dotnet_build(self, csproj_file: str, originaloutputfolder: str, files_to_sign: dict[str, str], commitid: str, verbosity: int, runtimes: list[str], target_environmenttype: str, target_environmenttype_mapping: dict[str, str], copy_license_file_to_target_folder: bool, repository_folder: str, codeunit_name: str, commandline_arguments: list[str]) -> None:
|
|
623
|
-
csproj_filename=os.path.basename(csproj_file)
|
|
623
|
+
csproj_filename = os.path.basename(csproj_file)
|
|
624
624
|
GeneralUtilities.write_message_to_stdout(f"Build {csproj_filename}...")
|
|
625
625
|
dotnet_build_configuration: str = target_environmenttype_mapping[target_environmenttype]
|
|
626
626
|
verbosity = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
@@ -765,7 +765,7 @@ class TasksForCommonProjectStructure:
|
|
|
765
765
|
|
|
766
766
|
@GeneralUtilities.check_arguments
|
|
767
767
|
def standardized_tasks_generate_coverage_report(self, repository_folder: str, codeunitname: str, verbosity: int, generate_badges: bool, targetenvironmenttype: str, commandline_arguments: list[str], add_testcoverage_history_entry: bool = None) -> None:
|
|
768
|
-
"""This
|
|
768
|
+
"""This function expects that the file '<repositorybasefolder>/<codeunitname>/Other/Artifacts/TestCoverage/TestCoverage.xml'
|
|
769
769
|
which contains a test-coverage-report in the cobertura-format exists.
|
|
770
770
|
This script expectes that the testcoverage-reportfolder is '<repositorybasefolder>/<codeunitname>/Other/Artifacts/TestCoverageReport'.
|
|
771
771
|
This script expectes that a test-coverage-badges should be added to '<repositorybasefolder>/<codeunitname>/Other/Resources/Badges'."""
|
|
@@ -774,12 +774,14 @@ class TasksForCommonProjectStructure:
|
|
|
774
774
|
verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
775
775
|
if verbosity == 0:
|
|
776
776
|
verbose_argument_for_reportgenerator = "Off"
|
|
777
|
-
|
|
777
|
+
elif verbosity == 1:
|
|
778
778
|
verbose_argument_for_reportgenerator = "Error"
|
|
779
|
-
|
|
779
|
+
elif verbosity == 2:
|
|
780
780
|
verbose_argument_for_reportgenerator = "Info"
|
|
781
|
-
|
|
781
|
+
elif verbosity == 3:
|
|
782
782
|
verbose_argument_for_reportgenerator = "Verbose"
|
|
783
|
+
else:
|
|
784
|
+
raise ValueError(f"Unknown value for verbosity: {GeneralUtilities.str_none_safe(verbosity)}")
|
|
783
785
|
|
|
784
786
|
# Generating report
|
|
785
787
|
GeneralUtilities.ensure_directory_does_not_exist(os.path.join(repository_folder, codeunitname, f"{codeunitname}/Other/Artifacts/TestCoverageReport"))
|
|
@@ -792,11 +794,8 @@ class TasksForCommonProjectStructure:
|
|
|
792
794
|
history_folder_full = os.path.join(repository_folder, history_folder)
|
|
793
795
|
GeneralUtilities.ensure_directory_exists(history_folder_full)
|
|
794
796
|
history_argument = f" -historydir:{history_folder}"
|
|
795
|
-
argument =
|
|
796
|
-
|
|
797
|
-
f"-title:{codeunitname} -tag:v{codeunit_version}")
|
|
798
|
-
self.__sc.run_program("reportgenerator", argument,
|
|
799
|
-
repository_folder, verbosity=verbosity)
|
|
797
|
+
argument = f"-reports:{codeunitname}/Other/Artifacts/TestCoverage/TestCoverage.xml -targetdir:{codeunitname}/Other/Artifacts/TestCoverageReport --verbosity:{verbose_argument_for_reportgenerator}{history_argument} -title:{codeunitname} -tag:v{codeunit_version}"
|
|
798
|
+
self.__sc.run_program("reportgenerator", argument, repository_folder, verbosity=verbosity)
|
|
800
799
|
if not add_testcoverage_history_entry:
|
|
801
800
|
os.remove(GeneralUtilities.get_direct_files_of_folder(history_folder_full)[-1])
|
|
802
801
|
|
|
@@ -806,10 +805,7 @@ class TasksForCommonProjectStructure:
|
|
|
806
805
|
fulltestcoverageubfolger = os.path.join(repository_folder, codeunitname, testcoverageubfolger)
|
|
807
806
|
GeneralUtilities.ensure_directory_does_not_exist(fulltestcoverageubfolger)
|
|
808
807
|
GeneralUtilities.ensure_directory_exists(fulltestcoverageubfolger)
|
|
809
|
-
self.__sc.run_program("reportgenerator", "-reports:Other/Artifacts/TestCoverage/TestCoverage.xml "
|
|
810
|
-
f"-targetdir:{testcoverageubfolger} -reporttypes:Badges " +
|
|
811
|
-
f"--verbosity:{verbose_argument_for_reportgenerator}", os.path.join(repository_folder, codeunitname),
|
|
812
|
-
verbosity=verbosity)
|
|
808
|
+
self.__sc.run_program("reportgenerator", f"-reports:Other/Artifacts/TestCoverage/TestCoverage.xml -targetdir:{testcoverageubfolger} -reporttypes:Badges --verbosity:{verbose_argument_for_reportgenerator}", os.path.join(repository_folder, codeunitname), verbosity=verbosity)
|
|
813
809
|
|
|
814
810
|
@GeneralUtilities.check_arguments
|
|
815
811
|
def standardized_tasks_run_testcases_for_dotnet_project(self, runtestcases_file: str, targetenvironmenttype: str, verbosity: int, generate_badges: bool, target_environmenttype_mapping: dict[str, str], commandline_arguments: list[str]) -> None:
|
|
@@ -842,8 +838,7 @@ class TasksForCommonProjectStructure:
|
|
|
842
838
|
self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, targetenvironmenttype, commandline_arguments)
|
|
843
839
|
|
|
844
840
|
@GeneralUtilities.check_arguments
|
|
845
|
-
def run_testcases_common_post_task(self, repository_folder: str, codeunit_name: str, verbosity: int, generate_badges: bool,
|
|
846
|
-
targetenvironmenttype: str, commandline_arguments: list[str]) -> None:
|
|
841
|
+
def run_testcases_common_post_task(self, repository_folder: str, codeunit_name: str, verbosity: int, generate_badges: bool, targetenvironmenttype: str, commandline_arguments: list[str]) -> None:
|
|
847
842
|
coverage_file_folder = os.path.join(repository_folder, codeunit_name, "Other/Artifacts/TestCoverage")
|
|
848
843
|
coveragefiletarget = os.path.join(coverage_file_folder, "TestCoverage.xml")
|
|
849
844
|
self.update_path_of_source_in_testcoverage_file(repository_folder, codeunit_name)
|
|
@@ -865,8 +860,7 @@ class TasksForCommonProjectStructure:
|
|
|
865
860
|
filename = match.group(1)
|
|
866
861
|
file = os.path.join(source, filename)
|
|
867
862
|
# GeneralUtilities.assert_condition(os.path.isfile(file),f"File \"{file}\" does not exist.")
|
|
868
|
-
GeneralUtilities.assert_condition(file.startswith(codeunit_folder),
|
|
869
|
-
f"Unexpected path for coverage-file. File: \"{file}\"; codeunitfolder: \"{codeunit_folder}\"")
|
|
863
|
+
GeneralUtilities.assert_condition(file.startswith(codeunit_folder), f"Unexpected path for coverage-file. File: \"{file}\"; codeunitfolder: \"{codeunit_folder}\"")
|
|
870
864
|
filename_relative = f".{file[len(codeunit_folder):]}"
|
|
871
865
|
return f'filename="{filename_relative}"'
|
|
872
866
|
|
|
@@ -876,15 +870,15 @@ class TasksForCommonProjectStructure:
|
|
|
876
870
|
root: etree._ElementTree = etree.parse(testcoveragefile)
|
|
877
871
|
codeunit_folder = os.path.join(repository_folder, codeunit_name)
|
|
878
872
|
xpath = f"//coverage/packages/package[@name='{codeunit_name}']/classes/class"
|
|
879
|
-
|
|
873
|
+
coverage_report_classes = root.xpath(xpath)
|
|
880
874
|
found_existing_files = False
|
|
881
|
-
for
|
|
882
|
-
filename =
|
|
875
|
+
for coverage_report_class in coverage_report_classes:
|
|
876
|
+
filename = coverage_report_class.attrib['filename']
|
|
883
877
|
file = os.path.join(codeunit_folder, filename)
|
|
884
878
|
if os.path.isfile(file):
|
|
885
879
|
found_existing_files = True
|
|
886
880
|
else:
|
|
887
|
-
|
|
881
|
+
coverage_report_class.getparent().remove(coverage_report_class)
|
|
888
882
|
GeneralUtilities.assert_condition(found_existing_files, f"No existing files in testcoderage-report-file \"{testcoveragefile}\".")
|
|
889
883
|
result = etree.tostring(root).decode("utf-8")
|
|
890
884
|
GeneralUtilities.write_text_to_file(testcoveragefile, result)
|
|
@@ -916,7 +910,7 @@ class TasksForCommonProjectStructure:
|
|
|
916
910
|
# TODO check if there are errors in sarif-file
|
|
917
911
|
|
|
918
912
|
@GeneralUtilities.check_arguments
|
|
919
|
-
def __export_codeunit_reference_content_to_reference_repository(self, project_version_identifier: str, replace_existing_content: bool,
|
|
913
|
+
def __export_codeunit_reference_content_to_reference_repository(self, project_version_identifier: str, replace_existing_content: bool, target_folder_for_reference_repository: str, repository: str, codeunitname: str, projectname: str, codeunit_version: str, public_repository_url: str, branch: str) -> None:
|
|
920
914
|
codeunit_folder = os.path.join(repository, codeunitname)
|
|
921
915
|
codeunit_file = os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml")
|
|
922
916
|
codeunit_has_testcases = self.codeunit_has_testable_sourcecode(codeunit_file)
|
|
@@ -931,8 +925,7 @@ class TasksForCommonProjectStructure:
|
|
|
931
925
|
diff_target_folder = os.path.join(target_folder, "DiffReport")
|
|
932
926
|
GeneralUtilities.ensure_directory_exists(diff_target_folder)
|
|
933
927
|
diff_target_file = os.path.join(diff_target_folder, "DiffReport.html")
|
|
934
|
-
title = (f'Reference of codeunit {codeunitname} {codeunit_version_identifier} (contained in project '
|
|
935
|
-
f'<a href="{public_repository_url}">{projectname}</a> {project_version_identifier})')
|
|
928
|
+
title = (f'Reference of codeunit {codeunitname} {codeunit_version_identifier} (contained in project <a href="{public_repository_url}">{projectname}</a> {project_version_identifier})')
|
|
936
929
|
if public_repository_url is None:
|
|
937
930
|
repo_url_html = ""
|
|
938
931
|
else:
|
|
@@ -1045,7 +1038,7 @@ class TasksForCommonProjectStructure:
|
|
|
1045
1038
|
@GeneralUtilities.check_arguments
|
|
1046
1039
|
def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str) -> None:
|
|
1047
1040
|
all_available_version_identifier_folders_of_reference: list[str] = list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(reference_folder))
|
|
1048
|
-
all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference,
|
|
1041
|
+
all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference, key=cmp_to_key(TasksForCommonProjectStructure._internal_sort_reference_folder))
|
|
1049
1042
|
reference_versions_html_lines = []
|
|
1050
1043
|
reference_versions_html_lines.append(' <hr/>')
|
|
1051
1044
|
for all_available_version_identifier_folder_of_reference in all_available_version_identifier_folders_of_reference:
|
|
@@ -1109,17 +1102,26 @@ class TasksForCommonProjectStructure:
|
|
|
1109
1102
|
raise ValueError(f"Repository '{repository_folder}' has uncommitted changes.")
|
|
1110
1103
|
|
|
1111
1104
|
@GeneralUtilities.check_arguments
|
|
1112
|
-
def
|
|
1105
|
+
def generate_certificate_for_development_purposes_for_external_service(self, service_folder: str, domain: str = None):
|
|
1106
|
+
testservice_name = os.path.basename(service_folder)
|
|
1107
|
+
self.__generate_certificate_for_development_purposes(testservice_name, os.path.join(service_folder, "Resources"), domain)
|
|
1108
|
+
|
|
1109
|
+
@GeneralUtilities.check_arguments
|
|
1110
|
+
def generate_certificate_for_development_purposes_for_codeunit(self, codeunit_folder: str, domain: str = None):
|
|
1113
1111
|
codeunit_name = os.path.basename(codeunit_folder)
|
|
1112
|
+
self.__generate_certificate_for_development_purposes(codeunit_name, os.path.join(codeunit_folder, "Other", "Resources"), domain)
|
|
1113
|
+
|
|
1114
|
+
@GeneralUtilities.check_arguments
|
|
1115
|
+
def __generate_certificate_for_development_purposes(self, service_name: str, resources_folder: str, domain: str = None):
|
|
1114
1116
|
if domain is None:
|
|
1115
|
-
domain = f"{
|
|
1117
|
+
domain = f"{service_name}.test.local"
|
|
1116
1118
|
domain = domain.lower()
|
|
1117
|
-
resources_folder: str = os.path.join(codeunit_folder, "Other", "Resources")
|
|
1118
1119
|
resource_name: str = "DevelopmentCertificate"
|
|
1119
1120
|
certificate_folder: str = os.path.join(resources_folder, resource_name)
|
|
1120
|
-
|
|
1121
|
+
|
|
1122
|
+
resource_content_filename: str = service_name+resource_name
|
|
1121
1123
|
ca_resource_name: str = f"{resource_name}Authority"
|
|
1122
|
-
dev_ca_name =
|
|
1124
|
+
dev_ca_name = service_name+ca_resource_name
|
|
1123
1125
|
ca_folder = os.path.join(resources_folder, ca_resource_name)
|
|
1124
1126
|
certificate_file = os.path.join(certificate_folder, f"{domain}.crt")
|
|
1125
1127
|
unsignedcertificate_file = os.path.join(certificate_folder, f"{domain}.unsigned.crt")
|
|
@@ -1257,7 +1259,7 @@ class TasksForCommonProjectStructure:
|
|
|
1257
1259
|
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", str(os.path.dirname(build_script_file)))
|
|
1258
1260
|
codeunitname_lower = codeunitname.lower()
|
|
1259
1261
|
codeunitversion = self.get_version_of_codeunit(os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml"))
|
|
1260
|
-
args = ["image", "build", "--pull", "--force-rm", "--progress=plain", "--build-arg", f"TargetEnvironmentType={target_environment_type}", "--tag", f"{codeunitname_lower}:latest", "--tag", f"{codeunitname_lower}:{codeunitversion}", "--file", f"{codeunitname}/Dockerfile"]
|
|
1262
|
+
args = ["image", "build", "--pull", "--force-rm", "--progress=plain", "--build-arg", f"TargetEnvironmentType={target_environment_type}", "--build-arg", f"Version={codeunitversion}", "--tag", f"{codeunitname_lower}:latest", "--tag", f"{codeunitname_lower}:{codeunitversion}", "--file", f"{codeunitname}/Dockerfile"]
|
|
1261
1263
|
if not use_cache:
|
|
1262
1264
|
args.append("--no-cache")
|
|
1263
1265
|
args.append(".")
|
|
@@ -1351,7 +1353,7 @@ class TasksForCommonProjectStructure:
|
|
|
1351
1353
|
def standardized_tasks_do_common_tasks(self, common_tasks_scripts_file: str, codeunit_version: str, verbosity: int, targetenvironmenttype: str, clear_artifacts_folder: bool, additional_arguments_file: str, assume_dependent_codeunits_are_already_built: bool, commandline_arguments: list[str]) -> None:
|
|
1352
1354
|
additional_arguments_file = self.get_additionalargumentsfile_from_commandline_arguments(commandline_arguments, additional_arguments_file)
|
|
1353
1355
|
target_environmenttype = self.get_targetenvironmenttype_from_commandline_arguments(commandline_arguments, targetenvironmenttype)
|
|
1354
|
-
assume_dependent_codeunits_are_already_built = self.get_assume_dependent_codeunits_are_already_built_from_commandline_arguments(commandline_arguments,assume_dependent_codeunits_are_already_built)
|
|
1356
|
+
assume_dependent_codeunits_are_already_built = self.get_assume_dependent_codeunits_are_already_built_from_commandline_arguments(commandline_arguments, assume_dependent_codeunits_are_already_built)
|
|
1355
1357
|
if commandline_arguments is None:
|
|
1356
1358
|
raise ValueError('The "commandline_arguments"-parameter is not defined.')
|
|
1357
1359
|
if len(commandline_arguments) == 0:
|
|
@@ -1432,7 +1434,7 @@ class TasksForCommonProjectStructure:
|
|
|
1432
1434
|
|
|
1433
1435
|
# Get artifacts from dependent codeunits
|
|
1434
1436
|
if assume_dependent_codeunits_are_already_built:
|
|
1435
|
-
self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file,commandline_arguments)
|
|
1437
|
+
self.build_dependent_code_units(repository_folder, codeunit_name, verbosity, target_environmenttype, additional_arguments_file, commandline_arguments)
|
|
1436
1438
|
self.copy_artifacts_from_dependent_code_units(repository_folder, codeunit_name)
|
|
1437
1439
|
|
|
1438
1440
|
# Update codeunit-version
|
|
@@ -1489,10 +1491,17 @@ class TasksForCommonProjectStructure:
|
|
|
1489
1491
|
|
|
1490
1492
|
@GeneralUtilities.check_arguments
|
|
1491
1493
|
def standardized_tasks_build_for_angular_codeunit(self, build_script_file: str, build_environment_target_type: str, verbosity: int, commandline_arguments: list[str]) -> None:
|
|
1494
|
+
build_script_folder = os.path.dirname(build_script_file)
|
|
1495
|
+
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
|
|
1496
|
+
GeneralUtilities.ensure_directory_does_not_exist(f"{codeunit_folder}/.angular")
|
|
1497
|
+
self.standardized_tasks_build_for_angular_codeunit(build_script_file, build_environment_target_type, verbosity, commandline_arguments)
|
|
1498
|
+
|
|
1499
|
+
@GeneralUtilities.check_arguments
|
|
1500
|
+
def standardized_tasks_build_for_node_codeunit(self, build_script_file: str, build_environment_target_type: str, verbosity: int, commandline_arguments: list[str]) -> None:
|
|
1492
1501
|
verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
1493
1502
|
build_script_folder = os.path.dirname(build_script_file)
|
|
1494
1503
|
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
|
|
1495
|
-
self.run_with_epew("
|
|
1504
|
+
self.run_with_epew("npm", f"run build-{build_environment_target_type}", codeunit_folder, verbosity=verbosity)
|
|
1496
1505
|
self.standardized_tasks_build_bom_for_node_project(codeunit_folder, verbosity, commandline_arguments)
|
|
1497
1506
|
self.copy_source_files_to_output_directory(build_script_file)
|
|
1498
1507
|
|
|
@@ -1502,13 +1511,15 @@ class TasksForCommonProjectStructure:
|
|
|
1502
1511
|
# TODO
|
|
1503
1512
|
|
|
1504
1513
|
@GeneralUtilities.check_arguments
|
|
1505
|
-
def standardized_tasks_linting_for_angular_codeunit(self, linting_script_file: str, verbosity: int,
|
|
1506
|
-
|
|
1514
|
+
def standardized_tasks_linting_for_angular_codeunit(self, linting_script_file: str, verbosity: int, build_environment_target_type: str, commandline_arguments: list[str]) -> None:
|
|
1515
|
+
self.standardized_tasks_linting_for_node_codeunit(linting_script_file, verbosity, build_environment_target_type, commandline_arguments)
|
|
1516
|
+
|
|
1517
|
+
@GeneralUtilities.check_arguments
|
|
1518
|
+
def standardized_tasks_linting_for_node_codeunit(self, linting_script_file: str, verbosity: int, build_environment_target_type: str, commandline_arguments: list[str]) -> None:
|
|
1507
1519
|
verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
1508
1520
|
build_script_folder = os.path.dirname(linting_script_file)
|
|
1509
1521
|
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", build_script_folder)
|
|
1510
1522
|
self.run_with_epew("ng", "lint", codeunit_folder, verbosity=verbosity)
|
|
1511
|
-
# TODO check if there are errors in sarif-file
|
|
1512
1523
|
|
|
1513
1524
|
@GeneralUtilities.check_arguments
|
|
1514
1525
|
def standardized_tasks_run_testcases_for_flutter_project_in_common_project_structure(self, script_file: str, verbosity: int, args: list[str], package_name: str, build_environment_target_type: str, generate_badges: bool):
|
|
@@ -1517,15 +1528,13 @@ class TasksForCommonProjectStructure:
|
|
|
1517
1528
|
codeunit_name = os.path.basename(codeunit_folder)
|
|
1518
1529
|
src_folder = GeneralUtilities.resolve_relative_path(package_name, codeunit_folder)
|
|
1519
1530
|
verbosity = self.get_verbosity_from_commandline_arguments(args, verbosity)
|
|
1520
|
-
|
|
1521
|
-
sc.program_runner = ProgramRunnerEpew()
|
|
1522
|
-
sc.run_program("flutter", "test --coverage", src_folder, verbosity)
|
|
1531
|
+
self.run_with_epew("flutter", "test --coverage", src_folder, verbosity)
|
|
1523
1532
|
test_coverage_folder_relative = "Other/Artifacts/TestCoverage"
|
|
1524
1533
|
test_coverage_folder = GeneralUtilities.resolve_relative_path(test_coverage_folder_relative, codeunit_folder)
|
|
1525
1534
|
GeneralUtilities.ensure_directory_exists(test_coverage_folder)
|
|
1526
1535
|
coverage_file_relative = f"{test_coverage_folder_relative}/TestCoverage.xml"
|
|
1527
1536
|
coverage_file = GeneralUtilities.resolve_relative_path(coverage_file_relative, codeunit_folder)
|
|
1528
|
-
|
|
1537
|
+
self.run_with_epew("lcov_cobertura", f"coverage/lcov.info --base-dir . --excludes test --output ../{coverage_file_relative} --demangle", src_folder, verbosity)
|
|
1529
1538
|
content = GeneralUtilities.read_text_from_file(coverage_file)
|
|
1530
1539
|
content = re.sub('<![^<]+>', '', content)
|
|
1531
1540
|
content = re.sub('\\\\', '/', content)
|
|
@@ -1537,21 +1546,65 @@ class TasksForCommonProjectStructure:
|
|
|
1537
1546
|
|
|
1538
1547
|
@GeneralUtilities.check_arguments
|
|
1539
1548
|
def standardized_tasks_run_testcases_for_angular_codeunit(self, runtestcases_script_file: str, build_environment_target_type: str, generate_badges: bool, verbosity: int, commandline_arguments: list[str]) -> None:
|
|
1549
|
+
# prepare
|
|
1540
1550
|
codeunit_name: str = os.path.basename(str(Path(os.path.dirname(runtestcases_script_file)).parent.parent.absolute()))
|
|
1541
1551
|
verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
1542
1552
|
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", os.path.dirname(runtestcases_script_file))
|
|
1543
1553
|
repository_folder = os.path.dirname(codeunit_folder)
|
|
1544
|
-
|
|
1545
|
-
|
|
1554
|
+
|
|
1555
|
+
# run testcases
|
|
1556
|
+
self.standardized_tasks_run_testcases_for_node_codeunit(runtestcases_script_file, build_environment_target_type, generate_badges, verbosity, commandline_arguments)
|
|
1557
|
+
|
|
1558
|
+
# rename file
|
|
1546
1559
|
coverage_folder = os.path.join(codeunit_folder, "Other", "Artifacts", "TestCoverage")
|
|
1547
1560
|
target_file = os.path.join(coverage_folder, "TestCoverage.xml")
|
|
1548
1561
|
GeneralUtilities.ensure_file_does_not_exist(target_file)
|
|
1549
1562
|
os.rename(os.path.join(coverage_folder, "cobertura-coverage.xml"), target_file)
|
|
1550
1563
|
self.__rename_packagename_in_coverage_file(target_file, codeunit_name)
|
|
1564
|
+
|
|
1565
|
+
# adapt backslashs to slashs
|
|
1551
1566
|
content = GeneralUtilities.read_text_from_file(target_file)
|
|
1552
1567
|
content = re.sub('\\\\', '/', content)
|
|
1568
|
+
GeneralUtilities.write_text_to_file(target_file, content)
|
|
1569
|
+
|
|
1570
|
+
# aggregate packages in testcoverage-file
|
|
1571
|
+
roottree: etree._ElementTree = etree.parse(target_file)
|
|
1572
|
+
existing_classes = list(roottree.xpath('//coverage/packages/package/classes/class'))
|
|
1573
|
+
|
|
1574
|
+
old_packages_list = roottree.xpath('//coverage/packages/package')
|
|
1575
|
+
for package in old_packages_list:
|
|
1576
|
+
package.getparent().remove(package)
|
|
1577
|
+
|
|
1578
|
+
root = roottree.getroot()
|
|
1579
|
+
packages_element = root.find("packages")
|
|
1580
|
+
package_element = etree.SubElement(packages_element, "package")
|
|
1581
|
+
package_element.attrib['name'] = codeunit_name
|
|
1582
|
+
package_element.attrib['lines-valid'] = root.attrib["lines-valid"]
|
|
1583
|
+
package_element.attrib['lines-covered'] = root.attrib["lines-covered"]
|
|
1584
|
+
package_element.attrib['line-rate'] = root.attrib["line-rate"]
|
|
1585
|
+
package_element.attrib['branches-valid'] = root.attrib["branches-valid"]
|
|
1586
|
+
package_element.attrib['branches-covered'] = root.attrib["branches-covered"]
|
|
1587
|
+
package_element.attrib['branch-rate'] = root.attrib["branch-rate"]
|
|
1588
|
+
package_element.attrib['timestamp'] = root.attrib["timestamp"]
|
|
1589
|
+
package_element.attrib['complexity'] = root.attrib["complexity"]
|
|
1590
|
+
|
|
1591
|
+
classes_element = etree.SubElement(package_element, "classes")
|
|
1592
|
+
|
|
1593
|
+
for existing_class in existing_classes:
|
|
1594
|
+
classes_element.append(existing_class)
|
|
1595
|
+
|
|
1596
|
+
result = etree.tostring(roottree, pretty_print=True).decode("utf-8")
|
|
1597
|
+
GeneralUtilities.write_text_to_file(target_file, result)
|
|
1598
|
+
|
|
1599
|
+
# post tasks
|
|
1553
1600
|
self.run_testcases_common_post_task(repository_folder, codeunit_name, verbosity, generate_badges, build_environment_target_type, commandline_arguments)
|
|
1554
1601
|
|
|
1602
|
+
@GeneralUtilities.check_arguments
|
|
1603
|
+
def standardized_tasks_run_testcases_for_node_codeunit(self, runtestcases_script_file: str, build_environment_target_type: str, generate_badges: bool, verbosity: int, commandline_arguments: list[str]) -> None:
|
|
1604
|
+
verbosity = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
1605
|
+
codeunit_folder = GeneralUtilities.resolve_relative_path("../..", os.path.dirname(runtestcases_script_file))
|
|
1606
|
+
self.run_with_epew("npm", f"run test-{build_environment_target_type}", codeunit_folder, verbosity=verbosity)
|
|
1607
|
+
|
|
1555
1608
|
@GeneralUtilities.check_arguments
|
|
1556
1609
|
def __rename_packagename_in_coverage_file(self, file: str, codeunit_name: str) -> None:
|
|
1557
1610
|
root: etree._ElementTree = etree.parse(file)
|
|
@@ -1563,13 +1616,13 @@ class TasksForCommonProjectStructure:
|
|
|
1563
1616
|
|
|
1564
1617
|
@GeneralUtilities.check_arguments
|
|
1565
1618
|
def do_npm_install(self, package_json_folder: str, verbosity: int) -> None:
|
|
1566
|
-
self.run_with_epew("npm", "install", package_json_folder, verbosity=verbosity)
|
|
1619
|
+
self.run_with_epew("npm", "clean-install", package_json_folder, verbosity=verbosity)
|
|
1567
1620
|
|
|
1568
1621
|
@GeneralUtilities.check_arguments
|
|
1569
|
-
def run_with_epew(self, program: str, argument: str, working_directory: str, verbosity: int) ->
|
|
1622
|
+
def run_with_epew(self, program: str, argument: str = "", working_directory: str = None, verbosity: int = 1, print_errors_as_information: bool = False, log_file: str = None, timeoutInSeconds: int = 600, addLogOverhead: bool = False, title: str = None, log_namespace: str = "", arguments_for_log: list[str] = None, throw_exception_if_exitcode_is_not_zero: bool = True, custom_argument: object = None, interactive: bool = False) -> tuple[int, str, str, int]:
|
|
1570
1623
|
sc: ScriptCollectionCore = ScriptCollectionCore()
|
|
1571
1624
|
sc.program_runner = ProgramRunnerEpew()
|
|
1572
|
-
sc.run_program(program, argument, working_directory, verbosity
|
|
1625
|
+
return sc.run_program(program, argument, working_directory, verbosity, print_errors_as_information, log_file, timeoutInSeconds, addLogOverhead, title, log_namespace, arguments_for_log, throw_exception_if_exitcode_is_not_zero, custom_argument, interactive)
|
|
1573
1626
|
|
|
1574
1627
|
@GeneralUtilities.check_arguments
|
|
1575
1628
|
def set_default_constants(self, codeunit_folder: str) -> None:
|
|
@@ -1664,7 +1717,7 @@ class TasksForCommonProjectStructure:
|
|
|
1664
1717
|
raise ValueError("Too many results found.")
|
|
1665
1718
|
|
|
1666
1719
|
@GeneralUtilities.check_arguments
|
|
1667
|
-
def copy_development_certificate_to_default_development_directory(self, codeunit_folder: str, build_environment: str, domain: str = None,
|
|
1720
|
+
def copy_development_certificate_to_default_development_directory(self, codeunit_folder: str, build_environment: str, domain: str = None, certificate_resource_name: str = "DevelopmentCertificate") -> None:
|
|
1668
1721
|
if build_environment == "Development":
|
|
1669
1722
|
codeunit_name: str = os.path.basename(codeunit_folder)
|
|
1670
1723
|
if domain is None:
|
|
@@ -1736,13 +1789,14 @@ class TasksForCommonProjectStructure:
|
|
|
1736
1789
|
GeneralUtilities.write_message_to_stdout("Generate OpenAPI-specification-file...")
|
|
1737
1790
|
codeunitname = os.path.basename(str(Path(os.path.dirname(buildscript_file)).parent.parent.absolute()))
|
|
1738
1791
|
repository_folder = str(Path(os.path.dirname(buildscript_file)).parent.parent.parent.absolute())
|
|
1739
|
-
|
|
1792
|
+
codeunit_folder = os.path.join(repository_folder, codeunitname)
|
|
1793
|
+
artifacts_folder = os.path.join(codeunit_folder, "Other", "Artifacts")
|
|
1740
1794
|
GeneralUtilities.ensure_directory_exists(os.path.join(artifacts_folder, "APISpecification"))
|
|
1741
1795
|
verbosity = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
1742
|
-
codeunit_version = self.get_version_of_codeunit_folder(
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1796
|
+
codeunit_version = self.get_version_of_codeunit_folder(codeunit_folder)
|
|
1797
|
+
versioned_api_spec_file = f"APISpecification/{codeunitname}.v{codeunit_version}.api.json"
|
|
1798
|
+
self.__sc.run_program("swagger", f"tofile --output {versioned_api_spec_file} BuildResult_DotNet_{runtime}/{codeunitname}.dll {swagger_document_name}", artifacts_folder, verbosity=verbosity)
|
|
1799
|
+
shutil.copyfile(os.path.join(artifacts_folder, versioned_api_spec_file), os.path.join(artifacts_folder, f"APISpecification/{codeunitname}.latest.api.json"))
|
|
1746
1800
|
|
|
1747
1801
|
@GeneralUtilities.check_arguments
|
|
1748
1802
|
def replace_version_in_packagejson_file(self, packagejson_file: str, codeunit_version: str) -> None:
|
|
@@ -1754,8 +1808,8 @@ class TasksForCommonProjectStructure:
|
|
|
1754
1808
|
json.dump(data, f, indent=2)
|
|
1755
1809
|
|
|
1756
1810
|
@GeneralUtilities.check_arguments
|
|
1757
|
-
def build_dependent_code_units(self, repo_folder: str, codeunit_name: str, verbosity: int, target_environmenttype: str, additional_arguments_file: str, commandlinearguments:list[str]) -> None:
|
|
1758
|
-
verbosity=self.get_verbosity_from_commandline_arguments(commandlinearguments,verbosity)
|
|
1811
|
+
def build_dependent_code_units(self, repo_folder: str, codeunit_name: str, verbosity: int, target_environmenttype: str, additional_arguments_file: str, commandlinearguments: list[str]) -> None:
|
|
1812
|
+
verbosity = self.get_verbosity_from_commandline_arguments(commandlinearguments, verbosity)
|
|
1759
1813
|
codeunit_file = os.path.join(repo_folder, codeunit_name, codeunit_name + ".codeunit.xml")
|
|
1760
1814
|
dependent_codeunits = self.get_dependent_code_units(codeunit_file)
|
|
1761
1815
|
dependent_codeunits_folder = os.path.join(repo_folder, codeunit_name, "Other", "Resources", "DependentCodeUnits")
|
|
@@ -1763,7 +1817,7 @@ class TasksForCommonProjectStructure:
|
|
|
1763
1817
|
if 0 < len(dependent_codeunits):
|
|
1764
1818
|
GeneralUtilities.write_message_to_stdout(f"Start building dependent codeunits for codeunit {codeunit_name}.")
|
|
1765
1819
|
for dependent_codeunit in dependent_codeunits:
|
|
1766
|
-
self.__build_codeunit(os.path.join(repo_folder, dependent_codeunit), verbosity, target_environmenttype, additional_arguments_file,False,False,commandlinearguments)
|
|
1820
|
+
self.__build_codeunit(os.path.join(repo_folder, dependent_codeunit), verbosity, target_environmenttype, additional_arguments_file, False, False, commandlinearguments)
|
|
1767
1821
|
if 0 < len(dependent_codeunits):
|
|
1768
1822
|
GeneralUtilities.write_message_to_stdout(f"Finished building dependent codeunits for codeunit {codeunit_name}.")
|
|
1769
1823
|
|
|
@@ -1791,12 +1845,11 @@ class TasksForCommonProjectStructure:
|
|
|
1791
1845
|
for codeunit in codeunits:
|
|
1792
1846
|
artifact_files.append(self.__sc.find_file_by_extension(f"{build_artifacts_folder}\\{productname}\\{projectversion}\\{codeunit}", "Productive.Artifacts.zip"))
|
|
1793
1847
|
changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{projectversion}.md")
|
|
1794
|
-
self.__sc.run_program_argsasarray("gh", ["release", "create", f"v{projectversion}", "--repo", github_repo, "--notes-file", changelog_file,
|
|
1795
|
-
"--title", f"Release v{projectversion}"]+artifact_files, verbosity=verbosity)
|
|
1848
|
+
self.__sc.run_program_argsasarray("gh", ["release", "create", f"v{projectversion}", "--repo", github_repo, "--notes-file", changelog_file, "--title", f"Release v{projectversion}"]+artifact_files, verbosity=verbosity)
|
|
1796
1849
|
|
|
1797
1850
|
@GeneralUtilities.check_arguments
|
|
1798
1851
|
def update_dependencies_of_typical_flutter_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
|
|
1799
|
-
pass # TODO
|
|
1852
|
+
pass # TODO generalize and add option to ignore certain dependencies
|
|
1800
1853
|
|
|
1801
1854
|
@GeneralUtilities.check_arguments
|
|
1802
1855
|
def update_dependencies_of_typical_python_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
|
|
@@ -1825,11 +1878,36 @@ class TasksForCommonProjectStructure:
|
|
|
1825
1878
|
|
|
1826
1879
|
@GeneralUtilities.check_arguments
|
|
1827
1880
|
def update_dependencies_of_typical_node_codeunit(self, update_script_file: str, verbosity: int, cmd_args: list[str]) -> None:
|
|
1828
|
-
|
|
1881
|
+
current_folder = os.path.dirname(update_script_file)
|
|
1882
|
+
result = self.run_with_epew("npm", "outdated", current_folder, verbosity, throw_exception_if_exitcode_is_not_zero=False)
|
|
1883
|
+
if result[0] == 0:
|
|
1884
|
+
return # all dependencies up to date
|
|
1885
|
+
elif result[0] == 1:
|
|
1886
|
+
package_json_content = None
|
|
1887
|
+
package_json_file = f"{current_folder}/package.json"
|
|
1888
|
+
with open(package_json_file, "r", encoding="utf-8") as package_json_file_object:
|
|
1889
|
+
package_json_content = json.load(package_json_file_object)
|
|
1890
|
+
lines = GeneralUtilities.string_to_lines(result[1])[1:][:-1]
|
|
1891
|
+
for line in lines:
|
|
1892
|
+
normalized_line_splitted = ' '.join(line.split()).split(" ")
|
|
1893
|
+
package = normalized_line_splitted[0]
|
|
1894
|
+
latest_version = normalized_line_splitted[3]
|
|
1895
|
+
if package in package_json_content["dependencies"]:
|
|
1896
|
+
package_json_content["dependencies"][package] = latest_version
|
|
1897
|
+
if package in package_json_content["devDependencies"]:
|
|
1898
|
+
package_json_content["devDependencies"][package] = latest_version
|
|
1899
|
+
with open(package_json_file, "w", encoding="utf-8") as package_json_file_object:
|
|
1900
|
+
json.dump(package_json_content, package_json_file_object, indent=4)
|
|
1901
|
+
self.run_with_epew("npm", "install --force", current_folder, verbosity)
|
|
1902
|
+
else:
|
|
1903
|
+
GeneralUtilities.write_message_to_stderr("Update dependencies resulted in an error.")
|
|
1829
1904
|
|
|
1830
1905
|
@GeneralUtilities.check_arguments
|
|
1831
1906
|
def run_local_test_service(self, file: str):
|
|
1832
1907
|
example_folder = os.path.dirname(file)
|
|
1908
|
+
docker_compose_file = os.path.join(example_folder, "docker-compose.yml")
|
|
1909
|
+
for service in self.__sc.get_services_from_yaml_file(docker_compose_file):
|
|
1910
|
+
self.__sc.kill_docker_container(service)
|
|
1833
1911
|
example_name = os.path.basename(example_folder)
|
|
1834
1912
|
title = f"Test{example_name}"
|
|
1835
1913
|
self.__sc.run_program("docker", f"compose -p {title.lower()} up", example_folder, title=title)
|
|
@@ -1915,33 +1993,31 @@ class TasksForCommonProjectStructure:
|
|
|
1915
1993
|
raise ValueError(f"Invalid target-environmenttype: '{target_environmenttype}'")
|
|
1916
1994
|
|
|
1917
1995
|
@GeneralUtilities.check_arguments
|
|
1918
|
-
def build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = False,commandlinearguments:list[str]=[]) -> None:
|
|
1996
|
+
def build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = False, commandlinearguments: list[str] = []) -> None:
|
|
1919
1997
|
codeunit_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(codeunit_folder)
|
|
1920
1998
|
codeunit_name = os.path.basename(codeunit_folder)
|
|
1921
1999
|
repository_folder = os.path.dirname(codeunit_folder)
|
|
1922
|
-
self.build_specific_codeunits(repository_folder, [codeunit_name], verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, assume_dependent_codeunits_are_already_built,commandlinearguments)
|
|
2000
|
+
self.build_specific_codeunits(repository_folder, [codeunit_name], verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, assume_dependent_codeunits_are_already_built, commandlinearguments)
|
|
1923
2001
|
|
|
1924
2002
|
@GeneralUtilities.check_arguments
|
|
1925
|
-
def build_codeunitsC(self, repository_folder: str, image: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None,commandlinearguments:list[str]=[]) -> None:
|
|
2003
|
+
def build_codeunitsC(self, repository_folder: str, image: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, commandlinearguments: list[str] = []) -> None:
|
|
1926
2004
|
if target_environmenttype == "Development":
|
|
1927
2005
|
raise ValueError(f"build_codeunitsC is not available for target_environmenttype {target_environmenttype}.")
|
|
1928
2006
|
# TODO handle additional_arguments_file
|
|
1929
2007
|
# TODO add option to allow building different codeunits in same project with different images due to their demands
|
|
1930
2008
|
# TODO check if image provides all demands of codeunit
|
|
1931
2009
|
self.__sc.run_program(
|
|
1932
|
-
"docker", f"run --volume {repository_folder}:/Workspace/Repository " +
|
|
1933
|
-
f"-e repositoryfolder=/Workspace/Repository -e verbosity={verbosity} -e targetenvironment={target_environmenttype} {image}",
|
|
1934
|
-
repository_folder)
|
|
2010
|
+
"docker", f"run --volume {repository_folder}:/Workspace/Repository " + f"-e repositoryfolder=/Workspace/Repository -e verbosity={verbosity} -e targetenvironment={target_environmenttype} {image}", repository_folder)
|
|
1935
2011
|
|
|
1936
2012
|
@GeneralUtilities.check_arguments
|
|
1937
|
-
def build_codeunits(self, repository_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None,commandline_arguments:list[str]=[]) -> None:
|
|
2013
|
+
def build_codeunits(self, repository_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, commandline_arguments: list[str] = []) -> None:
|
|
1938
2014
|
self.__check_target_environmenttype(target_environmenttype)
|
|
1939
2015
|
repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
|
|
1940
2016
|
codeunits = self.get_codeunits(repository_folder, False)
|
|
1941
|
-
self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory,False,commandline_arguments)
|
|
2017
|
+
self.build_specific_codeunits(repository_folder, codeunits, verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, export_target_directory, False, commandline_arguments)
|
|
1942
2018
|
|
|
1943
2019
|
@GeneralUtilities.check_arguments
|
|
1944
|
-
def build_specific_codeunits(self, repository_folder: str, codeunits: list[str], verbosity: int = 1, target_environmenttype: str = "QualityCheck",additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = True,commandline_arguments:list[str]=[]) -> None:
|
|
2020
|
+
def build_specific_codeunits(self, repository_folder: str, codeunits: list[str], verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, export_target_directory: str = None, assume_dependent_codeunits_are_already_built: bool = True, commandline_arguments: list[str] = []) -> None:
|
|
1945
2021
|
self.__check_target_environmenttype(target_environmenttype)
|
|
1946
2022
|
repository_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(repository_folder)
|
|
1947
2023
|
contains_uncommitted_changes = self.__sc.git_repository_has_uncommitted_changes(repository_folder)
|
|
@@ -1971,8 +2047,7 @@ class TasksForCommonProjectStructure:
|
|
|
1971
2047
|
line = "----------"
|
|
1972
2048
|
for codeunit in sorted_codeunits:
|
|
1973
2049
|
GeneralUtilities.write_message_to_stdout(line)
|
|
1974
|
-
self.__build_codeunit(os.path.join(repository_folder, codeunit), verbosity, target_environmenttype,
|
|
1975
|
-
additional_arguments_file, is_pre_merge, assume_dependent_codeunits_are_already_built,commandline_arguments)
|
|
2050
|
+
self.__build_codeunit(os.path.join(repository_folder, codeunit), verbosity, target_environmenttype, additional_arguments_file, is_pre_merge, assume_dependent_codeunits_are_already_built, commandline_arguments)
|
|
1976
2051
|
GeneralUtilities.write_message_to_stdout(line)
|
|
1977
2052
|
if not contains_uncommitted_changes and self.__sc.git_repository_has_uncommitted_changes(repository_folder) and not is_pre_merge:
|
|
1978
2053
|
message = f'Due to the build-process the repository "{repository_folder}" has new uncommitted changes.'
|
|
@@ -2003,7 +2078,7 @@ class TasksForCommonProjectStructure:
|
|
|
2003
2078
|
|
|
2004
2079
|
@GeneralUtilities.check_arguments
|
|
2005
2080
|
def __check_if_folder_is_git_repository(self, repository_folder: str) -> None:
|
|
2006
|
-
if(not self.__sc.is_git_repository(repository_folder)):
|
|
2081
|
+
if (not self.__sc.is_git_repository(repository_folder)):
|
|
2007
2082
|
raise ValueError(f"Folder {repository_folder} is not a git-repository")
|
|
2008
2083
|
|
|
2009
2084
|
@GeneralUtilities.check_arguments
|
|
@@ -2146,7 +2221,7 @@ class TasksForCommonProjectStructure:
|
|
|
2146
2221
|
for file in GeneralUtilities.get_all_files_of_folder(files_folder):
|
|
2147
2222
|
if file.endswith(".plantuml"):
|
|
2148
2223
|
argument = ['-jar', f'{plant_uml_folder}/plantuml.jar', os.path.basename(file).replace("\\", "/"), '-tsvg']
|
|
2149
|
-
sc.run_program_argsasarray("java", argument, os.path.dirname(file),verbosity=0)
|
|
2224
|
+
sc.run_program_argsasarray("java", argument, os.path.dirname(file), verbosity=0)
|
|
2150
2225
|
|
|
2151
2226
|
@GeneralUtilities.check_arguments
|
|
2152
2227
|
def load_deb_control_file_content(self, file: str, codeunitname: str, codeunitversion: str, installedsize: int, maintainername: str, maintaineremail: str, description: str,) -> str:
|
|
@@ -2224,7 +2299,7 @@ class TasksForCommonProjectStructure:
|
|
|
2224
2299
|
GeneralUtilities.write_message_to_stderr(f"Warning: {message}")
|
|
2225
2300
|
|
|
2226
2301
|
@GeneralUtilities.check_arguments
|
|
2227
|
-
def __build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, assume_dependent_codeunits_are_already_built: bool = False,commandline_arguments:list[str]=[]) -> None:
|
|
2302
|
+
def __build_codeunit(self, codeunit_folder: str, verbosity: int = 1, target_environmenttype: str = "QualityCheck", additional_arguments_file: str = None, is_pre_merge: bool = False, assume_dependent_codeunits_are_already_built: bool = False, commandline_arguments: list[str] = []) -> None:
|
|
2228
2303
|
now = datetime.now()
|
|
2229
2304
|
codeunit_folder = GeneralUtilities.resolve_relative_path_from_current_working_directory(codeunit_folder)
|
|
2230
2305
|
codeunit_name: str = os.path.basename(codeunit_folder)
|
|
@@ -2242,7 +2317,7 @@ class TasksForCommonProjectStructure:
|
|
|
2242
2317
|
GeneralUtilities.write_message_to_stdout(f"Build-environmenttype: {target_environmenttype}")
|
|
2243
2318
|
GeneralUtilities.ensure_directory_does_not_exist(artifacts_folder)
|
|
2244
2319
|
|
|
2245
|
-
verbosity_for_executed_programs = self.get_verbosity_from_commandline_arguments(commandline_arguments,verbosity)
|
|
2320
|
+
verbosity_for_executed_programs = self.get_verbosity_from_commandline_arguments(commandline_arguments, verbosity)
|
|
2246
2321
|
|
|
2247
2322
|
other_folder = os.path.join(codeunit_folder, "Other")
|
|
2248
2323
|
build_folder = os.path.join(other_folder, "Build")
|
|
@@ -2340,13 +2415,15 @@ class TasksForCommonProjectStructure:
|
|
|
2340
2415
|
def generic_update_dependencies(self, repository_folder: str):
|
|
2341
2416
|
codeunits = self.get_codeunits(repository_folder)
|
|
2342
2417
|
updated_dependencies = False
|
|
2418
|
+
verbosity: int = 1 # TODO set value dynamically
|
|
2343
2419
|
for codeunit in codeunits:
|
|
2344
2420
|
codeunit_file = os.path.join(repository_folder, codeunit, f"{codeunit}.codeunit.xml")
|
|
2345
2421
|
codeunit_has_updatable_dependencies = self.codeunit_has_updatable_dependencies(codeunit_file)
|
|
2346
2422
|
if codeunit_has_updatable_dependencies:
|
|
2347
2423
|
codeunit_folder = os.path.join(repository_folder, codeunit)
|
|
2348
2424
|
update_dependencies_script_folder = os.path.join(codeunit_folder, "Other")
|
|
2349
|
-
|
|
2425
|
+
GeneralUtilities.ensure_directory_exists(os.path.join(update_dependencies_script_folder, "Resources", "CodeAnalysisResult"))
|
|
2426
|
+
self.__sc.run_program("python", "UpdateDependencies.py", update_dependencies_script_folder, verbosity)
|
|
2350
2427
|
if self.__sc.git_repository_has_uncommitted_changes(repository_folder):
|
|
2351
2428
|
version_of_project = self.get_version_of_project(repository_folder)
|
|
2352
2429
|
changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{version_of_project}.md")
|
|
@@ -2362,7 +2439,7 @@ class TasksForCommonProjectStructure:
|
|
|
2362
2439
|
else:
|
|
2363
2440
|
GeneralUtilities.write_message_to_stdout(f"There are no dependencies to update in codeunit {codeunit}.")
|
|
2364
2441
|
if updated_dependencies:
|
|
2365
|
-
self.__sc.run_program("scbuildcodeunits", "--targetenvironment QualityCheck", repository_folder)#TODO set verbosity
|
|
2442
|
+
self.__sc.run_program("scbuildcodeunits", "--targetenvironment QualityCheck", repository_folder) # TODO set verbosity
|
|
2366
2443
|
self.__sc.git_commit(repository_folder, "Updated dependencies")
|
|
2367
2444
|
|
|
2368
2445
|
class GenericPrepareNewReleaseArguments:
|
|
@@ -2389,7 +2466,7 @@ class TasksForCommonProjectStructure:
|
|
|
2389
2466
|
# prepare
|
|
2390
2467
|
self.assert_no_uncommitted_changes(repository_folder)
|
|
2391
2468
|
self.__sc.git_checkout(repository_folder, merge_source_branch)
|
|
2392
|
-
if
|
|
2469
|
+
if "--dependencyupdate" in generic_prepare_new_release_arguments.commandline_arguments:
|
|
2393
2470
|
self.generic_update_dependencies(repository_folder)
|
|
2394
2471
|
self.merge_to_main_branch(repository_folder, merge_source_branch, verbosity=verbosity, fast_forward_source_branch=True)
|
|
2395
2472
|
self.__sc.git_commit(build_repository_folder, "Updated submodule due to merge to main-branch.")
|
|
@@ -2401,7 +2478,7 @@ class TasksForCommonProjectStructure:
|
|
|
2401
2478
|
artifacts_target_folder: str
|
|
2402
2479
|
commandline_arguments: list[str]
|
|
2403
2480
|
|
|
2404
|
-
def __init__(self, current_file: str, product_name: str, common_remote_name: str, artifacts_target_folder: str,commandline_arguments: list[str]):
|
|
2481
|
+
def __init__(self, current_file: str, product_name: str, common_remote_name: str, artifacts_target_folder: str, commandline_arguments: list[str]):
|
|
2405
2482
|
self.current_file = current_file
|
|
2406
2483
|
self.product_name = product_name
|
|
2407
2484
|
self.common_remote_name = common_remote_name
|
|
@@ -2409,7 +2486,7 @@ class TasksForCommonProjectStructure:
|
|
|
2409
2486
|
self.commandline_arguments = commandline_arguments
|
|
2410
2487
|
|
|
2411
2488
|
@GeneralUtilities.check_arguments
|
|
2412
|
-
def generic_create_release(self, generic_create_release_arguments:GenericCreateReleaseArguments) -> str:
|
|
2489
|
+
def generic_create_release(self, generic_create_release_arguments: GenericCreateReleaseArguments) -> str:
|
|
2413
2490
|
folder_of_this_file = os.path.dirname(generic_create_release_arguments.current_file)
|
|
2414
2491
|
build_repository_folder = GeneralUtilities.resolve_relative_path("../..", folder_of_this_file)
|
|
2415
2492
|
repository_folder_name = generic_create_release_arguments.product_name
|
|
@@ -2418,10 +2495,18 @@ class TasksForCommonProjectStructure:
|
|
|
2418
2495
|
verbosity: int = TasksForCommonProjectStructure.get_verbosity_from_commandline_arguments(generic_create_release_arguments.commandline_arguments, 1)
|
|
2419
2496
|
createReleaseConfiguration: CreateReleaseConfiguration = CreateReleaseConfiguration(
|
|
2420
2497
|
generic_create_release_arguments.product_name, generic_create_release_arguments.common_remote_name, generic_create_release_arguments.artifacts_target_folder, folder_of_this_file, verbosity, repository_folder, additional_arguments_file, repository_folder_name)
|
|
2498
|
+
|
|
2499
|
+
reference_repo: str = os.path.join(build_repository_folder, "Submodules", f"{generic_create_release_arguments.product_name}Reference")
|
|
2500
|
+
self.__sc.git_commit(reference_repo, "Updated reference")
|
|
2501
|
+
|
|
2421
2502
|
self.__sc.git_commit(build_repository_folder, "Updated submodule")
|
|
2422
2503
|
|
|
2423
2504
|
# create release
|
|
2424
2505
|
new_version = self.merge_to_stable_branch(generic_create_release_arguments.current_file, createReleaseConfiguration)
|
|
2506
|
+
|
|
2507
|
+
merge_source_branch = "other/next-release"
|
|
2508
|
+
self.__sc.git_checkout(repository_folder, merge_source_branch)
|
|
2509
|
+
|
|
2425
2510
|
return new_version
|
|
2426
2511
|
|
|
2427
2512
|
class UpdateHTTPDocumentationArguments:
|