ScriptCollection 3.5.16__py3-none-any.whl → 4.0.78__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.
Files changed (45) hide show
  1. ScriptCollection/AnionBuildPlatform.py +206 -0
  2. ScriptCollection/{UpdateCertificates.py → CertificateUpdater.py} +69 -46
  3. ScriptCollection/Executables.py +515 -18
  4. ScriptCollection/GeneralUtilities.py +1272 -873
  5. ScriptCollection/ImageUpdater.py +648 -0
  6. ScriptCollection/ProgramRunnerBase.py +10 -10
  7. ScriptCollection/ProgramRunnerMock.py +2 -0
  8. ScriptCollection/ProgramRunnerPopen.py +7 -1
  9. ScriptCollection/ProgramRunnerSudo.py +108 -0
  10. ScriptCollection/SCLog.py +115 -0
  11. ScriptCollection/ScriptCollectionCore.py +942 -266
  12. ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py +95 -0
  13. ScriptCollection/TFCPS/Docker/__init__.py +0 -0
  14. ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationBase.py +8 -0
  15. ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationGenerate.py +6 -0
  16. ScriptCollection/TFCPS/DotNet/CertificateGeneratorInformationNoGenerate.py +7 -0
  17. ScriptCollection/TFCPS/DotNet/TFCPS_CodeUnitSpecific_DotNet.py +485 -0
  18. ScriptCollection/TFCPS/DotNet/__init__.py +0 -0
  19. ScriptCollection/TFCPS/Flutter/TFCPS_CodeUnitSpecific_Flutter.py +130 -0
  20. ScriptCollection/TFCPS/Flutter/__init__.py +0 -0
  21. ScriptCollection/TFCPS/Go/TFCPS_CodeUnitSpecific_Go.py +74 -0
  22. ScriptCollection/TFCPS/Go/__init__.py +0 -0
  23. ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py +131 -0
  24. ScriptCollection/TFCPS/NodeJS/__init__.py +0 -0
  25. ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py +227 -0
  26. ScriptCollection/TFCPS/Python/__init__.py +0 -0
  27. ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py +418 -0
  28. ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py +128 -0
  29. ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py +136 -0
  30. ScriptCollection/TFCPS/TFCPS_CreateRelease.py +95 -0
  31. ScriptCollection/TFCPS/TFCPS_Generic.py +43 -0
  32. ScriptCollection/TFCPS/TFCPS_MergeToMain.py +122 -0
  33. ScriptCollection/TFCPS/TFCPS_MergeToStable.py +350 -0
  34. ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py +47 -0
  35. ScriptCollection/TFCPS/TFCPS_Tools_General.py +1356 -0
  36. ScriptCollection/TFCPS/__init__.py +0 -0
  37. {ScriptCollection-3.5.16.dist-info → scriptcollection-4.0.78.dist-info}/METADATA +23 -22
  38. scriptcollection-4.0.78.dist-info/RECORD +43 -0
  39. {ScriptCollection-3.5.16.dist-info → scriptcollection-4.0.78.dist-info}/WHEEL +1 -1
  40. {ScriptCollection-3.5.16.dist-info → scriptcollection-4.0.78.dist-info}/entry_points.txt +32 -0
  41. ScriptCollection/ProgramRunnerEpew.py +0 -122
  42. ScriptCollection/RPStream.py +0 -42
  43. ScriptCollection/TasksForCommonProjectStructure.py +0 -2625
  44. ScriptCollection-3.5.16.dist-info/RECORD +0 -16
  45. {ScriptCollection-3.5.16.dist-info → scriptcollection-4.0.78.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,350 @@
1
+ import argparse
2
+ import os
3
+ import shutil
4
+ from functools import cmp_to_key
5
+ from ..GeneralUtilities import GeneralUtilities
6
+ from ..ScriptCollectionCore import ScriptCollectionCore
7
+ from ..SCLog import LogLevel
8
+ from .TFCPS_Tools_General import TFCPS_Tools_General
9
+ from .TFCPS_MergeToMain import TFCPS_MergeToMain
10
+ from .TFCPS_CodeUnit_BuildCodeUnits import TFCPS_CodeUnit_BuildCodeUnits
11
+
12
+
13
+
14
+ class MergeToStableConfiguration:
15
+ log_level:LogLevel
16
+ source_branch:str#main
17
+ target_branch:str#stable
18
+ repository:str
19
+ build_repo:str
20
+ common_remote_name:str
21
+ build_repo_main_branch_name:str
22
+ reference_repo_main_branch_name:str
23
+ reference_remote_name:str
24
+ build_repo_remote_name:str
25
+ artifacts_target_folder:str
26
+ common_remote_url:str
27
+ additional_arguments_file:str
28
+
29
+ def __init__(self,loglevel:LogLevel,source_branch:str,target_branch:str,repository:str,build_repo:str,common_remote_name:str,build_repo_main_branch_name:str,reference_repo_main_branch_name:str,reference_remote_name:str,build_repo_remote_name:str,artifacts_target_folder:str,common_remote_url:str,additional_arguments_file:str):
30
+ self.log_level=loglevel
31
+ self.source_branch=source_branch
32
+ self.target_branch=target_branch
33
+ self.repository=repository
34
+ self.build_repo=build_repo
35
+ self.common_remote_name=common_remote_name
36
+ self.build_repo_main_branch_name=build_repo_main_branch_name
37
+ self.reference_repo_main_branch_name=reference_repo_main_branch_name
38
+ self.reference_remote_name=reference_remote_name
39
+ self.build_repo_remote_name=build_repo_remote_name
40
+ self.artifacts_target_folder=artifacts_target_folder
41
+ self.common_remote_url=common_remote_url
42
+ self.additional_arguments_file=additional_arguments_file
43
+
44
+ class TFCPS_MergeToStable:
45
+
46
+ sc:ScriptCollectionCore
47
+ tFCPS_Tools_General:TFCPS_Tools_General
48
+ createRelease_configuration: MergeToStableConfiguration
49
+
50
+ def __init__(self, createRelease_configuration: MergeToStableConfiguration):
51
+ self.sc=ScriptCollectionCore()
52
+ self.tFCPS_Tools_General=TFCPS_Tools_General(self.sc)
53
+ self.createRelease_configuration=createRelease_configuration
54
+
55
+ @GeneralUtilities.check_arguments
56
+ def merge_to_stable_branch(self):
57
+ self.sc.log.loglevel=self.createRelease_configuration.log_level
58
+ self.sc.log.log("Merge to stable-branch...")
59
+ product_name:str=os.path.basename(self.createRelease_configuration.repository)
60
+
61
+ GeneralUtilities.assert_condition(self.sc.git_get_commit_id(self.createRelease_configuration.repository,self.createRelease_configuration.source_branch)!=self.sc.git_get_commit_id(self.createRelease_configuration.repository,self.createRelease_configuration.target_branch),"Source- and target-branch must not be the same commit.")
62
+
63
+ self.sc.assert_is_git_repository(self.createRelease_configuration.repository)
64
+ self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.repository)
65
+ self.sc.git_checkout(self.createRelease_configuration.repository, self.createRelease_configuration.source_branch)
66
+ self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.repository)
67
+
68
+ reference_repo=self.createRelease_configuration.repository+"Reference"
69
+ self.sc.assert_is_git_repository(reference_repo)
70
+ self.sc.assert_no_uncommitted_changes(reference_repo)
71
+
72
+ self.sc.assert_is_git_repository(self.createRelease_configuration.build_repo)
73
+ self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.build_repo)
74
+
75
+ product_version:str=self.tFCPS_Tools_General.get_version_of_project(self.createRelease_configuration.repository)
76
+
77
+ tfcps_CodeUnit_BuildCodeUnits:TFCPS_CodeUnit_BuildCodeUnits=TFCPS_CodeUnit_BuildCodeUnits(self.createRelease_configuration.repository,self.sc.log.loglevel,"Productive",self.createRelease_configuration.additional_arguments_file,False,False)
78
+ try:
79
+ tfcps_CodeUnit_BuildCodeUnits.build_codeunits()
80
+ except Exception:
81
+ self.sc.git_undo_all_changes(self.createRelease_configuration.repository)
82
+ raise
83
+
84
+
85
+ self.sc.log.log("Release artifacts...")
86
+ repository:str=self.createRelease_configuration.repository
87
+ project_version:str=self.tFCPS_Tools_General.get_version_of_project(repository)
88
+ for codeunit in self.tFCPS_Tools_General.get_codeunits(self.createRelease_configuration.repository):
89
+ self.sc.git_checkout(self.createRelease_configuration.repository, self.createRelease_configuration.source_branch, True,True)
90
+ if self.createRelease_configuration.artifacts_target_folder is not None:
91
+ #export artifacts to local target folder
92
+ self.sc.log.log(f"Export artifacts of codeunit {codeunit} to target-folder...")
93
+ source_folder:str=GeneralUtilities.resolve_relative_path(f"./{codeunit}/Other/Artifacts",self.createRelease_configuration.repository)
94
+ target_folder:str=GeneralUtilities.resolve_relative_path(f"./{product_name}/{product_version}/{codeunit}",self.createRelease_configuration.artifacts_target_folder)
95
+ GeneralUtilities.ensure_directory_exists(target_folder)
96
+ codeunit_version:str=self.tFCPS_Tools_General.get_version_of_codeunit(os.path.join(self.createRelease_configuration.repository,codeunit,f"{codeunit}.codeunit.xml"))
97
+ target_file:str=os.path.join(target_folder,f"{codeunit}.v{codeunit_version}.Artifacts.zip")
98
+ self.sc.create_zip_archive(source_folder,target_file)
99
+
100
+ #push artifacts
101
+ push_script:str=os.path.join( self.createRelease_configuration.build_repo,"Scripts","CreateRelease",f"PushArtifacts.{codeunit}.py")
102
+ if os.path.isfile(push_script):
103
+ self.sc.log.log(f"Push artifacts of codeunit {codeunit}...")
104
+ self.sc.run_program("python",os.path.basename(push_script),os.path.dirname(push_script))
105
+ else:
106
+ self.sc.log.log(f"Codeunit {codeunit} does not have artifacts to push. (Scriptfile \"{push_script}\" does not exist.)",LogLevel.Debug)
107
+
108
+ # update codeunit-reference
109
+ self.sc.log.log(f"Release artifacts of codeunit {codeunit}...")
110
+ reference_folder:str=os.path.join(reference_repo,"ReferenceContent")
111
+ projectname:str=os.path.basename(repository)
112
+ public_repository_url:str=self.createRelease_configuration.common_remote_url
113
+ main_branch_name:str=self.createRelease_configuration.source_branch
114
+ codeunit_version=self.tFCPS_Tools_General.get_version_of_codeunit(os.path.join(repository,codeunit,f"{codeunit}.codeunit.xml"))
115
+ self.__export_codeunit_reference_content_to_reference_repository(f"v{project_version}", False, reference_folder, repository, codeunit, projectname, codeunit_version, public_repository_url, f"v{project_version}")
116
+ self.__export_codeunit_reference_content_to_reference_repository("Latest", True, reference_folder, repository, codeunit, projectname, codeunit_version, public_repository_url, main_branch_name)
117
+
118
+ # Generate reference
119
+ self.__generate_entire_reference(projectname, project_version, reference_folder,reference_repo)
120
+
121
+ self.sc.log.log("Finishing merging to stable...")
122
+ self.sc.git_commit(reference_repo,f"Added reference for v{project_version}")
123
+
124
+ self.sc.git_merge(self.createRelease_configuration.repository, self.createRelease_configuration.source_branch,self.createRelease_configuration.target_branch, True,True,None,True,True)
125
+
126
+ self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.repository)
127
+ self.sc.assert_no_uncommitted_changes(reference_repo)
128
+ self.sc.git_commit(self.createRelease_configuration.build_repo,"Updated submodules")
129
+
130
+ self.sc.git_push_with_retry(self.createRelease_configuration.repository,self.createRelease_configuration.common_remote_name,self.createRelease_configuration.source_branch,self.createRelease_configuration.source_branch)
131
+ self.sc.git_push_with_retry(self.createRelease_configuration.repository,self.createRelease_configuration.common_remote_name,self.createRelease_configuration.target_branch,self.createRelease_configuration.target_branch)
132
+ self.sc.git_push_with_retry(self.createRelease_configuration.build_repo,self.createRelease_configuration.build_repo_remote_name,self.createRelease_configuration.build_repo_main_branch_name,self.createRelease_configuration.build_repo_main_branch_name)
133
+ self.sc.git_push_with_retry(reference_repo,self.createRelease_configuration.reference_remote_name,self.createRelease_configuration.reference_repo_main_branch_name,self.createRelease_configuration.reference_repo_main_branch_name)
134
+
135
+
136
+ def __remove_outdated_version(self,reference_repo:str):
137
+ now = GeneralUtilities.get_now()
138
+ for unsupported_version in self.tFCPS_Tools_General.get_unsupported_versions(self.createRelease_configuration.repository, now):
139
+ unsupported_reference_folder = f"{reference_repo}/ReferenceContent/v{unsupported_version[0]}"
140
+ GeneralUtilities.ensure_directory_does_not_exist(unsupported_reference_folder)
141
+
142
+
143
+ @GeneralUtilities.check_arguments
144
+ def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str,reference_repo:str) -> None:
145
+ self.sc.log.log("Remove outdated versions...")
146
+ self.__remove_outdated_version(reference_repo)
147
+ self.sc.log.log("Generate reference...")
148
+ all_available_version_identifier_folders_of_reference: list[str] = list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(reference_folder))
149
+ all_available_version_identifier_folders_of_reference = sorted(all_available_version_identifier_folders_of_reference, key=cmp_to_key(TFCPS_Tools_General.sort_reference_folder))
150
+ reference_versions_html_lines = []
151
+ reference_versions_html_lines.append(' <hr/>')
152
+ for all_available_version_identifier_folder_of_reference in all_available_version_identifier_folders_of_reference:
153
+ version_identifier_of_project = os.path.basename(all_available_version_identifier_folder_of_reference)
154
+ if version_identifier_of_project == "Latest":
155
+ latest_version_hint = f" (v{project_version})"
156
+ else:
157
+ latest_version_hint = GeneralUtilities.empty_string
158
+ reference_versions_html_lines.append(f' <h2>{version_identifier_of_project}{latest_version_hint}</h2>')
159
+ reference_versions_html_lines.append(" Contained codeunits:<br/>")
160
+ reference_versions_html_lines.append(" <ul>")
161
+ for codeunit_reference_folder in list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(all_available_version_identifier_folder_of_reference)):
162
+ reference_versions_html_lines.append(f' <li><a href="./{version_identifier_of_project}/{os.path.basename(codeunit_reference_folder)}/index.html">' +
163
+ f'{os.path.basename(codeunit_reference_folder)} {version_identifier_of_project}</a></li>')
164
+ reference_versions_html_lines.append(" </ul>")
165
+ reference_versions_html_lines.append(' <hr/>')
166
+ if version_identifier_of_project == "Latest":
167
+ latest_version_hint = " <h2>History</h2>"
168
+
169
+ design_file = None
170
+ design = "ModestDark"
171
+ if design == "ModestDark":
172
+ design_file = GeneralUtilities.get_modest_dark_url()
173
+ # TODO make designs from customizable sources be available by a customizable name and outsource this to a class-property because this is duplicated code.
174
+ if design_file is None:
175
+ design_html = GeneralUtilities.empty_string
176
+ else:
177
+ design_html = f'<link type="text/css" rel="stylesheet" href="{design_file}" />'
178
+
179
+ reference_versions_links_file_content = " \n".join(reference_versions_html_lines)
180
+ title = f"{projectname}-reference"
181
+ reference_index_file = os.path.join(reference_folder, "index.html")
182
+ reference_index_file_content = f"""<!DOCTYPE html>
183
+ <html lang="en">
184
+
185
+ <head>
186
+ <meta charset="UTF-8">
187
+ <title>{title}</title>
188
+ {design_html}
189
+ </head>
190
+
191
+ <body>
192
+ <h1>{title}</h1>
193
+ {reference_versions_links_file_content}
194
+ </body>
195
+
196
+ </html>
197
+ """ # see https://getbootstrap.com/docs/5.1/getting-started/introduction/
198
+ GeneralUtilities.write_text_to_file(reference_index_file, reference_index_file_content)
199
+
200
+
201
+ @GeneralUtilities.check_arguments
202
+ 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:
203
+ codeunit_folder = os.path.join(repository, codeunitname)
204
+ codeunit_file = os.path.join(codeunit_folder, f"{codeunitname}.codeunit.xml")
205
+ codeunit_has_testcases = self.tFCPS_Tools_General.codeunit_has_testable_sourcecode(codeunit_file)
206
+ target_folder = os.path.join(target_folder_for_reference_repository, project_version_identifier, codeunitname)
207
+ if os.path.isdir(target_folder) and not replace_existing_content:
208
+ raise ValueError(f"Folder '{target_folder}' already exists.")
209
+ GeneralUtilities.ensure_directory_does_not_exist(target_folder)
210
+ GeneralUtilities.ensure_directory_exists(target_folder)
211
+ codeunit_version_identifier = "Latest" if project_version_identifier == "Latest" else "v"+codeunit_version
212
+ page_title = f"{codeunitname} {codeunit_version_identifier} codeunit-reference"
213
+ diff_report = f"{repository}/{codeunitname}/Other/Artifacts/DiffReport/DiffReport.html"
214
+ diff_target_folder = os.path.join(target_folder, "DiffReport")
215
+ GeneralUtilities.ensure_directory_exists(diff_target_folder)
216
+ diff_target_file = os.path.join(diff_target_folder, "DiffReport.html")
217
+ title = (f'Reference of codeunit {codeunitname} {codeunit_version_identifier} (contained in project <a href="{public_repository_url}">{projectname}</a> {project_version_identifier})')
218
+ if public_repository_url is None:
219
+ repo_url_html = GeneralUtilities.empty_string
220
+ else:
221
+ repo_url_html = f'<a href="{public_repository_url}/tree/{branch}/{codeunitname}">Source-code</a>'
222
+ if codeunit_has_testcases:
223
+ coverage_report_link = '<a href="./TestCoverageReport/index.html">Test-coverage-report</a><br>'
224
+ else:
225
+ coverage_report_link = GeneralUtilities.empty_string
226
+ index_file_for_reference = os.path.join(target_folder, "index.html")
227
+
228
+ design_file = None
229
+ design = "ModestDark"
230
+ if design == "ModestDark":
231
+ design_file = GeneralUtilities.get_modest_dark_url()
232
+ # TODO make designs from customizable sources be available by a customizable name and outsource this to a class-property because this is duplicated code.
233
+ if design_file is None:
234
+ design_html = GeneralUtilities.empty_string
235
+ else:
236
+ design_html = f'<link type="text/css" rel="stylesheet" href="{design_file}" />'
237
+
238
+ index_file_content = f"""<!DOCTYPE html>
239
+ <html lang="en">
240
+
241
+ <head>
242
+ <meta charset="UTF-8">
243
+ <title>{page_title}</title>
244
+ {design_html}
245
+ </head>
246
+
247
+ <body>
248
+ <h1>{title}</h1>
249
+ <hr/>
250
+ Available reference-content for {codeunitname}:<br>
251
+ {repo_url_html}<br>
252
+ <!--TODO add artefacts-link: <a href="./x">Artefacts</a><br>-->
253
+ <a href="./Reference/index.html">Reference</a><br>
254
+ <a href="./DiffReport/DiffReport.html">Diff-report</a><br>
255
+ {coverage_report_link}
256
+ </body>
257
+
258
+ </html>
259
+ """
260
+
261
+ GeneralUtilities.ensure_file_exists(index_file_for_reference)
262
+ GeneralUtilities.write_text_to_file(index_file_for_reference, index_file_content)
263
+ other_folder_in_repository = os.path.join(repository, codeunitname, "Other")
264
+ source_generatedreference = os.path.join(other_folder_in_repository, "Artifacts", "Reference")
265
+ target_generatedreference = os.path.join(target_folder, "Reference")
266
+ shutil.copytree(source_generatedreference, target_generatedreference)
267
+
268
+ shutil.copyfile(diff_report, diff_target_file)
269
+
270
+ if codeunit_has_testcases:
271
+ source_testcoveragereport = os.path.join(other_folder_in_repository, "Artifacts", "TestCoverageReport")
272
+ if os.path.isdir(source_testcoveragereport): # check, because it is not a mandatory artifact. if the artifact is not available, the user gets already a warning.
273
+ target_testcoveragereport = os.path.join(target_folder, "TestCoverageReport")
274
+ shutil.copytree(source_testcoveragereport, target_testcoveragereport)
275
+
276
+
277
+
278
+ class TFCPS_MergeToStable_CLI:
279
+
280
+ @staticmethod
281
+ def get_with_overwritable_defaults(file:str,default_loglevel:LogLevel=None,default_source_branch:str=None,default_additionalargumentsfile:str=None,default_target_branch:str=None,common_remote_name:str=None,build_repo_main_branch_name:str=None,reference_repo_main_branch_name:str=None,reference_remote_name:str=None,build_repo_remote_name:str=None,artifacts_target_folder:str=None,common_remote_url:str=None)->TFCPS_MergeToMain:
282
+ parser = argparse.ArgumentParser()
283
+ verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
284
+ parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
285
+ parser.add_argument('-s', '--sourcebranch', required=False)#default="main"
286
+ parser.add_argument('-t', '--targetbranch', required=False)#default="stable"
287
+ parser.add_argument( '--referencerepo', required=False, default=None)
288
+ parser.add_argument( '--commonremotename', required=False, default=None)
289
+ parser.add_argument( '--buildrepomainbranchname', required=False)#default="main"
290
+ parser.add_argument( '--referencerepomainbranchname', required=False)#default="main"
291
+ parser.add_argument( '--referenceremotename', required=False, default=None)
292
+ parser.add_argument( '--buildreporemotename', required=False, default=None)
293
+ parser.add_argument( '--artifactstargetfolder', required=False, default=None)
294
+ parser.add_argument( '--commonremoteurl', required=False, default=None)
295
+ parser.add_argument('-v', '--verbosity', required=False, help=f"Sets the loglevel. Possible values: {verbosity_values}")
296
+ args=parser.parse_args()
297
+
298
+ sc:ScriptCollectionCore=ScriptCollectionCore()
299
+
300
+ build_repo=GeneralUtilities.resolve_relative_path("../../..",file)
301
+ sc.assert_is_git_repository(build_repo)
302
+
303
+ default_product_name=os.path.basename(build_repo)[:-len("Build")]
304
+
305
+ if args.verbosity is not None:
306
+ default_loglevel=LogLevel(int( args.verbosity))
307
+ GeneralUtilities.assert_not_null(default_loglevel,"verbosity is not set")
308
+
309
+ if args.additionalargumentsfile is not None:
310
+ default_additionalargumentsfile=args.additionalargumentsfile
311
+
312
+ if args.sourcebranch is not None:
313
+ default_source_branch=args.sourcebranch
314
+ GeneralUtilities.assert_not_null(default_source_branch,"sourcebranch is not set")
315
+
316
+ if args.targetbranch is not None:
317
+ default_target_branch=args.targetbranch
318
+ GeneralUtilities.assert_not_null(default_target_branch,"targetbranch is not set")
319
+
320
+ if args.commonremotename is not None:
321
+ common_remote_name=args.commonremotename
322
+ GeneralUtilities.assert_not_null(common_remote_name,"commonremotename is not set")
323
+
324
+ if args.buildrepomainbranchname is not None:
325
+ build_repo_main_branch_name=args.buildrepomainbranchname
326
+ GeneralUtilities.assert_not_null(build_repo_main_branch_name,"buildrepomainbranchname is not set")
327
+
328
+ if args.referencerepomainbranchname is not None:
329
+ reference_repo_main_branch_name=args.referencerepomainbranchname
330
+ GeneralUtilities.assert_not_null(reference_repo_main_branch_name,"referencerepomainbranchname is not set")
331
+
332
+ if args.referenceremotename is not None:
333
+ reference_remote_name=args.referenceremotename
334
+ GeneralUtilities.assert_not_null(reference_remote_name,"referenceremotename is not set")
335
+
336
+ if args.buildreporemotename is not None:
337
+ build_repo_remote_name=args.buildreporemotename
338
+ GeneralUtilities.assert_not_null(build_repo_remote_name,"buildreporemotename is not set")
339
+
340
+ if args.artifactstargetfolder is not None:
341
+ artifacts_target_folder=args.artifactstargetfolder
342
+
343
+ if args.commonremoteurl is not None:
344
+ common_remote_url=args.commonremoteurl
345
+ GeneralUtilities.assert_not_null(common_remote_url,"commonremoteurl is not set")
346
+
347
+ repository=os.path.join(build_repo,"Submodules",default_product_name)
348
+ config:MergeToStableConfiguration=MergeToStableConfiguration(default_loglevel,default_source_branch,default_target_branch,repository,build_repo,common_remote_name,build_repo_main_branch_name,reference_repo_main_branch_name,reference_remote_name,build_repo_remote_name,artifacts_target_folder,common_remote_url,default_additionalargumentsfile)
349
+ tFCPS_MergeToMain:TFCPS_MergeToStable=TFCPS_MergeToStable(config)
350
+ return tFCPS_MergeToMain
@@ -0,0 +1,47 @@
1
+ import argparse
2
+ from ..SCLog import LogLevel
3
+ from ..ScriptCollectionCore import GeneralUtilities
4
+ from ..ScriptCollectionCore import ScriptCollectionCore
5
+ from .TFCPS_Tools_General import TFCPS_Tools_General
6
+
7
+ class TFCPS_PreBuildCodeunitsScriptConfiguration:
8
+ targetenvironmenttype:str
9
+ additionalargumentsfile:str
10
+ verbosity:LogLevel
11
+ use_cache:str
12
+ repository_folder:str=None
13
+ sc:ScriptCollectionCore=None
14
+ tfcps_Tools_General:TFCPS_Tools_General
15
+
16
+ def __init__(self,script_file:str,targetenvironmenttype:str,additionalargumentsfile:str,verbosity:LogLevel,use_cache:bool):
17
+ self.targetenvironmenttype=targetenvironmenttype
18
+ self.additionalargumentsfile=additionalargumentsfile
19
+ self.verbosity=verbosity
20
+ self.use_cache=use_cache
21
+ self.sc=ScriptCollectionCore()
22
+ self.sc.log.loglevel=self.verbosity
23
+ self.repository_folder=ScriptCollectionCore().search_repository_folder(script_file)
24
+ self.tfcps_Tools_General=TFCPS_Tools_General(self.sc)
25
+
26
+ class TFCPS_PreBuildCodeunitsScript:
27
+ configuration:TFCPS_PreBuildCodeunitsScriptConfiguration
28
+
29
+ def __init__(self,configuration:TFCPS_PreBuildCodeunitsScriptConfiguration):
30
+ self.configuration=configuration
31
+
32
+ def pre_merge(self):
33
+ pass#TODO
34
+
35
+ class TFCPS_PreBuildCodeunitsScript_CLI():
36
+
37
+ @staticmethod
38
+ @GeneralUtilities.check_arguments
39
+ def parse(script_file:str)->argparse.ArgumentParser:
40
+ parser = argparse.ArgumentParser()
41
+ verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
42
+ parser.add_argument('-e', '--targetenvironmenttype', required=False, default="QualityCheck")
43
+ parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
44
+ parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
45
+ parser.add_argument('-c', '--nocache', action='store_true', required=False, default=False)
46
+ args=parser.parse_args()
47
+ return TFCPS_PreBuildCodeunitsScript(TFCPS_PreBuildCodeunitsScriptConfiguration(script_file,args.targetenvironmenttype,args.additionalargumentsfile,LogLevel(int(args.verbosity)),not args.nocache))