diff options
author | Joffrey F <joffrey@docker.com> | 2018-07-09 16:51:01 -0400 |
---|---|---|
committer | Joffrey F <joffrey@docker.com> | 2018-07-09 16:51:01 -0400 |
commit | d7f5220292a9cf79cd7b214b9fe4d88a5ad8236f (patch) | |
tree | e953faf171cf63547da5e8932eff671489a82b8b /script | |
parent | 0b5f68098c9a9c5e24f1fbc02d08207f33f4c02f (diff) |
Improve finalize robustness and allow resume using special --finalize-resume flag
Signed-off-by: Joffrey F <joffrey@docker.com>
Diffstat (limited to 'script')
-rwxr-xr-x | script/release/release.py | 37 | ||||
-rw-r--r-- | script/release/release/images.py | 4 |
2 files changed, 34 insertions, 7 deletions
diff --git a/script/release/release.py b/script/release/release.py index 736b8849..c6dc146a 100755 --- a/script/release/release.py +++ b/script/release/release.py @@ -28,6 +28,7 @@ from release.utils import ScriptError from release.utils import update_init_py_version from release.utils import update_run_sh_version from release.utils import yesno +from requests.exceptions import HTTPError from twine.commands.upload import main as twine_upload @@ -162,6 +163,24 @@ def distclean(): shutil.rmtree(folder, ignore_errors=True) +def pypi_upload(args): + print('Uploading to PyPi') + try: + twine_upload([ + 'dist/docker_compose-{}*.whl'.format(args.release), + 'dist/docker-compose-{}*.tar.gz'.format(args.release) + ]) + except HTTPError as e: + if e.response.status_code == 400 and 'File already exists' in e.message: + if not args.finalize_resume: + raise ScriptError( + 'Package already uploaded on PyPi.' + ) + print('Skipping PyPi upload - package already uploaded') + else: + raise ScriptError('Unexpected HTTP error uploading package to PyPi: {}'.format(e)) + + def resume(args): try: distclean() @@ -274,13 +293,13 @@ def finalize(args): run_setup(os.path.join(REPO_ROOT, 'setup.py'), script_args=['sdist', 'bdist_wheel']) merge_status = pr_data.merge() - if not merge_status.merged: - raise ScriptError('Unable to merge PR #{}: {}'.format(pr_data.number, merge_status.message)) - print('Uploading to PyPi') - twine_upload([ - 'dist/docker_compose-{}*.whl'.format(args.release), - 'dist/docker-compose-{}*.tar.gz'.format(args.release) - ]) + if not merge_status.merged and not args.finalize_resume: + raise ScriptError( + 'Unable to merge PR #{}: {}'.format(pr_data.number, merge_status.message) + ) + + pypi_upload(args) + img_manager.push_images() repository.publish_release(gh_release) except ScriptError as e: @@ -355,6 +374,10 @@ def main(): '--skip-ci-checks', dest='skip_ci', action='store_true', help='If set, the program will not wait for CI jobs to complete' ) + parser.add_argument( + '--finalize-resume', dest='finalize_resume', action='store_true', + help='If set, finalize will continue through steps that have already been completed.' + ) args = parser.parse_args() if args.action == 'start': diff --git a/script/release/release/images.py b/script/release/release/images.py index 24672f2b..b8f7ed3d 100644 --- a/script/release/release/images.py +++ b/script/release/release/images.py @@ -81,3 +81,7 @@ class ImageManager(object): for chunk in logstream: if 'status' in chunk: print(chunk['status']) + if 'error' in chunk: + raise ScriptError( + 'Error pushing {name}: {err}'.format(name=name, err=chunk['error']) + ) |