|  | @@ -26,6 +26,12 @@ from release.utils import update_run_sh_version
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  def create_initial_branch(repository, release, base, bintray_user):
 | 
	
		
			
				|  |  |      release_branch = repository.create_release_branch(release, base)
 | 
	
		
			
				|  |  | +    return create_bump_commit(repository, release_branch, bintray_user)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def create_bump_commit(repository, release_branch, bintray_user):
 | 
	
		
			
				|  |  | +    with release_branch.config_reader() as cfg:
 | 
	
		
			
				|  |  | +        release = cfg.get('release')
 | 
	
		
			
				|  |  |      print('Updating version info in __init__.py and run.sh')
 | 
	
		
			
				|  |  |      update_run_sh_version(release)
 | 
	
		
			
				|  |  |      update_init_py_version(release)
 | 
	
	
		
			
				|  | @@ -36,7 +42,8 @@ def create_initial_branch(repository, release, base, bintray_user):
 | 
	
		
			
				|  |  |          print(repository.diff())
 | 
	
		
			
				|  |  |          proceed = input('Are these changes ok? y/N ')
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    repository.create_bump_commit(release_branch, release)
 | 
	
		
			
				|  |  | +    if repository.diff():
 | 
	
		
			
				|  |  | +        repository.create_bump_commit(release_branch, release)
 | 
	
		
			
				|  |  |      repository.push_branch_to_remote(release_branch)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      bintray_api = BintrayAPI(os.environ['BINTRAY_TOKEN'], bintray_user)
 | 
	
	
		
			
				|  | @@ -89,17 +96,48 @@ def create_release_draft(repository, version, pr_data, files):
 | 
	
		
			
				|  |  |      return gh_release
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def print_final_instructions(gh_release):
 | 
	
		
			
				|  |  | +    print("""
 | 
	
		
			
				|  |  | +You're almost done! The following steps should be executed after you've
 | 
	
		
			
				|  |  | +verified that everything is in order and are ready to make the release public:
 | 
	
		
			
				|  |  | +1.
 | 
	
		
			
				|  |  | +2.
 | 
	
		
			
				|  |  | +3.""")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def resume(args):
 | 
	
		
			
				|  |  | -    raise NotImplementedError()
 | 
	
		
			
				|  |  |      try:
 | 
	
		
			
				|  |  |          repository = Repository(REPO_ROOT, args.repo or NAME)
 | 
	
		
			
				|  |  |          br_name = branch_name(args.release)
 | 
	
		
			
				|  |  |          if not repository.branch_exists(br_name):
 | 
	
		
			
				|  |  |              raise ScriptError('No local branch exists for this release.')
 | 
	
		
			
				|  |  | -        # release_branch = repository.checkout_branch(br_name)
 | 
	
		
			
				|  |  | +        release_branch = repository.checkout_branch(br_name)
 | 
	
		
			
				|  |  | +        create_bump_commit(repository, release_branch, args.bintray_user)
 | 
	
		
			
				|  |  | +        pr_data = repository.find_release_pr(args.release)
 | 
	
		
			
				|  |  | +        if not pr_data:
 | 
	
		
			
				|  |  | +            pr_data = repository.create_release_pull_request(args.release)
 | 
	
		
			
				|  |  | +        monitor_pr_status(pr_data)
 | 
	
		
			
				|  |  | +        downloader = BinaryDownloader(args.destination)
 | 
	
		
			
				|  |  | +        files = downloader.download_all(args.release)
 | 
	
		
			
				|  |  | +        gh_release = repository.find_release(args.release)
 | 
	
		
			
				|  |  | +        if not gh_release:
 | 
	
		
			
				|  |  | +            gh_release = create_release_draft(repository, args.release, pr_data, files)
 | 
	
		
			
				|  |  | +        elif not gh_release.draft:
 | 
	
		
			
				|  |  | +            print('WARNING!! Found non-draft (public) release for this version!')
 | 
	
		
			
				|  |  | +            proceed = input(
 | 
	
		
			
				|  |  | +                'Are you sure you wish to proceed? Modifying an already '
 | 
	
		
			
				|  |  | +                'released version is dangerous! y/N'
 | 
	
		
			
				|  |  | +            )
 | 
	
		
			
				|  |  | +            if proceed.lower() != 'y':
 | 
	
		
			
				|  |  | +                raise ScriptError('Aborting release')
 | 
	
		
			
				|  |  | +        for asset in gh_release.get_assets():
 | 
	
		
			
				|  |  | +            asset.delete_asset()
 | 
	
		
			
				|  |  | +        upload_assets(gh_release, files)
 | 
	
		
			
				|  |  |      except ScriptError as e:
 | 
	
		
			
				|  |  |          print(e)
 | 
	
		
			
				|  |  |          return 1
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    print_final_instructions(gh_release)
 | 
	
		
			
				|  |  |      return 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -134,6 +172,7 @@ def start(args):
 | 
	
		
			
				|  |  |          print(e)
 | 
	
		
			
				|  |  |          return 1
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    print_final_instructions(gh_release)
 | 
	
		
			
				|  |  |      return 0
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -147,8 +186,8 @@ def main():
 | 
	
		
			
				|  |  |          return 1
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      parser = argparse.ArgumentParser(
 | 
	
		
			
				|  |  | -        description='Orchestrate a new release of docker/compose. This tool assumes that you have'
 | 
	
		
			
				|  |  | -                    'obtained a Github API token and Bintray API key and set the GITHUB_TOKEN and'
 | 
	
		
			
				|  |  | +        description='Orchestrate a new release of docker/compose. This tool assumes that you have '
 | 
	
		
			
				|  |  | +                    'obtained a Github API token and Bintray API key and set the GITHUB_TOKEN and '
 | 
	
		
			
				|  |  |                      'BINTRAY_TOKEN environment variables accordingly.',
 | 
	
		
			
				|  |  |          epilog='''Example uses:
 | 
	
		
			
				|  |  |      * Start a new feature release (includes all changes currently in master)
 | 
	
	
		
			
				|  | @@ -158,8 +197,7 @@ def main():
 | 
	
		
			
				|  |  |      * Cancel / rollback an existing release draft
 | 
	
		
			
				|  |  |          release.py -b user cancel 1.23.0
 | 
	
		
			
				|  |  |      * Restart a previously aborted patch release
 | 
	
		
			
				|  |  | -        release.py -b user -p 1.21.0 resume 1.21.1
 | 
	
		
			
				|  |  | -    ''', formatter_class=argparse.RawTextHelpFormatter)
 | 
	
		
			
				|  |  | +        release.py -b user -p 1.21.0 resume 1.21.1''', formatter_class=argparse.RawTextHelpFormatter)
 | 
	
		
			
				|  |  |      parser.add_argument(
 | 
	
		
			
				|  |  |          'action', choices=['start', 'resume', 'cancel'],
 | 
	
		
			
				|  |  |          help='The action to be performed for this release'
 |