From 0486cfe7e3bafe763c57e2a7d53daa937c766506 Mon Sep 17 00:00:00 2001 From: Matthew Chen Date: Thu, 22 Jun 2017 18:24:47 -0400 Subject: [PATCH] Add script to bump build numbers. // FREEBIE --- Scripts/bump_build_number.py | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 Scripts/bump_build_number.py diff --git a/Scripts/bump_build_number.py b/Scripts/bump_build_number.py new file mode 100755 index 000000000..541940847 --- /dev/null +++ b/Scripts/bump_build_number.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python +import sys +import os +import re +import commands +import subprocess + +def fail(message): + print message + sys.exit(1) + +def find_project_root(): + path = os.path.abspath(os.curdir) + + while True: + # print 'path', path + if not os.path.exists(path): + break + git_path = os.path.join(path, '.git') + if os.path.exists(git_path): + return path + new_path = os.path.abspath(os.path.dirname(path)) + if not new_path or new_path == path: + break + path = new_path + + fail('Could not find project root path') + +if __name__ == '__main__': + project_root_path = find_project_root() + # print 'project_root_path', project_root_path + plist_path = os.path.join(project_root_path, 'Signal', 'Signal-Info.plist') + if not os.path.exists(plist_path): + fail('Could not find .plist') + + output = subprocess.check_output(['git', 'status', '--porcelain']) + if len(output.strip()) > 0: + print output + fail('Git repository has untracked files.') + output = subprocess.check_output(['git', 'diff', '--shortstat']) + if len(output.strip()) > 0: + print output + fail('Git repository has untracked files.') + + # Ensure .plist is in xml format, not binary. + output = subprocess.check_output(['plutil', '-convert', 'xml1', plist_path]) + # print 'output', output + + with open(plist_path, 'rt') as f: + text = f.read() + # print 'text', text + + # CFBundleVersion + # 2.13.0.13 + file_regex = re.compile(r'CFBundleVersion\s*([\d\.]+)', re.MULTILINE) + file_match = file_regex.search(text) + # print 'match', match + if not file_match: + fail('Could not parse .plist') + + old_build_number = file_match.group(1) + print 'old_build_number:', old_build_number + + build_number_regex = re.compile(r'\.(\d+)$') + build_number_match = build_number_regex.search(old_build_number) + if not build_number_match: + fail('Could not parse .plist version') + + build_number = build_number_match.group(1) + build_number = str(1 + int(build_number)) + new_build_number = old_build_number[:build_number_match.start(1)] + build_number + print 'new_build_number:', new_build_number + + text = text[:file_match.start(1)] + new_build_number + text[file_match.end(1):] + with open(plist_path, 'wt') as f: + f.write(text) + + output = subprocess.check_output(['git', 'add', '.']) + output = subprocess.check_output(['git', 'commit', '-m', 'Bump build from to %s.\n\n// FREEBIE' % new_build_number]) + +