Merge "add a 'releasefix' mode for re-tagging existing releases"
This commit is contained in:
commit
95e0c0dc45
@ -94,7 +94,11 @@ def increment_milestone_version(old_version, release_type):
|
|||||||
|
|
||||||
|
|
||||||
def get_last_series_info(series, deliverable):
|
def get_last_series_info(series, deliverable):
|
||||||
all_series = sorted(os.listdir('deliverables'))
|
all_series = sorted(
|
||||||
|
s
|
||||||
|
for s in os.listdir('deliverables')
|
||||||
|
if s != 'series_status.yaml'
|
||||||
|
)
|
||||||
prev_series = all_series[all_series.index(series) - 1]
|
prev_series = all_series[all_series.index(series) - 1]
|
||||||
try:
|
try:
|
||||||
return get_deliverable_data(prev_series, deliverable)
|
return get_deliverable_data(prev_series, deliverable)
|
||||||
@ -174,7 +178,7 @@ def main():
|
|||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'release_type',
|
'release_type',
|
||||||
choices=('bugfix', 'feature', 'major', 'milestone', 'rc',
|
choices=('bugfix', 'feature', 'major', 'milestone', 'rc',
|
||||||
'procedural', 'eol'),
|
'procedural', 'eol', 'releasefix'),
|
||||||
help='the type of release to generate',
|
help='the type of release to generate',
|
||||||
)
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
@ -213,7 +217,8 @@ def main():
|
|||||||
)
|
)
|
||||||
logging.getLogger('urllib3.connectionpool').setLevel(logging.WARNING)
|
logging.getLogger('urllib3.connectionpool').setLevel(logging.WARNING)
|
||||||
|
|
||||||
is_procedural = args.release_type == 'procedural'
|
is_procedural = args.release_type in 'procedural'
|
||||||
|
is_retagging = is_procedural or args.release_type == 'releasefix'
|
||||||
is_eol = args.release_type == 'eol'
|
is_eol = args.release_type == 'eol'
|
||||||
force_tag = args.force
|
force_tag = args.force
|
||||||
|
|
||||||
@ -247,6 +252,7 @@ def main():
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
release_history = get_release_history(series, args.deliverable)
|
release_history = get_release_history(series, args.deliverable)
|
||||||
|
this_series_history = release_history[0]
|
||||||
last_release = get_last_release(
|
last_release = get_last_release(
|
||||||
release_history,
|
release_history,
|
||||||
args.deliverable,
|
args.deliverable,
|
||||||
@ -256,6 +262,7 @@ def main():
|
|||||||
error(err)
|
error(err)
|
||||||
last_version = last_release['version'].split('.')
|
last_version = last_release['version'].split('.')
|
||||||
LOG.debug('last_version %r', last_version)
|
LOG.debug('last_version %r', last_version)
|
||||||
|
diff_start = None
|
||||||
|
|
||||||
add_stable_branch = args.stable_branch or is_procedural
|
add_stable_branch = args.stable_branch or is_procedural
|
||||||
if args.release_type in ('milestone', 'rc'):
|
if args.release_type in ('milestone', 'rc'):
|
||||||
@ -317,6 +324,32 @@ def main():
|
|||||||
'.'.join(last_version))
|
'.'.join(last_version))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
elif args.release_type == 'releasefix':
|
||||||
|
increment = (0, 0, 1)
|
||||||
|
new_version_parts = increment_version(last_version, increment)
|
||||||
|
last_version_hashes = {
|
||||||
|
p['repo']: p['hash']
|
||||||
|
for p in last_release['projects']
|
||||||
|
}
|
||||||
|
# Go back 2 releases so the release announcement includes the
|
||||||
|
# actual changes.
|
||||||
|
try:
|
||||||
|
diff_start_release = this_series_history[-2]
|
||||||
|
except IndexError:
|
||||||
|
# We do not have 2 releases in this series yet, so go back
|
||||||
|
# to the stable branch creation point.
|
||||||
|
prev_info = get_last_series_info(series, args.deliverable)
|
||||||
|
for b in prev_info['branches']:
|
||||||
|
if b['name'].startswith('stable/'):
|
||||||
|
diff_start = b['location']
|
||||||
|
LOG.info('using branch point from previous '
|
||||||
|
'series as diff-start: %r', diff_start)
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
diff_start = diff_start_release['version']
|
||||||
|
LOG.info('using release from same series as diff-start: %r',
|
||||||
|
diff_start)
|
||||||
|
|
||||||
elif is_eol:
|
elif is_eol:
|
||||||
increment = None
|
increment = None
|
||||||
new_version_parts = None
|
new_version_parts = None
|
||||||
@ -366,7 +399,7 @@ def main():
|
|||||||
repo_info = deliverable_info['repository-settings'][repo]
|
repo_info = deliverable_info['repository-settings'][repo]
|
||||||
tarball_base = repo_info.get('tarball-base')
|
tarball_base = repo_info.get('tarball-base')
|
||||||
|
|
||||||
if args.release_type == 'procedural':
|
if is_retagging:
|
||||||
# Always use the last tagged hash, which should be coming
|
# Always use the last tagged hash, which should be coming
|
||||||
# from the previous series.
|
# from the previous series.
|
||||||
sha = last_version_hashes[repo]
|
sha = last_version_hashes[repo]
|
||||||
@ -383,20 +416,24 @@ def main():
|
|||||||
|
|
||||||
sha = gitutils.sha_for_tag(workdir, repo, version)
|
sha = gitutils.sha_for_tag(workdir, repo, version)
|
||||||
|
|
||||||
if is_procedural:
|
if is_retagging:
|
||||||
changes += 1
|
changes += 1
|
||||||
LOG.info('re-tagging %s at %s (%s)' % (repo, sha,
|
LOG.info('re-tagging %s at %s (%s)' % (repo, sha,
|
||||||
previous_tag))
|
previous_tag))
|
||||||
|
if is_procedural:
|
||||||
|
comment = 'procedural tag to support creating stable branch'
|
||||||
|
else:
|
||||||
|
comment = 'procedural tag to handle release job failure'
|
||||||
new_project = {
|
new_project = {
|
||||||
'repo': repo,
|
'repo': repo,
|
||||||
'hash': sha,
|
'hash': sha,
|
||||||
'comment': 'procedural tag to support creating stable branch',
|
'comment': comment,
|
||||||
}
|
}
|
||||||
if tarball_base:
|
if tarball_base:
|
||||||
new_project['tarball-base'] = tarball_base
|
new_project['tarball-base'] = tarball_base
|
||||||
projects.append(new_project)
|
projects.append(new_project)
|
||||||
|
|
||||||
if is_eol:
|
elif is_eol:
|
||||||
changes += 1
|
changes += 1
|
||||||
LOG.info('tagging %s EOL at %s' % (repo, sha))
|
LOG.info('tagging %s EOL at %s' % (repo, sha))
|
||||||
new_project = {
|
new_project = {
|
||||||
@ -425,10 +462,13 @@ def main():
|
|||||||
LOG.info('{} already tagged at most recent commit, skipping'.format(
|
LOG.info('{} already tagged at most recent commit, skipping'.format(
|
||||||
repo))
|
repo))
|
||||||
|
|
||||||
deliverable_info['releases'].append({
|
new_release_info = {
|
||||||
'version': new_version,
|
'version': new_version,
|
||||||
'projects': projects,
|
'projects': projects,
|
||||||
})
|
}
|
||||||
|
if diff_start:
|
||||||
|
new_release_info['diff-start'] = diff_start
|
||||||
|
deliverable_info['releases'].append(new_release_info)
|
||||||
|
|
||||||
if add_stable_branch:
|
if add_stable_branch:
|
||||||
branch_name = 'stable/{}'.format(series)
|
branch_name = 'stable/{}'.format(series)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user