Merge pull request #3851 from preco21/master
[platform/framework/web/crosswalk-tizen.git] / script / bump-version.py
1 #!/usr/bin/env python
2
3 import os
4 import re
5 import sys
6
7 from lib.util import execute, get_atom_shell_version, parse_version, scoped_cwd
8
9
10 SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
11
12
13 def main():
14   if len(sys.argv) != 2 or sys.argv[1] == '-h':
15     print 'Usage: bump-version.py [<version> | major | minor | patch]'
16     return 1
17
18   option = sys.argv[1]
19   increments = ['major', 'minor', 'patch', 'build']
20   if option in increments:
21     version = get_atom_shell_version()
22     versions = parse_version(version.split('-')[0])
23     versions = increase_version(versions, increments.index(option))
24   else:
25     versions = parse_version(option)
26
27   version = '.'.join(versions[:3])
28
29   with scoped_cwd(SOURCE_ROOT):
30     update_atom_gyp(version)
31     update_win_rc(version, versions)
32     update_version_h(versions)
33     update_info_plist(version)
34     update_package_json(version)
35     tag_version(version)
36
37
38 def increase_version(versions, index):
39   for i in range(index + 1, 4):
40     versions[i] = '0'
41   versions[index] = str(int(versions[index]) + 1)
42   return versions
43
44
45 def update_atom_gyp(version):
46   pattern = re.compile(" *'version%' *: *'[0-9.]+'")
47   with open('atom.gyp', 'r') as f:
48     lines = f.readlines()
49
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('atom.gyp', 'w') as f:
54         f.write(''.join(lines))
55       return
56
57
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.]+"')
63
64   win_rc = os.path.join('atom', 'browser', 'resources', 'win', 'atom.rc')
65   with open(win_rc, 'r') as f:
66     lines = f.readlines()
67
68   versions = [str(v) for v in versions]
69   for i in range(0, len(lines)):
70     line = lines[i]
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)
79
80   with open(win_rc, 'w') as f:
81     f.write(''.join(lines))
82
83
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:
87     lines = f.readlines()
88
89   for i in range(0, len(lines)):
90     line = lines[i]
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])
95
96       with open(version_h, 'w') as f:
97         f.write(''.join(lines))
98       return
99
100
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()
105
106   for i in range(0, len(lines)):
107     line = lines[i]
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)
112
113   with open(info_plist, 'w') as f:
114     f.write(''.join(lines))
115
116
117 def update_package_json(version):
118   package_json = 'package.json'
119   with open(package_json, 'r') as f:
120     lines = f.readlines()
121
122   for i in range(0, len(lines)):
123     line = lines[i];
124     if 'version' in line:
125       lines[i] = '  "version": "{0}",\n'.format(version)
126       break
127
128   with open(package_json, 'w') as f:
129     f.write(''.join(lines))
130
131
132 def tag_version(version):
133   execute(['git', 'commit', '-a', '-m', 'Bump v{0}'.format(version)])
134
135
136 if __name__ == '__main__':
137   sys.exit(main())