def make_new_version(opts): LOGGER.info("Updating package version...") if not highlander([opts.major, opts.minor, opts.micro]): msg = "Can only specify one of --major, --minor or --micro" LOGGER.error(msg) raise RuntimeError(msg) fields = ['major', 'minor', 'micro'] mask = [opts.major, opts.minor, opts.micro] field = [x for x in itertools.compress(fields, mask)][0] config = load_configuration() current_version = config.package_version() # need to be on the latest develop repo_dir = repo_directory() curr_branch = current_branch(repo_dir) # make sure repo is clean if has_unstaged_changes(repo_dir): msg = ("Error: Unstaged changes are present on the branch {}" "Please commit them or clean up before proceeding" ).format(curr_branch) LOGGER.error(msg) raise RuntimeError(msg) # update cirrus conf new_version = bump_version_field(current_version, field) msg = "Bumping version from {prev} to {new} on branch {branch}".format( prev=current_version, new=new_version, branch=curr_branch) LOGGER.info(msg) config.update_package_version(new_version) changes = ['cirrus.conf'] if opts.bump: reqs_file = os.path.join(repo_dir, 'requirements.txt') for pkg, version in opts.bump: LOGGER.info("Bumping dependency {} to {}".format(pkg, version)) bump_package(reqs_file, pkg, version) changes.append(reqs_file) # update __version__ or equivalent version_file, version_attr = config.version_file() if version_file is not None: LOGGER.info('Updating {0} attribute in {1}'.format( version_file, version_attr)) update_version(version_file, new_version, version_attr) changes.append(version_file) # update files changed msg = "cirrus release: version bumped for {0}".format(curr_branch) LOGGER.info('Committing files: {0}'.format(','.join(changes))) LOGGER.info(msg) commit_files_optional_push(repo_dir, msg, not opts.no_remote, *changes)
def new_release(opts): """ _new_release_ - Create a new release branch in the local repo - Edit the conf to bump the version - Edit the history file with release notes """ LOGGER.info("Creating new release...") if not highlander([opts.major, opts.minor, opts.micro]): msg = "Can only specify one of --major, --minor or --micro" LOGGER.error(msg) raise RuntimeError(msg) fields = ['major', 'minor', 'micro'] mask = [opts.major, opts.minor, opts.micro] field = [x for x in itertools.compress(fields, mask)][0] config = load_configuration() # version bump: current_version = config.package_version() new_version = bump_version_field(current_version, field) # release branch branch_name = "{0}{1}".format(config.gitflow_release_prefix(), new_version) LOGGER.info('release branch is {0}'.format(branch_name)) # need to be on the latest develop repo_dir = repo_directory() # make sure the branch doesnt already exist on remote if remote_branch_exists(repo_dir, branch_name): msg = ("Error: branch {branch_name} already exists on the remote repo " "Please clean up that branch before proceeding\n" "git branch -d {branch_name}\n" "git push origin --delete {branch_name}\n").format( branch_name=branch_name) LOGGER.error(msg) raise RuntimeError(msg) # make sure repo is clean if has_unstaged_changes(repo_dir): msg = ("Error: Unstaged changes are present on the branch " "Please commit them or clean up before proceeding") LOGGER.error(msg) raise RuntimeError(msg) main_branch = config.gitflow_branch_name() checkout_and_pull(repo_dir, main_branch, pull=not opts.no_remote) # create release branch branch(repo_dir, branch_name, main_branch) # update cirrus conf config.update_package_version(new_version) changes = ['cirrus.conf'] if opts.bump: reqs_file = os.path.join(repo_dir, 'requirements.txt') for pkg, version in opts.bump: LOGGER.info("Bumping dependency {} to {}".format(pkg, version)) bump_package(reqs_file, pkg, version) changes.append(reqs_file) # update release notes file relnotes_file, relnotes_sentinel = config.release_notes() if (relnotes_file is not None) and (relnotes_sentinel is not None): LOGGER.info('Updating release notes in {0}'.format(relnotes_file)) relnotes = "Release: {0} Created: {1}\n".format( new_version, datetime.datetime.utcnow().isoformat()) relnotes += build_release_notes(repo_dir, current_version, config.release_notes_format()) update_file(relnotes_file, relnotes_sentinel, relnotes) changes.append(relnotes_file) # update __version__ or equivalent version_file, version_attr = config.version_file() if version_file is not None: LOGGER.info('Updating {0} attribute in {1}'.format( version_file, version_attr)) update_version(version_file, new_version, version_attr) changes.append(version_file) # update files changed msg = "cirrus release: new release created for {0}".format(branch_name) LOGGER.info('Committing files: {0}'.format(','.join(changes))) LOGGER.info(msg) commit_files_optional_push(repo_dir, msg, not opts.no_remote, *changes) return (new_version, field)
def test_bump_package(self): bump_package(self.file, 'argparse', '8.9.7') rf = ReqFile(self.file) rf.parse() self.assertEqual(rf['argparse'], '8.9.7')