Last active
October 13, 2017 11:33
-
-
Save OmegaDroid/22b6e15b2050841d5733095509a97258 to your computer and use it in GitHub Desktop.
Script for upping the current version tag on a repo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
import subprocess | |
from argparse import ArgumentParser | |
import re | |
def parse_args(): | |
parser = ArgumentParser() | |
parser.add_argument('--dev', '-d', action='store_true') | |
parser.add_argument('--no-push', action='store_false', dest='push') | |
return parser.parse_args() | |
def get_current_versions(stream): | |
master_re = re.compile(r'^(\d+)\.(\d+)\.(\d+)$') | |
dev_re = re.compile(r'^(\d+)\.(\d+)\.(\d+)\.dev(\d+)$') | |
curr_master = None | |
curr_dev = None | |
for line in stream.decode().split('\n'): | |
master_match = master_re.match(line) | |
dev_match = dev_re.match(line) | |
if not curr_dev and dev_match: | |
curr_dev = [int(i) for i in dev_match.groups()] | |
elif not curr_master and master_match: | |
curr_master = [int(i) for i in master_match.groups()] | |
if curr_dev and curr_master: | |
break | |
return ( | |
curr_master or [0, 0, 0], | |
curr_dev or [0, 0, 0, 0], | |
) | |
def get_next_version(is_dev): | |
tags_process = subprocess.Popen(['git', 'tag', '--sort=-v:refname'], stdout=subprocess.PIPE) | |
current_master, current_dev = get_current_versions(tags_process.communicate()[0]) | |
if is_dev: | |
dev_bit = 'dev{}'.format(current_dev[3] + 1) | |
if current_master != current_dev[:3]: | |
dev_bit = 'dev0' | |
version = current_master + [dev_bit] | |
else: | |
current_master[-1] += 1 | |
version = current_master | |
return '.'.join(str(i) for i in version) | |
def tag_version(version): | |
subprocess.check_call(['git', 'tag', '-a', version, '-m', '{}'.format(version)], stdout=subprocess.PIPE) | |
def push(): | |
subprocess.check_call(['git', 'push', '--tags'], stdout=subprocess.PIPE) | |
def main(): | |
args = parse_args() | |
new_version = get_next_version(args.dev) | |
tag_version(new_version) | |
if args.push: | |
push() | |
print(new_version) | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment