|
@@ -26,19 +26,20 @@ from release.utils import read_release_notes_from_changelog
|
|
from release.utils import ScriptError
|
|
from release.utils import ScriptError
|
|
from release.utils import update_init_py_version
|
|
from release.utils import update_init_py_version
|
|
from release.utils import update_run_sh_version
|
|
from release.utils import update_run_sh_version
|
|
|
|
+from release.utils import yesno
|
|
|
|
|
|
|
|
|
|
-def create_initial_branch(repository, release, base, bintray_user):
|
|
|
|
- release_branch = repository.create_release_branch(release, base)
|
|
|
|
- if base:
|
|
|
|
|
|
+def create_initial_branch(repository, args):
|
|
|
|
+ release_branch = repository.create_release_branch(args.release, args.base)
|
|
|
|
+ if args.base and args.cherries:
|
|
print('Detected patch version.')
|
|
print('Detected patch version.')
|
|
- cherries = input('Indicate PR#s to cherry-pick then press Enter:\n')
|
|
|
|
|
|
+ cherries = input('Indicate (space-separated) PR numbers to cherry-pick then press Enter:\n')
|
|
repository.cherry_pick_prs(release_branch, cherries.split())
|
|
repository.cherry_pick_prs(release_branch, cherries.split())
|
|
|
|
|
|
- return create_bump_commit(repository, release_branch, bintray_user)
|
|
|
|
|
|
+ return create_bump_commit(repository, release_branch, args.bintray_user, args.bintray_org)
|
|
|
|
|
|
|
|
|
|
-def create_bump_commit(repository, release_branch, bintray_user):
|
|
|
|
|
|
+def create_bump_commit(repository, release_branch, bintray_user, bintray_org):
|
|
with release_branch.config_reader() as cfg:
|
|
with release_branch.config_reader() as cfg:
|
|
release = cfg.get('release')
|
|
release = cfg.get('release')
|
|
print('Updating version info in __init__.py and run.sh')
|
|
print('Updating version info in __init__.py and run.sh')
|
|
@@ -46,10 +47,10 @@ def create_bump_commit(repository, release_branch, bintray_user):
|
|
update_init_py_version(release)
|
|
update_init_py_version(release)
|
|
|
|
|
|
input('Please add the release notes to the CHANGELOG.md file, then press Enter to continue.')
|
|
input('Please add the release notes to the CHANGELOG.md file, then press Enter to continue.')
|
|
- proceed = ''
|
|
|
|
- while proceed.lower() != 'y':
|
|
|
|
|
|
+ proceed = None
|
|
|
|
+ while not proceed:
|
|
print(repository.diff())
|
|
print(repository.diff())
|
|
- proceed = input('Are these changes ok? y/N ')
|
|
|
|
|
|
+ proceed = yesno('Are these changes ok? y/N ', default=False)
|
|
|
|
|
|
if repository.diff():
|
|
if repository.diff():
|
|
repository.create_bump_commit(release_branch, release)
|
|
repository.create_bump_commit(release_branch, release)
|
|
@@ -57,7 +58,7 @@ def create_bump_commit(repository, release_branch, bintray_user):
|
|
|
|
|
|
bintray_api = BintrayAPI(os.environ['BINTRAY_TOKEN'], bintray_user)
|
|
bintray_api = BintrayAPI(os.environ['BINTRAY_TOKEN'], bintray_user)
|
|
print('Creating data repository {} on bintray'.format(release_branch.name))
|
|
print('Creating data repository {} on bintray'.format(release_branch.name))
|
|
- bintray_api.create_repository(BINTRAY_ORG, release_branch.name, 'generic')
|
|
|
|
|
|
+ bintray_api.create_repository(bintray_org, release_branch.name, 'generic')
|
|
|
|
|
|
|
|
|
|
def monitor_pr_status(pr_data):
|
|
def monitor_pr_status(pr_data):
|
|
@@ -126,21 +127,26 @@ def print_final_instructions(args):
|
|
|
|
|
|
def resume(args):
|
|
def resume(args):
|
|
try:
|
|
try:
|
|
- repository = Repository(REPO_ROOT, args.repo or NAME)
|
|
|
|
|
|
+ repository = Repository(REPO_ROOT, args.repo)
|
|
br_name = branch_name(args.release)
|
|
br_name = branch_name(args.release)
|
|
if not repository.branch_exists(br_name):
|
|
if not repository.branch_exists(br_name):
|
|
raise ScriptError('No local branch exists for this release.')
|
|
raise ScriptError('No local branch exists for this release.')
|
|
gh_release = repository.find_release(args.release)
|
|
gh_release = repository.find_release(args.release)
|
|
if gh_release and not gh_release.draft:
|
|
if gh_release and not gh_release.draft:
|
|
print('WARNING!! Found non-draft (public) release for this version!')
|
|
print('WARNING!! Found non-draft (public) release for this version!')
|
|
- proceed = input(
|
|
|
|
|
|
+ proceed = yesno(
|
|
'Are you sure you wish to proceed? Modifying an already '
|
|
'Are you sure you wish to proceed? Modifying an already '
|
|
- 'released version is dangerous! y/N '
|
|
|
|
|
|
+ 'released version is dangerous! y/N ', default=False
|
|
)
|
|
)
|
|
- if proceed.lower() != 'y':
|
|
|
|
|
|
+ if proceed.lower() is not True:
|
|
raise ScriptError('Aborting release')
|
|
raise ScriptError('Aborting release')
|
|
|
|
+
|
|
release_branch = repository.checkout_branch(br_name)
|
|
release_branch = repository.checkout_branch(br_name)
|
|
- create_bump_commit(repository, release_branch, args.bintray_user)
|
|
|
|
|
|
+ if args.cherries:
|
|
|
|
+ cherries = input('Indicate (space-separated) PR numbers to cherry-pick then press Enter:\n')
|
|
|
|
+ repository.cherry_pick_prs(release_branch, cherries.split())
|
|
|
|
+
|
|
|
|
+ create_bump_commit(repository, release_branch, args.bintray_user, args.bintray_org)
|
|
pr_data = repository.find_release_pr(args.release)
|
|
pr_data = repository.find_release_pr(args.release)
|
|
if not pr_data:
|
|
if not pr_data:
|
|
pr_data = repository.create_release_pull_request(args.release)
|
|
pr_data = repository.create_release_pull_request(args.release)
|
|
@@ -164,14 +170,13 @@ def resume(args):
|
|
|
|
|
|
def cancel(args):
|
|
def cancel(args):
|
|
try:
|
|
try:
|
|
- repository = Repository(REPO_ROOT, args.repo or NAME)
|
|
|
|
|
|
+ repository = Repository(REPO_ROOT, args.repo)
|
|
repository.close_release_pr(args.release)
|
|
repository.close_release_pr(args.release)
|
|
repository.remove_release(args.release)
|
|
repository.remove_release(args.release)
|
|
repository.remove_bump_branch(args.release)
|
|
repository.remove_bump_branch(args.release)
|
|
- # TODO: uncomment after testing is complete
|
|
|
|
- # bintray_api = BintrayAPI(os.environ['BINTRAY_TOKEN'], args.bintray_user)
|
|
|
|
- # print('Removing Bintray data repository for {}'.format(args.release))
|
|
|
|
- # bintray_api.delete_repository(BINTRAY_ORG, branch_name(args.release))
|
|
|
|
|
|
+ bintray_api = BintrayAPI(os.environ['BINTRAY_TOKEN'], args.bintray_user)
|
|
|
|
+ print('Removing Bintray data repository for {}'.format(args.release))
|
|
|
|
+ bintray_api.delete_repository(args.bintray_org, branch_name(args.release))
|
|
except ScriptError as e:
|
|
except ScriptError as e:
|
|
print(e)
|
|
print(e)
|
|
return 1
|
|
return 1
|
|
@@ -181,8 +186,8 @@ def cancel(args):
|
|
|
|
|
|
def start(args):
|
|
def start(args):
|
|
try:
|
|
try:
|
|
- repository = Repository(REPO_ROOT, args.repo or NAME)
|
|
|
|
- create_initial_branch(repository, args.release, args.base, args.bintray_user)
|
|
|
|
|
|
+ repository = Repository(REPO_ROOT, args.repo)
|
|
|
|
+ create_initial_branch(repository, args)
|
|
pr_data = repository.create_release_pull_request(args.release)
|
|
pr_data = repository.create_release_pull_request(args.release)
|
|
check_pr_mergeable(pr_data)
|
|
check_pr_mergeable(pr_data)
|
|
monitor_pr_status(pr_data)
|
|
monitor_pr_status(pr_data)
|
|
@@ -202,7 +207,7 @@ def start(args):
|
|
|
|
|
|
def finalize(args):
|
|
def finalize(args):
|
|
try:
|
|
try:
|
|
- repository = Repository(REPO_ROOT, args.repo or NAME)
|
|
|
|
|
|
+ repository = Repository(REPO_ROOT, args.repo)
|
|
img_manager = ImageManager(args.release)
|
|
img_manager = ImageManager(args.release)
|
|
pr_data = repository.find_release_pr(args.release)
|
|
pr_data = repository.find_release_pr(args.release)
|
|
if not pr_data:
|
|
if not pr_data:
|
|
@@ -282,17 +287,25 @@ def main():
|
|
help='Which version is being patched by this release'
|
|
help='Which version is being patched by this release'
|
|
)
|
|
)
|
|
parser.add_argument(
|
|
parser.add_argument(
|
|
- '--repo', '-r', dest='repo',
|
|
|
|
|
|
+ '--repo', '-r', dest='repo', default=NAME,
|
|
help='Start a release for the given repo (default: {})'.format(NAME)
|
|
help='Start a release for the given repo (default: {})'.format(NAME)
|
|
)
|
|
)
|
|
parser.add_argument(
|
|
parser.add_argument(
|
|
'-b', dest='bintray_user', required=True, metavar='USER',
|
|
'-b', dest='bintray_user', required=True, metavar='USER',
|
|
help='Username associated with the Bintray API key'
|
|
help='Username associated with the Bintray API key'
|
|
)
|
|
)
|
|
|
|
+ parser.add_argument(
|
|
|
|
+ '--bintray-org', dest='bintray_org', metavar='ORG', default=BINTRAY_ORG,
|
|
|
|
+ help='Organization name on bintray where the data repository will be created.'
|
|
|
|
+ )
|
|
parser.add_argument(
|
|
parser.add_argument(
|
|
'--destination', '-o', metavar='DIR', default='binaries',
|
|
'--destination', '-o', metavar='DIR', default='binaries',
|
|
help='Directory where release binaries will be downloaded relative to the project root'
|
|
help='Directory where release binaries will be downloaded relative to the project root'
|
|
)
|
|
)
|
|
|
|
+ parser.add_argument(
|
|
|
|
+ '--no-cherries', '-C', dest='cherries', action='store_false',
|
|
|
|
+ help='If set, the program will not prompt the user for PR numbers to cherry-pick'
|
|
|
|
+ )
|
|
args = parser.parse_args()
|
|
args = parser.parse_args()
|
|
|
|
|
|
if args.action == 'start':
|
|
if args.action == 'start':
|