ScriptCollection 4.0.29__py3-none-any.whl → 4.0.34__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.
@@ -9,7 +9,6 @@ from .ScriptCollectionCore import ScriptCollectionCore
9
9
 
10
10
  class AnionBuildPlatformConfiguration:
11
11
  build_repositories_folder:str
12
- project_to_build:str
13
12
  additional_arguments_file:str
14
13
  verbosity:LogLevel
15
14
  source_branch:str
@@ -18,14 +17,12 @@ class AnionBuildPlatformConfiguration:
18
17
 
19
18
  def __init__(self,
20
19
  build_repositories_folder:str,
21
- project_to_build:str,
22
20
  additional_arguments_file:str,
23
21
  verbosity:LogLevel,
24
22
  source_branch:str,
25
23
  common_remote_name:str,
26
24
  update_dependencies:bool):
27
25
  self.build_repositories_folder=build_repositories_folder
28
- self.project_to_build=project_to_build
29
26
  self.additional_arguments_file=additional_arguments_file
30
27
  self.verbosity=verbosity
31
28
  self.source_branch=source_branch
@@ -46,11 +43,13 @@ class AnionBuildPlatform:
46
43
 
47
44
  def run(self) -> None:
48
45
  # Checkout source branch
49
- build_repo_folder:str=os.path.join(self.__configuration.build_repositories_folder,self.__configuration.project_to_build+"Build")
46
+ build_repo_folder:str=self.__configuration.build_repositories_folder
47
+ GeneralUtilities.assert_condition(build_repo_folder.endswith("Build"),f"buildrepositoriesfolder {build_repo_folder} must end with 'Build'")
50
48
  self.__sc.assert_is_git_repository(build_repo_folder)
51
- repository:str=os.path.join(self.__configuration,self.__configuration.project_to_build+"Build","Submodules",self.__configuration.project_to_build)
49
+ product_name=os.path.basename(build_repo_folder)[:-len("Build")]
50
+ repository:str=os.path.join(build_repo_folder,"Submodules",product_name)
52
51
  self.__sc.assert_is_git_repository(repository)
53
- self.__sc.assert_no_uncommitted_changes(build_repo_folder)
52
+ self.__sc.git_commit(build_repo_folder,"Updated changes")
54
53
  self.__sc.git_checkout(repository,self.__configuration.source_branch)
55
54
 
56
55
  # Pull changes from remote
@@ -60,19 +59,61 @@ class AnionBuildPlatform:
60
59
 
61
60
  #Update dependencies
62
61
  if self.__configuration.update_dependencies:
63
- self.__update_dependencies()
62
+ self.__update_dependencies(product_name)
64
63
 
65
64
  #Do release
66
65
  scripts_folder:str=os.path.join(build_repo_folder,"Scripts","CreateRelease")
67
- self.__sc.run_program("python","MergeToMain.py",scripts_folder)
68
- self.__sc.run_program("python","MergeToStable.py",scripts_folder)
66
+
67
+ merge_to_main_arguments=""
68
+ #if self.__configuration.project_to_build is not None:
69
+ # merge_to_main_arguments+=f" --productname {self.__configuration.project_to_build}"
70
+ if self.__configuration.source_branch is not None:
71
+ merge_to_main_arguments+=f" --mergesourcebranch {self.__configuration.source_branch}"
72
+ #if self.__configuration.additional_arguments_file is not None:
73
+ # merge_to_main_arguments+=f" --additionalargumentsfile {self.__configuration.additional_arguments_file}"
74
+ #if self.__configuration.main_branch is not None:
75
+ # merge_to_main_arguments+=f" --mainbranch {self.__configuration.main_branch}"
76
+ #if self.__configuration.common_remote_name is not None:
77
+ # merge_to_main_arguments+=f" --commonremotename {self.__configuration.common_remote_name}"
78
+ if self.__configuration.verbosity is not None:
79
+ merge_to_main_arguments+=f" --verbosity {self.__configuration.verbosity.value}"
80
+ self.__sc.run_program("python",f"MergeToMain.py{merge_to_main_arguments}",scripts_folder,print_live_output=True)
81
+
82
+ merge_to_stable_arguments=""
83
+ #if self.__configuration.project_to_build is not None:
84
+ # merge_to_stable_arguments+=f" --productname {self.__configuration.project_to_build}"
85
+ #if self.__configuration.additional_arguments_file is not None:
86
+ # merge_to_stable_arguments+=f" --additionalargumentsfile {self.__configuration.additional_arguments_file}"
87
+ #if self.__configuration.source_branch is not None:
88
+ # merge_to_stable_arguments+=f" --sourcebranch {self.__configuration.source_branch}"
89
+ #if self.__configuration.main_branch is not None:
90
+ # merge_to_stable_arguments+=f" --targetbranch {self.__configuration.main_branch}"
91
+ #if self.__configuration.reference_repo is not None:
92
+ # merge_to_stable_arguments+=f" --referencerepo {self.__configuration.referencerepo}"
93
+ #if self.__configuration.common_remote_name is not None:
94
+ # merge_to_stable_arguments+=f" --commonremotename {self.__configuration.common_remote_name}"
95
+ #if self.__configuration.build_repo_main_branch_name is not None:
96
+ # merge_to_stable_arguments+=f" --buildrepomainbranchname {self.__configuration.build_repo_main_branch_name}"
97
+ #if self.__configuration.reference_repo_main_branch_name is not None:
98
+ # merge_to_stable_arguments+=f" --referencerepomainbranchname {self.__configuration.reference_repo_main_branch_name}"
99
+ #if self.__configuration.reference_remote_name is not None:
100
+ # merge_to_stable_arguments+=f" --referenceremotename {self.__configuration.reference_remote_name}"
101
+ #if self.__configuration.build_repo_remote_name is not None:
102
+ # merge_to_stable_arguments+=f" --buildreporemotename {self.__configuration.build_repo_remote_name}"
103
+ #if self.__configuration.artifacts_target_folder is not None:
104
+ # merge_to_stable_arguments+=f" --artifactstargetfolder {self.__configuration.artifacts_target_folder}"
105
+ #if self.__configuration.common_remote_url is not None:
106
+ # merge_to_stable_arguments+=f" --commonremoteurl {self.__configuration.common_remote_url}"
107
+ if self.__configuration.verbosity is not None:
108
+ merge_to_stable_arguments+=f" --verbosity {self.__configuration.verbosity.value}"
109
+ self.__sc.run_program("python",f"MergeToStable.py{merge_to_stable_arguments}",scripts_folder,print_live_output=True)
69
110
 
70
111
  #prepare for next-release
71
112
  self.__sc.git_checkout(repository,self.__configuration.source_branch)
72
113
 
73
- def __update_dependencies(self) -> None:
114
+ def __update_dependencies(self,product_name:str) -> None:
74
115
  self.__sc.log.log("Update dependencies...")
75
- repository:str=os.path.join(self.__configuration,self.__configuration.project_to_build+"Build","Submodules",self.__configuration.project_to_build)
116
+ repository:str=os.path.join(self.__configuration,product_name+"Build","Submodules",product_name)
76
117
  self.__sc.assert_no_uncommitted_changes(repository)
77
118
  self.__sc.run_program("python","UpdateDependencies.py",os.path.join(repository,"Other","Scripts"))
78
119
  codeunits:list[str]=self._tFCPS_Tools_General.get_codeunits(repository)
@@ -110,15 +151,16 @@ class AnionBuildPlatform:
110
151
  class TFCPS_AnionBuildPlatform_CLI:
111
152
 
112
153
  @staticmethod
113
- def get_with_overwritable_defaults(default_project_to_build:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_build_repositories_folder:str=None,default_source_branch:str=None,default_remote_name:str=None)->AnionBuildPlatform:
154
+ def get_with_overwritable_defaults(default_project_to_build:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_build_repositories_folder:str=None,default_source_branch:str=None,default_main_branch:str=None,default_remote_name:str=None)->AnionBuildPlatform:
114
155
  parser = argparse.ArgumentParser()
115
156
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
116
157
  parser.add_argument('-b', '--buildrepositoriesfolder', required=False,default=None)
117
158
  parser.add_argument('-p', '--projecttobuild', required=False, default=None)
118
159
  parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
119
- parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
120
- parser.add_argument('-s', '--sourcebranch', required=False, default="other/next-release")
121
- parser.add_argument('-r', '--defaultremotename', required=False, default="origin")
160
+ parser.add_argument('-v', '--verbosity', required=False, help=f"Sets the loglevel. Possible values: {verbosity_values}")
161
+ parser.add_argument('-s', '--sourcebranch', required=False)#other/next-release
162
+ parser.add_argument('-m', '--mainbranch', required=False)#main
163
+ parser.add_argument('-r', '--defaultremotename', required=False)#origin
122
164
  parser.add_argument('-u', '--updatedependencies', required=False, action='store_true', default=False)
123
165
  args=parser.parse_args()
124
166
 
@@ -128,16 +170,18 @@ class TFCPS_AnionBuildPlatform_CLI:
128
170
  if args.buildrepositoriesfolder is not None:
129
171
  default_build_repositories_folder=args.buildrepositoriesfolder
130
172
 
131
- current_folder=os.getcwd()
173
+ scripts_folder=os.getcwd()
132
174
 
133
175
  if default_build_repositories_folder is None:
134
- if os.path.basename(current_folder).endswith("Build"):
135
- default_build_repositories_folder=os.path.dirname(current_folder)
176
+ parent_parent_folder=GeneralUtilities.resolve_relative_path("../..",scripts_folder)
177
+ if os.path.basename(parent_parent_folder).endswith("Build"):
178
+ default_build_repositories_folder=os.path.dirname(parent_parent_folder)
136
179
  GeneralUtilities.assert_not_null(default_build_repositories_folder,"buildrepositoriesfolder is not set")
137
180
 
138
181
  if default_project_to_build is None:
139
- if os.path.basename(current_folder).endswith("Build"):
140
- default_project_to_build=os.path.basename(current_folder)[:-len("Build")]
182
+ parent_parent_folder=GeneralUtilities.resolve_relative_path("../..",scripts_folder)
183
+ if os.path.basename(parent_parent_folder).endswith("Build"):
184
+ default_project_to_build=os.path.basename(parent_parent_folder)[:-len("Build")]
141
185
  GeneralUtilities.assert_not_null(default_project_to_build,"projecttobuild is not set")
142
186
 
143
187
  if args.verbosity is not None:
@@ -155,6 +199,6 @@ class TFCPS_AnionBuildPlatform_CLI:
155
199
  default_remote_name=args.defaultremotename
156
200
  GeneralUtilities.assert_not_null(default_remote_name,"defaultremotename is not set")
157
201
 
158
- config:AnionBuildPlatformConfiguration=AnionBuildPlatformConfiguration(default_build_repositories_folder,default_project_to_build,default_additionalargumentsfile,default_loglevel,default_source_branch,default_remote_name,args.updatedependencies)
202
+ config:AnionBuildPlatformConfiguration=AnionBuildPlatformConfiguration(default_build_repositories_folder,default_additionalargumentsfile,default_loglevel,default_source_branch,default_remote_name,args.updatedependencies)
159
203
  tFCPS_MergeToMain:AnionBuildPlatform=AnionBuildPlatform(config)
160
204
  return tFCPS_MergeToMain
@@ -859,6 +859,6 @@ def CreateRelease()->int:
859
859
  arguments=f"CreateRelease.py --buildrepositoriesfolder {build_repo_folder} --verbosity {verbosity} --sourcebranch {args.sourcebranch}"
860
860
  if args.updatedependencies:
861
861
  arguments=arguments+" --updatedependencies"
862
- sc.run_program("python", arguments, scripts_folder)
862
+ sc.run_program("python", arguments, scripts_folder,print_live_output=True)
863
863
 
864
864
  return 0
@@ -36,7 +36,7 @@ from .ProgramRunnerPopen import ProgramRunnerPopen
36
36
  from .ProgramRunnerEpew import ProgramRunnerEpew, CustomEpewArgument
37
37
  from .SCLog import SCLog, LogLevel
38
38
 
39
- version = "4.0.29"
39
+ version = "4.0.34"
40
40
  __version__ = version
41
41
 
42
42
 
@@ -17,7 +17,6 @@ class TFCPS_CreateReleaseConfiguration:
17
17
  build_repository:str
18
18
  repository:str
19
19
  reference_repository:str
20
- reference_repo:str
21
20
  common_remote_name:str
22
21
  build_repo_main_branch_name:str
23
22
  reference_repo_main_branch_name:str
@@ -26,7 +25,7 @@ class TFCPS_CreateReleaseConfiguration:
26
25
  artifacts_target_folder:str
27
26
  common_remote_url:str
28
27
 
29
- def __init__(self, current_file: str, product_name: str,branch_to_be_released:str,log_level:LogLevel,additional_arguments_file:str,main_branch:str,stable_branch:str,reference_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):
28
+ def __init__(self, current_file: str, product_name: str,branch_to_be_released:str,log_level:LogLevel,additional_arguments_file:str,main_branch:str,stable_branch: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):
30
29
  self.product_name = product_name
31
30
  self.branch_to_be_released=branch_to_be_released
32
31
  self.additional_arguments_file=additional_arguments_file
@@ -36,7 +35,6 @@ class TFCPS_CreateReleaseConfiguration:
36
35
  self.build_repository=ScriptCollectionCore().search_repository_folder(current_file)
37
36
  self.repository=os.path.join(self.build_repository,"Submodules",product_name)
38
37
  self.reference_repository=os.path.join(self.build_repository,"Submodules",product_name+"Reference")
39
- self.reference_repo=reference_repo
40
38
  self.common_remote_name=common_remote_name
41
39
  self.build_repo_main_branch_name=build_repo_main_branch_name
42
40
  self.reference_repo_main_branch_name=reference_repo_main_branch_name
@@ -87,8 +85,8 @@ class TFCPS_CreateRelease:
87
85
  if main_branch_commit_id == stable_branch_commit_id:
88
86
  self.sc.log.log("Merge to stable-branch will not be done because there are no changed which can be released.")
89
87
  else:
90
- self.sc.log.log("Merge to stable-branch...",LogLevel.Information)
91
- mergeToStableConfiguration:MergeToStableConfiguration=MergeToStableConfiguration(tfcps_CreateReleaseConfiguration.log_level,tfcps_CreateReleaseConfiguration.main_branch,tfcps_CreateReleaseConfiguration.stable_branch,tfcps_CreateReleaseConfiguration.repository,tfcps_CreateReleaseConfiguration.build_repository,tfcps_CreateReleaseConfiguration.reference_repo,tfcps_CreateReleaseConfiguration.common_remote_name,tfcps_CreateReleaseConfiguration.build_repo_main_branch_name,tfcps_CreateReleaseConfiguration.reference_repo_main_branch_name,tfcps_CreateReleaseConfiguration.reference_remote_name,tfcps_CreateReleaseConfiguration.build_repo_remote_name,tfcps_CreateReleaseConfiguration.artifacts_target_folder,tfcps_CreateReleaseConfiguration.product_name,tfcps_CreateReleaseConfiguration.common_remote_url,tfcps_CreateReleaseConfiguration.additional_arguments_file)
88
+ self.sc.log.log("Merge to stable-branch...",LogLevel.Information)
89
+ mergeToStableConfiguration:MergeToStableConfiguration=MergeToStableConfiguration(tfcps_CreateReleaseConfiguration.log_level,tfcps_CreateReleaseConfiguration.main_branch,tfcps_CreateReleaseConfiguration.stable_branch,tfcps_CreateReleaseConfiguration.repository,tfcps_CreateReleaseConfiguration.build_repository,tfcps_CreateReleaseConfiguration.common_remote_name,tfcps_CreateReleaseConfiguration.build_repo_main_branch_name,tfcps_CreateReleaseConfiguration.reference_repo_main_branch_name,tfcps_CreateReleaseConfiguration.reference_remote_name,tfcps_CreateReleaseConfiguration.build_repo_remote_name,tfcps_CreateReleaseConfiguration.artifacts_target_folder,tfcps_CreateReleaseConfiguration.common_remote_url,tfcps_CreateReleaseConfiguration.additional_arguments_file)
92
90
  tFCPS_MergeToStable:TFCPS_MergeToStable=TFCPS_MergeToStable(mergeToStableConfiguration)
93
91
  tFCPS_MergeToStable.merge_to_stable_branch()
94
92
 
@@ -80,16 +80,14 @@ class TFCPS_MergeToMain:
80
80
  class TFCPS_MergeToMain_CLI:
81
81
 
82
82
  @staticmethod
83
- def get_with_overwritable_defaults(file:str,default_product_name:str=None,default_merge_source_branch:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_main_branch:str=None,default_common_remote_name:str=None)->TFCPS_MergeToMain:
83
+ def get_with_overwritable_defaults(file:str,default_merge_source_branch:str=None,default_loglevel:LogLevel=None,default_additionalargumentsfile:str=None,default_main_branch:str=None,default_common_remote_name:str=None)->TFCPS_MergeToMain:
84
84
  parser = argparse.ArgumentParser()
85
85
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
86
- parser.add_argument('-n', '--productname', required=False,default=None)
87
86
  parser.add_argument('-s', '--mergesourcebranch', required=False)
88
- parser.add_argument('-e', '--targetenvironmenttype', required=False, default="QualityCheck")
89
- parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
90
- parser.add_argument('-t', '--mainbranch', required=False, default="main")
91
- parser.add_argument('-r', '--commonremotename', required=False, default=None)
92
- parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
87
+ parser.add_argument('-a', '--additionalargumentsfile', required=False)
88
+ parser.add_argument('-t', '--mainbranch', required=False)
89
+ parser.add_argument('-r', '--commonremotename', required=False)
90
+ parser.add_argument('-v', '--verbosity', required=False, help=f"Sets the loglevel. Possible values: {verbosity_values}")
93
91
  args=parser.parse_args()
94
92
 
95
93
  sc:ScriptCollectionCore=ScriptCollectionCore()
@@ -97,11 +95,7 @@ class TFCPS_MergeToMain_CLI:
97
95
  build_repo=GeneralUtilities.resolve_relative_path("../../..",file)
98
96
  sc.assert_is_git_repository(build_repo)
99
97
 
100
- if args.productname is not None:
101
- default_product_name=args.productname
102
- if default_product_name is None:
103
- default_product_name=os.path.basename(build_repo)[:-len("Build")]
104
- GeneralUtilities.assert_not_null(default_product_name,"productname is not set")
98
+ default_product_name=os.path.basename(build_repo)[:-len("Build")]
105
99
 
106
100
  if args.mergesourcebranch is not None:
107
101
  default_merge_source_branch=args.mergesourcebranch#other/next-release
@@ -109,7 +103,7 @@ class TFCPS_MergeToMain_CLI:
109
103
 
110
104
  if args.verbosity is not None:
111
105
  default_loglevel=LogLevel(int( args.verbosity))
112
- GeneralUtilities.assert_not_null(default_merge_source_branch,"verbosity is not set")
106
+ GeneralUtilities.assert_not_null(default_loglevel,"verbosity is not set")
113
107
 
114
108
  if args.additionalargumentsfile is not None:
115
109
  default_additionalargumentsfile=args.additionalargumentsfile
@@ -17,31 +17,27 @@ class MergeToStableConfiguration:
17
17
  target_branch:str#stable
18
18
  repository:str
19
19
  build_repo:str
20
- reference_repo:str
21
20
  common_remote_name:str
22
21
  build_repo_main_branch_name:str
23
22
  reference_repo_main_branch_name:str
24
23
  reference_remote_name:str
25
24
  build_repo_remote_name:str
26
25
  artifacts_target_folder:str
27
- product_name:str
28
26
  common_remote_url:str
29
27
  additional_arguments_file:str
30
28
 
31
- def __init__(self,loglevel:LogLevel,source_branch:str,target_branch:str,repository:str,build_repo:str,reference_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,product_name:str,common_remote_url:str,additional_arguments_file:str):
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):
32
30
  self.log_level=loglevel
33
31
  self.source_branch=source_branch
34
32
  self.target_branch=target_branch
35
33
  self.repository=repository
36
34
  self.build_repo=build_repo
37
- self.reference_repo=reference_repo
38
35
  self.common_remote_name=common_remote_name
39
36
  self.build_repo_main_branch_name=build_repo_main_branch_name
40
37
  self.reference_repo_main_branch_name=reference_repo_main_branch_name
41
38
  self.reference_remote_name=reference_remote_name
42
39
  self.build_repo_remote_name=build_repo_remote_name
43
40
  self.artifacts_target_folder=artifacts_target_folder
44
- self.product_name=product_name
45
41
  self.common_remote_url=common_remote_url
46
42
  self.additional_arguments_file=additional_arguments_file
47
43
 
@@ -60,7 +56,7 @@ class TFCPS_MergeToStable:
60
56
  def merge_to_stable_branch(self):
61
57
  self.sc.log.loglevel=self.createRelease_configuration.log_level
62
58
  self.sc.log.log("Merge to stable-branch...")
63
- product_name:str=self.createRelease_configuration.product_name
59
+ product_name:str=os.path.basename(self.createRelease_configuration.repository)
64
60
 
65
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.")
66
62
 
@@ -69,8 +65,9 @@ class TFCPS_MergeToStable:
69
65
  self.sc.git_checkout(self.createRelease_configuration.repository, self.createRelease_configuration.source_branch)
70
66
  self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.repository)
71
67
 
72
- self.sc.assert_is_git_repository(self.createRelease_configuration.reference_repo)
73
- self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.reference_repo)
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)
74
71
 
75
72
  self.sc.assert_is_git_repository(self.createRelease_configuration.build_repo)
76
73
  self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.build_repo)
@@ -96,7 +93,7 @@ class TFCPS_MergeToStable:
96
93
  GeneralUtilities.ensure_directory_exists(target_folder)
97
94
  codeunit_version:str=self.tFCPS_Tools_General.get_version_of_codeunit(os.path.join(self.createRelease_configuration.repository,codeunit,f"{codeunit}.codeunit.xml"))
98
95
  target_file:str=os.path.join(target_folder,f"{codeunit}.v{codeunit_version}.Artifacts.zip")
99
- self.sc.run_program("tar",f"-cf {target_file} -C {source_folder} .")
96
+ self.sc.run_program_argsasarray("tar",[f"-cf",target_file,"-C",source_folder, "."])
100
97
 
101
98
  #push artifacts
102
99
  push_script:str=os.path.join( self.createRelease_configuration.build_repo,"Scripts","CreateRelease",f"PushArtifacts.{codeunit}.py")
@@ -108,7 +105,7 @@ class TFCPS_MergeToStable:
108
105
 
109
106
  # update codeunit-reference
110
107
  self.sc.log.log(f"Release artifacts of codeunit {codeunit}...")
111
- reference_folder:str=os.path.join(self.createRelease_configuration.reference_repo,"ReferenceContent")
108
+ reference_folder:str=os.path.join(reference_repo,"ReferenceContent")
112
109
  repository:str=self.createRelease_configuration.repository
113
110
  project_version:str=self.tFCPS_Tools_General.get_version_of_project(repository)
114
111
  projectname:str=self.createRelease_configuration.product_name
@@ -119,33 +116,33 @@ class TFCPS_MergeToStable:
119
116
  self.__export_codeunit_reference_content_to_reference_repository("Latest", True, reference_folder, repository, codeunit, projectname, codeunit_version, public_repository_url, main_branch_name)
120
117
 
121
118
  # Generate reference
122
- self.__generate_entire_reference(projectname, project_version, reference_folder)
119
+ self.__generate_entire_reference(projectname, project_version, reference_folder,reference_repo)
123
120
 
124
121
  self.sc.log.log("Finishing merging to stable...")
125
- self.sc.git_commit(self.createRelease_configuration.reference_repo,f"Added reference for v{project_version}")
122
+ self.sc.git_commit(reference_repo,f"Added reference for v{project_version}")
126
123
 
127
124
  self.sc.git_merge(self.createRelease_configuration.repository, self.createRelease_configuration.source_branch,self.createRelease_configuration.target_branch, True,True,None,True,True)
128
125
 
129
126
  self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.repository)
130
- self.sc.assert_no_uncommitted_changes(self.createRelease_configuration.reference_repo)
127
+ self.sc.assert_no_uncommitted_changes(reference_repo)
131
128
  self.sc.git_commit(self.createRelease_configuration.build_repo,"Updated submodules")
132
129
 
133
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)
134
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)
135
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)
136
- self.sc.git_push_with_retry(self.createRelease_configuration.reference_repo,self.createRelease_configuration.reference_remote_name,self.createRelease_configuration.reference_repo_main_branch_name,self.createRelease_configuration.reference_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)
137
134
 
138
- def __remove_outdated_version(self):
135
+ def __remove_outdated_version(self,reference_repo:str):
139
136
  now = GeneralUtilities.get_now()
140
137
  for unsupported_version in self.tFCPS_Tools_General.get_unsupported_versions(self.createRelease_configuration.repository, now):
141
- unsupported_reference_folder = f"{self.createRelease_configuration.reference_repo}/ReferenceContent/v{unsupported_version[0]}"
138
+ unsupported_reference_folder = f"{reference_repo}/ReferenceContent/v{unsupported_version[0]}"
142
139
  GeneralUtilities.ensure_directory_does_not_exist(unsupported_reference_folder)
143
140
 
144
141
 
145
142
  @GeneralUtilities.check_arguments
146
- def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str) -> None:
143
+ def __generate_entire_reference(self, projectname: str, project_version: str, reference_folder: str,reference_repo:str) -> None:
147
144
  self.sc.log.log("Remove outdated versions...")
148
- self.__remove_outdated_version()
145
+ self.__remove_outdated_version(reference_repo)
149
146
  self.sc.log.log("Generate reference...")
150
147
  all_available_version_identifier_folders_of_reference: list[str] = list(folder for folder in GeneralUtilities.get_direct_folders_of_folder(reference_folder))
151
148
  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))
@@ -280,22 +277,21 @@ class TFCPS_MergeToStable:
280
277
  class TFCPS_MergeToStable_CLI:
281
278
 
282
279
  @staticmethod
283
- def get_with_overwritable_defaults(file:str,default_product_name:str=None,default_loglevel:LogLevel=None,default_source_branch:str=None,default_additionalargumentsfile:str=None,default_target_branch:str=None,default_reference_repo: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:
280
+ 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:
284
281
  parser = argparse.ArgumentParser()
285
282
  verbosity_values = ", ".join(f"{lvl.value}={lvl.name}" for lvl in LogLevel)
286
- parser.add_argument('-n', '--productname', required=False,default=None)
287
283
  parser.add_argument('-a', '--additionalargumentsfile', required=False, default=None)
288
- parser.add_argument('-s', '--sourcebranch', required=False, default="main")
289
- parser.add_argument('-t', '--targetbranch', required=False, default="stable")
284
+ parser.add_argument('-s', '--sourcebranch', required=False)#default="main"
285
+ parser.add_argument('-t', '--targetbranch', required=False)#default="stable"
290
286
  parser.add_argument( '--referencerepo', required=False, default=None)
291
287
  parser.add_argument( '--commonremotename', required=False, default=None)
292
- parser.add_argument( '--buildrepomainbranchname', required=False, default="main")
293
- parser.add_argument( '--referencerepomainbranchname', required=False, default="main")
288
+ parser.add_argument( '--buildrepomainbranchname', required=False)#default="main"
289
+ parser.add_argument( '--referencerepomainbranchname', required=False)#default="main"
294
290
  parser.add_argument( '--referenceremotename', required=False, default=None)
295
291
  parser.add_argument( '--buildreporemotename', required=False, default=None)
296
292
  parser.add_argument( '--artifactstargetfolder', required=False, default=None)
297
293
  parser.add_argument( '--commonremoteurl', required=False, default=None)
298
- parser.add_argument('-v', '--verbosity', required=False, default=3, help=f"Sets the loglevel. Possible values: {verbosity_values}")
294
+ parser.add_argument('-v', '--verbosity', required=False, help=f"Sets the loglevel. Possible values: {verbosity_values}")
299
295
  args=parser.parse_args()
300
296
 
301
297
  sc:ScriptCollectionCore=ScriptCollectionCore()
@@ -303,11 +299,7 @@ class TFCPS_MergeToStable_CLI:
303
299
  build_repo=GeneralUtilities.resolve_relative_path("../../..",file)
304
300
  sc.assert_is_git_repository(build_repo)
305
301
 
306
- if args.productname is not None:
307
- default_product_name=args.productname
308
- if default_product_name is None:
309
- default_product_name=os.path.basename(build_repo)[:-len("Build")]
310
- GeneralUtilities.assert_not_null(default_product_name,"productname is not set")
302
+ default_product_name=os.path.basename(build_repo)[:-len("Build")]
311
303
 
312
304
  if args.verbosity is not None:
313
305
  default_loglevel=LogLevel(int( args.verbosity))
@@ -323,12 +315,6 @@ class TFCPS_MergeToStable_CLI:
323
315
  if args.targetbranch is not None:
324
316
  default_target_branch=args.targetbranch
325
317
  GeneralUtilities.assert_not_null(default_target_branch,"targetbranch is not set")
326
-
327
- if args.referencerepo is not None:
328
- default_reference_repo=args.referencerepo
329
- if default_reference_repo is None:
330
- default_reference_repo=os.path.join(build_repo,"Submodules",f"{default_product_name}Reference")
331
- GeneralUtilities.assert_not_null(default_reference_repo,"referencerepo is not set")
332
318
 
333
319
  if args.commonremotename is not None:
334
320
  common_remote_name=args.commonremotename
@@ -358,6 +344,6 @@ class TFCPS_MergeToStable_CLI:
358
344
  GeneralUtilities.assert_not_null(common_remote_url,"commonremoteurl is not set")
359
345
 
360
346
  repository=os.path.join(build_repo,"Submodules",default_product_name)
361
- config:MergeToStableConfiguration=MergeToStableConfiguration(default_loglevel,default_source_branch,default_target_branch,repository,build_repo,default_reference_repo,common_remote_name,build_repo_main_branch_name,reference_repo_main_branch_name,reference_remote_name,build_repo_remote_name,artifacts_target_folder,default_product_name,common_remote_url,default_additionalargumentsfile)
347
+ 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)
362
348
  tFCPS_MergeToMain:TFCPS_MergeToStable=TFCPS_MergeToStable(config)
363
349
  return tFCPS_MergeToMain
@@ -1087,3 +1087,19 @@ class TFCPS_Tools_General:
1087
1087
  GeneralUtilities.ensure_file_exists(file)
1088
1088
  GeneralUtilities.append_line_to_file(file, "Version;SupportBegin;SupportEnd")
1089
1089
  GeneralUtilities.append_line_to_file(file, f"{version_of_product};{GeneralUtilities.datetime_to_string(supported_from)};{GeneralUtilities.datetime_to_string(supported_until)}")
1090
+
1091
+
1092
+ @GeneralUtilities.check_arguments
1093
+ def add_github_release(self, productname: str, projectversion: str, build_artifacts_folder: str, github_username: str, repository_folder: str, additional_attached_files: list[str]) -> None:
1094
+ self.__sc.assert_is_git_repository(repository_folder)
1095
+ self.__sc.log.log(f"Create GitHub-release for {productname}...")
1096
+ github_repo = f"{github_username}/{productname}"
1097
+ artifact_files = []
1098
+ codeunits = self.get_codeunits(repository_folder)
1099
+ for codeunit in codeunits:
1100
+ artifact_files.append(self.__sc.find_file_by_extension(f"{build_artifacts_folder}/{productname}/{projectversion}/{codeunit}", "Productive.Artifacts.zip"))
1101
+ if additional_attached_files is not None:
1102
+ for additional_attached_file in additional_attached_files:
1103
+ artifact_files.append(additional_attached_file)
1104
+ changelog_file = os.path.join(repository_folder, "Other", "Resources", "Changelog", f"v{projectversion}.md")
1105
+ 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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ScriptCollection
3
- Version: 4.0.29
3
+ Version: 4.0.34
4
4
  Summary: The ScriptCollection is the place for reusable scripts.
5
5
  Home-page: https://github.com/anionDev/ScriptCollection
6
6
  Author: Marius Göcke
@@ -1,6 +1,6 @@
1
- ScriptCollection/AnionBuildPlatform.py,sha256=zji-jrb51Ur455O_JmHaHuUmp-RdzHSG_qxljzuw2Dk,8895
1
+ ScriptCollection/AnionBuildPlatform.py,sha256=57bEfg-AKkSzdZ81JyAJZ48dw4nhZioCqGrFMkp_fWk,12501
2
2
  ScriptCollection/CertificateUpdater.py,sha256=GXPxmYaW-ufOqsiP9kUYdtI6eNg1-GzrrCqsZdwW_HY,9199
3
- ScriptCollection/Executables.py,sha256=7Tsbk-1Oy-lgigyKQz5JGux_d5A5dBcRZG7OBBjPR6I,41868
3
+ ScriptCollection/Executables.py,sha256=31RgdqQDRBpY955m9NSBms5M15jwHAMQFBBtUwKbSME,41891
4
4
  ScriptCollection/GeneralUtilities.py,sha256=9Xd9aKPj3TkpVtdHXzFMILrRoXAfJCph69XRTstdsBo,49280
5
5
  ScriptCollection/ImageUpdater.py,sha256=qTe3yoqzQJY7LZdXBbjbWvrsSQaeHy1VwmOxaRzU2ig,29305
6
6
  ScriptCollection/ProcessesRunner.py,sha256=3mu4ZxzZleQo0Op6o9EYTCFiJfb6kx5ov2YfZfT89mU,1395
@@ -9,18 +9,18 @@ ScriptCollection/ProgramRunnerEpew.py,sha256=TJdDx9zIMSiCaXh8X-ekrMlbXfGtmd0Mmyx
9
9
  ScriptCollection/ProgramRunnerMock.py,sha256=uTu-aFle1W_oKjeQEmuPsFPQpvo0kRf2FrRjAPIwT5Y,37
10
10
  ScriptCollection/ProgramRunnerPopen.py,sha256=BPY7-ZMIlqT7JOKz8qlB5c0laF2Js-ijzqk09GxZC48,3821
11
11
  ScriptCollection/SCLog.py,sha256=dxGOI4E9lG5v9jk_LajXCkM5nghliCDV8YB8Ihn160s,4541
12
- ScriptCollection/ScriptCollectionCore.py,sha256=sYPWLsPSeTYeVebLrmL6NEtQwt7fUo_ytLdZRfzKv2I,140598
12
+ ScriptCollection/ScriptCollectionCore.py,sha256=T7qnI3TQjEKhZDIuAk1N9bcWquCaBUyn53MINb88KVE,140598
13
13
  ScriptCollection/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
14
  ScriptCollection/TFCPS/TFCPS_CodeUnitSpecific_Base.py,sha256=Cj89Xhzf5CRSDVH_-0JachQMsPHfjkz8jtRi_BpiGvY,25979
15
15
  ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnit.py,sha256=4rYKgTAga11NiDx8YUqz3K_Q4eX_n3kC6lvNdXEa24s,7389
16
16
  ScriptCollection/TFCPS/TFCPS_CodeUnit_BuildCodeUnits.py,sha256=DGaQk85r8P5ANDhga9pEcTiJSRpZrDykfUOFhJR-bYY,5551
17
- ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=d8L1WR2Fx-Ps-5So5fbR_fwTrSKosgzwXHu_wJUtyc8,6510
17
+ ScriptCollection/TFCPS/TFCPS_CreateRelease.py,sha256=bcJlfI062Eoq7MOIhun-_iNG7SdO1ZIuC_cylaoLI1s,6332
18
18
  ScriptCollection/TFCPS/TFCPS_Generic.py,sha256=O-0guM_LJCcZmPZJhMgTvXD2RXUJEBWWv6Bt6hDFhvM,1943
19
- ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=wX7oF_JYATofrJNQ7XtPKCg8cjr_XSAmE-Dn0BseaNo,7746
20
- ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=AhmDhGx_eS7LzkRvp_RyIJz9yuj00mvuDNyqWzo26u0,22682
19
+ ScriptCollection/TFCPS/TFCPS_MergeToMain.py,sha256=41g219jaBRZ2VQCrWM4-Trvervrt8b5oATPwIIGNpag,7244
20
+ ScriptCollection/TFCPS/TFCPS_MergeToStable.py,sha256=MQvfHe2kUzf9c_NiPqTWOWIGuurjLTgOqa5SsTt-ndE,21699
21
21
  ScriptCollection/TFCPS/TFCPS_PreBuildCodeunitsScript.py,sha256=CxdwUklhZVuJGp0vcokoH_KMXFzmlUlZwj77xFYijho,2242
22
22
  ScriptCollection/TFCPS/TFCPS_Tools_Dependencies.py,sha256=o7HI3ki3WWqlAiUsrh3Lky_w6UhYh9hdjYPGOhubQGA,414
23
- ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=Ueji9NKGK5ABhb3iWwFWtXDx-z-eS3h9GVDoxU51Ah0,68256
23
+ ScriptCollection/TFCPS/TFCPS_Tools_General.py,sha256=PmS034kSaSeL2P_h-6nWi_-RsPmKS08NGk51EfmDeEU,69477
24
24
  ScriptCollection/TFCPS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  ScriptCollection/TFCPS/Docker/TFCPS_CodeUnitSpecific_Docker.py,sha256=-g8h2gCf9rh0KJXUBeQD5d0qLJgBU3Q8DNZXM1UXC04,5259
26
26
  ScriptCollection/TFCPS/Docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -35,8 +35,8 @@ ScriptCollection/TFCPS/NodeJS/TFCPS_CodeUnitSpecific_NodeJS.py,sha256=dnuDlQXThF
35
35
  ScriptCollection/TFCPS/NodeJS/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
36
  ScriptCollection/TFCPS/Python/TFCPS_CodeUnitSpecific_Python.py,sha256=q7msAxCb5VIZ-xhFg1MfzUvWomQRKYldqmW42KFhyMU,6868
37
37
  ScriptCollection/TFCPS/Python/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
- scriptcollection-4.0.29.dist-info/METADATA,sha256=N4ln3jWftWLDJ2zEtdylMeHZzd5Gv5NQu0q85a9HYYg,7688
39
- scriptcollection-4.0.29.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- scriptcollection-4.0.29.dist-info/entry_points.txt,sha256=NeU26D6q7d8n2cmKQiOvHK21w1C7D2kxoNRJaKiyZ5w,4295
41
- scriptcollection-4.0.29.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
42
- scriptcollection-4.0.29.dist-info/RECORD,,
38
+ scriptcollection-4.0.34.dist-info/METADATA,sha256=UV6dfp9wWH4jRxEjV6psN77JBoCFfjRwVpEvQVuD1cs,7688
39
+ scriptcollection-4.0.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ scriptcollection-4.0.34.dist-info/entry_points.txt,sha256=NeU26D6q7d8n2cmKQiOvHK21w1C7D2kxoNRJaKiyZ5w,4295
41
+ scriptcollection-4.0.34.dist-info/top_level.txt,sha256=hY2hOVH0V0Ce51WB76zKkIWTUNwMUdHo4XDkR2vYVwg,17
42
+ scriptcollection-4.0.34.dist-info/RECORD,,