@@ -34,6 +34,11 @@ def execute(self, rosdistro_repo, repositories, release_version, dry_run):
3434
3535 github_token = get_github_token ()
3636
37+ # If list of repositories is a single item with a string for all repos, convert to a proper list
38+ if len (repositories ) == 1 :
39+ repositories = repositories [0 ].split ()
40+ print (repositories )
41+
3742 for name in repositories :
3843 click .echo (click .style (f"---\n Releasing repository '{ name } '" , fg = 'green' ), err = True )
3944 data = self .rosdistro_repo [name ]
@@ -63,48 +68,34 @@ def execute(self, rosdistro_repo, repositories, release_version, dry_run):
6368
6469 click .echo (click .style (f"Release branch '{ release_branch_name } ' does not exist, this is a new "
6570 "release" , fg = 'green' ), err = True )
66- repo .create_head (source_version , origin .refs [source_version ])
67- repo .heads [source_version ].checkout ()
71+
72+ repo .create_head (source_version , origin .refs [source_version ])
73+ repo .heads [source_version ].checkout ()
6874
6975 if new_release :
76+ latest_tag = None
77+
78+ self ._generate_changelogs_prepare_release (repo , latest_tag , temp_dir )
79+
7080 click .echo (click .style (f"Pushing source branch '{ source_version } '..." , fg = 'green' ), err = True )
7181 if not dry_run :
7282 origin .push (source_version )
83+
7384 click .echo (click .style (f"Creating release branch '{ release_branch_name } ' from "
7485 f"'{ source_version } '..." , fg = 'green' ), err = True )
7586 release_branch = repo .create_head (release_branch_name , commit = origin .refs [source_version ])
7687
77- latest_tag = None
88+ latest_tag = self . _get_current_tag ( repo , release_version )
7889
7990 else :
8091 latest_tag = self ._get_current_tag (repo , release_version )
8192 if latest_tag :
8293 click .echo (click .style (f"HEAD of { release_branch } has been released as { latest_tag } before, "
8394 "skipping." , fg = 'yellow' ), err = True )
84- self ._update_rosdistro_entry (name , latest_tag , release_branch_name )
95+ self ._update_rosdistro_entry (name , latest_tag , release_branch_name , new_release )
8596 continue
8697
87- click .echo (click .style ("Generating changelogs..." , fg = 'green' ), err = True )
88- changelog_command = ['catkin_generate_changelog' , '--skip-merges' , '-y' ]
89- try :
90- run_command (changelog_command , cwd = temp_dir , capture_output = True )
91- except subprocess .CalledProcessError as e :
92- if "Could not fetch latest tag" in e .stderr .decode ():
93- run_command (changelog_command + ['--all' ], cwd = temp_dir )
94- else :
95- # Need to print stdout/stderr, otherwise they get swallowed
96- click .echo (e .stdout )
97- click .echo (e .stderr , err = True )
98- raise
99-
100- repo .index .add (['*' ])
101- repo .index .commit ("Update changelogs" )
102-
103- click .echo (click .style ("Preparing release..." , fg = 'green' ), err = True )
104- run_command (['catkin_prepare_release' , '-y' , '--no-color' , '--no-push' , '--bump' ,
105- 'minor' if not latest_tag else 'patch' ], cwd = temp_dir )
106-
107- latest_tag = self ._get_current_tag (repo , release_version )
98+ self ._generate_changelogs_prepare_release (repo , latest_tag , temp_dir )
10899
109100 if not dry_run :
110101 click .echo (click .style (f"Pushing release branch '{ release_branch_name } '..." , fg = 'green' ), err = True )
@@ -117,22 +108,22 @@ def execute(self, rosdistro_repo, repositories, release_version, dry_run):
117108 )
118109 origin .push (latest_tag )
119110
120- self ._update_rosdistro_entry (name , latest_tag , release_branch_name )
111+ self ._update_rosdistro_entry (name , latest_tag , release_branch_name , new_release )
121112
122- def _update_rosdistro_entry (self , name , latest_tag , release_branch_name ):
123- if latest_tag :
113+ def _update_rosdistro_entry (self , name , latest_tag , release_branch_name , new_release ):
114+ if new_release :
124115 msg = f"Updating rosdistro with release of '{ name } ' as version { latest_tag } "
125116 else :
126117 msg = f"Updating rosdistro with release branch of '{ name } ' as { release_branch_name } "
127118
128119 click .echo (click .style (msg , fg = 'yellow' ), err = True )
129120 data = self .rosdistro_repo [name ]
130121 data .source_repository .version = release_branch_name
131- if data .release_repository is None and latest_tag :
122+ if data .release_repository is None and latest_tag and not new_release :
132123 data .release_repository = ReleaseRepositorySpecification (
133124 name , {'version' : latest_tag , 'url' : data .source_repository .url , 'tags' : {'release' : '{{ version }}' }}
134125 )
135- elif latest_tag :
126+ elif latest_tag and not new_release :
136127 data .release_repository .version = latest_tag
137128
138129 self .rosdistro_repo .write_internal_distro (msg )
@@ -152,3 +143,26 @@ def _get_current_tag(self, repo, release_version):
152143
153144 click .echo (click .style (f"Found { latest_tag } " , fg = 'green' ), err = True )
154145 return latest_tag
146+
147+ def _generate_changelogs_prepare_release (self , repo , latest_tag , temp_dir ):
148+ """Generate changelogs and run catkin_prepare_release."""
149+ click .echo (click .style ("Generating changelogs..." , fg = 'green' ), err = True )
150+ changelog_command = ['catkin_generate_changelog' , '--skip-merges' , '-y' ]
151+
152+ try :
153+ run_command (changelog_command , cwd = temp_dir , capture_output = True )
154+ except subprocess .CalledProcessError as e :
155+ if "Could not fetch latest tag" in e .stderr .decode ():
156+ run_command (changelog_command + ['--all' ], cwd = temp_dir )
157+ else :
158+ # Need to print stdout/stderr, otherwise they get swallowed
159+ click .echo (e .stdout )
160+ click .echo (e .stderr , err = True )
161+ raise
162+
163+ repo .index .add (['*' ])
164+ repo .index .commit ("Update changelogs" )
165+
166+ click .echo (click .style ("Preparing release..." , fg = 'green' ), err = True )
167+ run_command (['catkin_prepare_release' , '-y' , '--no-color' , '--no-push' , '--bump' ,
168+ 'minor' if not latest_tag else 'patch' ], cwd = temp_dir )
0 commit comments