7 from lib.util import execute, get_electron_version, parse_version, scoped_cwd
10 SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
14 if len(sys.argv) != 2 or sys.argv[1] == '-h':
15 print 'Usage: bump-version.py [<version> | major | minor | patch]'
19 increments = ['major', 'minor', 'patch', 'build']
20 if option in increments:
21 version = get_electron_version()
22 versions = parse_version(version.split('-')[0])
23 versions = increase_version(versions, increments.index(option))
25 versions = parse_version(option)
27 version = '.'.join(versions[:3])
29 with scoped_cwd(SOURCE_ROOT):
30 update_electron_gyp(version)
31 update_win_rc(version, versions)
32 update_version_h(versions)
33 update_info_plist(version)
34 update_package_json(version)
38 def increase_version(versions, index):
39 for i in range(index + 1, 4):
41 versions[index] = str(int(versions[index]) + 1)
45 def update_electron_gyp(version):
46 pattern = re.compile(" *'version%' *: *'[0-9.]+'")
47 with open('electron.gyp', 'r') as f:
50 for i in range(0, len(lines)):
51 if pattern.match(lines[i]):
52 lines[i] = " 'version%': '{0}',\n".format(version)
53 with open('electron.gyp', 'w') as f:
54 f.write(''.join(lines))
58 def update_win_rc(version, versions):
59 pattern_fv = re.compile(' FILEVERSION [0-9,]+')
60 pattern_pv = re.compile(' PRODUCTVERSION [0-9,]+')
61 pattern_fvs = re.compile(' *VALUE "FileVersion", "[0-9.]+"')
62 pattern_pvs = re.compile(' *VALUE "ProductVersion", "[0-9.]+"')
64 win_rc = os.path.join('atom', 'browser', 'resources', 'win', 'atom.rc')
65 with open(win_rc, 'r') as f:
68 versions = [str(v) for v in versions]
69 for i in range(0, len(lines)):
71 if pattern_fv.match(line):
72 lines[i] = ' FILEVERSION {0}\r\n'.format(','.join(versions))
73 elif pattern_pv.match(line):
74 lines[i] = ' PRODUCTVERSION {0}\r\n'.format(','.join(versions))
75 elif pattern_fvs.match(line):
76 lines[i] = ' VALUE "FileVersion", "{0}"\r\n'.format(version)
77 elif pattern_pvs.match(line):
78 lines[i] = ' VALUE "ProductVersion", "{0}"\r\n'.format(version)
80 with open(win_rc, 'w') as f:
81 f.write(''.join(lines))
84 def update_version_h(versions):
85 version_h = os.path.join('atom', 'common', 'atom_version.h')
86 with open(version_h, 'r') as f:
89 for i in range(0, len(lines)):
91 if 'ATOM_MAJOR_VERSION' in line:
92 lines[i] = '#define ATOM_MAJOR_VERSION {0}\n'.format(versions[0])
93 lines[i + 1] = '#define ATOM_MINOR_VERSION {0}\n'.format(versions[1])
94 lines[i + 2] = '#define ATOM_PATCH_VERSION {0}\n'.format(versions[2])
96 with open(version_h, 'w') as f:
97 f.write(''.join(lines))
101 def update_info_plist(version):
102 info_plist = os.path.join('atom', 'browser', 'resources', 'mac', 'Info.plist')
103 with open(info_plist, 'r') as f:
104 lines = f.readlines()
106 for i in range(0, len(lines)):
108 if 'CFBundleVersion' in line:
109 lines[i + 1] = ' <string>{0}</string>\n'.format(version)
110 if 'CFBundleShortVersionString' in line:
111 lines[i + 1] = ' <string>{0}</string>\n'.format(version)
113 with open(info_plist, 'w') as f:
114 f.write(''.join(lines))
117 def update_package_json(version):
118 package_json = 'package.json'
119 with open(package_json, 'r') as f:
120 lines = f.readlines()
122 for i in range(0, len(lines)):
124 if 'version' in line:
125 lines[i] = ' "version": "{0}",\n'.format(version)
128 with open(package_json, 'w') as f:
129 f.write(''.join(lines))
132 def tag_version(version):
133 execute(['git', 'commit', '-a', '-m', 'Bump v{0}'.format(version)])
136 if __name__ == '__main__':