def main()

in tool/release/release.py [0:0]


def main(args):
    # current version
    last_tag = subprocess.run(
        ['git', 'describe', '--abbrev=0', '--tags'],
        stdout=subprocess.PIPE).stdout.decode('utf-8').strip()
    # last_tag="4.2.3-rc1"
    # last_tag="3.2.1"
    tags = re.split("\.|-rc", last_tag)
    new_tags = [int(i) for i in tags]

    # parse args
    parser = argparse.ArgumentParser()
    parser.add_argument(
        '-y',
        default=False,
        dest='confirmed',
        action='store_true',
        help="In interactive mode, for user to confirm. Could be used in script")
    parser.add_argument('type',
                        choices=['major', 'minor', 'patch', 'rc', 'stable'],
                        help="Release types")
    args = parser.parse_args(args)

    # check eligibility of arg
    if args.type in ['major', 'minor', 'patch']:
        if len(tags) == 4:
            exit("Current type \"%s\" is not allowed in pre release(version %s)"
                 % (args.type, last_tag))
    if args.type in ['stable', 'rc']:
        if len(tags) == 3:
            exit(
                "Current type \"%s\" is not allowed in stable release(version %s)"
                % (args.type, last_tag))

    # new version
    if args.type == 'major':
        new_tags[0] += 1
        new_tags[1] = 0
        new_tags[2] = 0
        new_tags.append(0)
    elif args.type == 'minor':
        new_tags[1] += 1
        new_tags[2] = 0
        new_tags.append(0)
    elif args.type == 'patch':
        new_tags[2] += 1
        new_tags.append(0)
    elif args.type == 'stable':
        new_tags.pop(-1)
    elif args.type == 'rc':
        new_tags[3] += 1

    # ask for confirmation
    print("Please confirm bumping version from %s to %s" %
          (last_tag, tag_string(new_tags)))
    ans = "y" if args.confirmed else ""
    while ans not in ['y', 'n']:
        ans = input("OK to continue [Y/N]? ").lower()
    if ans == "y":
        print("Confirmed bumping version from %s to %s" %
              (last_tag, tag_string(new_tags)))
    else:
        exit("Aborted")

    # do the rest of the work
    # git tag -a $NEW_VERSION -m "Version: $NEW_VERSION"
    print(
        subprocess.run(
            ['git', 'tag', '-a',
             tag_string(new_tags), '-m', 'new version'],
            stdout=subprocess.PIPE).stdout)
    # git push dcslin -f --tags
    # print( subprocess.run(['git', 'push', 'dcslin', '-f', '--tags'], stdout=subprocess.PIPE).stdout) # test
    print( subprocess.run(['git', 'push', '--tags'], stdout=subprocess.PIPE).stdout)
    print("Done. Pushed to remote")