Skip to content

Commit ba62b97

Browse files
authored
Update release verb to properly create tags before creating release branch (#84)
1 parent 8a691ed commit ba62b97

File tree

1 file changed

+44
-30
lines changed

1 file changed

+44
-30
lines changed

tailor_distro/manage/release.py

Lines changed: 44 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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"---\nReleasing 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

Comments
 (0)