summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
authorJoffrey F <joffrey@docker.com>2018-07-09 16:51:01 -0400
committerJoffrey F <joffrey@docker.com>2018-07-09 16:51:01 -0400
commitd7f5220292a9cf79cd7b214b9fe4d88a5ad8236f (patch)
treee953faf171cf63547da5e8932eff671489a82b8b /script
parent0b5f68098c9a9c5e24f1fbc02d08207f33f4c02f (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-xscript/release/release.py37
-rw-r--r--script/release/release/images.py4
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'])
+ )