electron/script/bump-version.py

226 lines
6.6 KiB
Python
Raw Normal View History

2013-11-07 04:52:26 +00:00
#!/usr/bin/env python
import os
import re
import sys
import argparse
2013-11-07 04:52:26 +00:00
from lib.util import execute, get_electron_version, parse_version, scoped_cwd, \
is_nightly, is_beta, is_stable, get_next_nightly, get_next_beta, \
get_next_stable_from_pre, get_next_stable_from_stable, clean_parse_version
2013-11-07 04:52:26 +00:00
SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
2013-11-07 04:52:26 +00:00
def main():
2017-08-29 23:55:34 +00:00
parser = argparse.ArgumentParser(
2017-10-03 19:35:49 +00:00
description='Bump version numbers. Must specify at least one of the three'
+' options:\n'
+' --bump=patch to increment patch version, or\n'
+' --stable to promote current beta to stable, or\n'
+' --version={version} to set version number directly\n'
2017-10-03 19:35:49 +00:00
+'Note that you can use both --bump and --stable '
+'simultaneously.',
formatter_class=argparse.RawTextHelpFormatter
2017-08-29 23:55:34 +00:00
)
parser.add_argument(
2017-10-03 19:35:49 +00:00
'--version',
default=None,
dest='new_version',
2017-08-29 23:55:34 +00:00
help='new version number'
)
parser.add_argument(
2017-10-03 19:35:49 +00:00
'--bump',
action='store',
default=None,
dest='bump',
help='increment [stable | beta | nightly]'
2017-08-29 23:55:34 +00:00
)
parser.add_argument(
2017-10-03 19:35:49 +00:00
'--dry-run',
action='store_true',
default= False,
dest='dry_run',
2017-08-29 23:55:34 +00:00
help='just to check that version number is correct'
)
args = parser.parse_args()
curr_version = get_electron_version()
if args.bump not in ['stable', 'beta', 'nightly']:
raise Exception('bump must be set to either stable, beta or nightly')
if is_nightly(curr_version):
if args.bump == 'nightly':
version = get_next_nightly(curr_version)
elif args.bump == 'beta':
version = get_next_beta(curr_version)
elif args.bump == 'stable':
version = get_next_stable_from_pre(curr_version)
else:
not_reached()
elif is_beta(curr_version):
if args.bump == 'nightly':
version = get_next_nightly(curr_version)
elif args.bump == 'beta':
version = get_next_beta(curr_version)
elif args.bump == 'stable':
version = get_next_stable_from_pre(curr_version)
else:
not_reached()
elif is_stable(curr_version):
if args.bump == 'nightly':
version = get_next_nightly(curr_version)
elif args.bump == 'beta':
raise Exception("You can\'t bump to a beta from stable")
elif args.bump == 'stable':
version = get_next_stable_from_stable(curr_version)
else:
not_reached()
else:
raise Exception("Invalid current version: " + curr_version)
if args.new_version == None and args.bump == None and args.stable == False:
parser.print_help()
2013-11-07 04:52:26 +00:00
return 1
versions = clean_parse_version(version)
suffix = ''
if '-' in version:
suffix = '-' + version.split('-')[1]
2018-08-17 22:15:45 +00:00
versions[3] = parse_version(version)[3]
version = version.split('-')[0]
2017-08-29 22:56:16 +00:00
if args.dry_run:
print 'new version number would be: {0}\n'.format(version + suffix)
return 0
with scoped_cwd(SOURCE_ROOT):
update_electron_gyp(version, suffix)
update_win_rc(version, versions)
2017-11-13 06:37:54 +00:00
update_version_h(versions, suffix)
update_info_plist(version)
update_package_json(version, suffix)
tag_version(version, suffix)
2013-11-07 04:52:26 +00:00
print 'Bumped to version: {0}'.format(version + suffix)
2013-11-07 04:52:26 +00:00
def not_reached():
raise Exception('Unreachable code was reached')
def increase_version(versions, index):
for i in range(index + 1, 4):
versions[i] = '0'
versions[index] = str(int(versions[index]) + 1)
return versions
2013-11-07 04:52:26 +00:00
def update_electron_gyp(version, suffix):
2018-09-11 12:53:23 +00:00
assert False, "electron.gyp must not be used anymore. We build with GN now."
2018-08-16 17:24:21 +00:00
pattern = re.compile(" *'version%' *: *'[0-9.]+(-beta[0-9.]*)?(-dev)?"
+ "(-nightly[0-9.]*)?'")
2016-03-31 16:23:04 +00:00
with open('electron.gyp', 'r') as f:
2013-11-07 04:52:26 +00:00
lines = f.readlines()
for i in range(0, len(lines)):
if pattern.match(lines[i]):
lines[i] = " 'version%': '{0}',\n".format(version + suffix)
2016-03-31 16:23:04 +00:00
with open('electron.gyp', 'w') as f:
2013-11-07 04:52:26 +00:00
f.write(''.join(lines))
return
def update_win_rc(version, versions):
pattern_fv = re.compile(' FILEVERSION [0-9,]+')
pattern_pv = re.compile(' PRODUCTVERSION [0-9,]+')
pattern_fvs = re.compile(' *VALUE "FileVersion", "[0-9.]+"')
pattern_pvs = re.compile(' *VALUE "ProductVersion", "[0-9.]+"')
2014-03-16 07:49:12 +00:00
win_rc = os.path.join('atom', 'browser', 'resources', 'win', 'atom.rc')
with open(win_rc, 'r') as f:
lines = f.readlines()
versions = [str(v) for v in versions]
for i in range(0, len(lines)):
line = lines[i]
if pattern_fv.match(line):
lines[i] = ' FILEVERSION {0}\r\n'.format(','.join(versions))
elif pattern_pv.match(line):
lines[i] = ' PRODUCTVERSION {0}\r\n'.format(','.join(versions))
elif pattern_fvs.match(line):
lines[i] = ' VALUE "FileVersion", "{0}"\r\n'.format(version)
elif pattern_pvs.match(line):
lines[i] = ' VALUE "ProductVersion", "{0}"\r\n'.format(version)
with open(win_rc, 'w') as f:
f.write(''.join(lines))
2017-11-13 06:37:54 +00:00
def update_version_h(versions, suffix):
2014-03-16 07:49:12 +00:00
version_h = os.path.join('atom', 'common', 'atom_version.h')
with open(version_h, 'r') as f:
lines = f.readlines()
for i in range(0, len(lines)):
line = lines[i]
if 'ATOM_MAJOR_VERSION' in line:
lines[i] = '#define ATOM_MAJOR_VERSION {0}\n'.format(versions[0])
lines[i + 1] = '#define ATOM_MINOR_VERSION {0}\n'.format(versions[1])
2013-11-07 08:59:33 +00:00
lines[i + 2] = '#define ATOM_PATCH_VERSION {0}\n'.format(versions[2])
2017-11-13 17:27:02 +00:00
if (suffix):
lines[i + 3] = '#define ATOM_PRE_RELEASE_VERSION {0}\n'.format(suffix)
else:
lines[i + 3] = '// #define ATOM_PRE_RELEASE_VERSION\n'
with open(version_h, 'w') as f:
f.write(''.join(lines))
return
def update_info_plist(version):
2014-03-16 07:49:12 +00:00
info_plist = os.path.join('atom', 'browser', 'resources', 'mac', 'Info.plist')
with open(info_plist, 'r') as f:
lines = f.readlines()
for i in range(0, len(lines)):
line = lines[i]
if 'CFBundleVersion' in line:
lines[i + 1] = ' <string>{0}</string>\n'.format(version)
if 'CFBundleShortVersionString' in line:
lines[i + 1] = ' <string>{0}</string>\n'.format(version)
with open(info_plist, 'w') as f:
f.write(''.join(lines))
def update_package_json(version, suffix):
2015-12-10 11:46:06 +00:00
package_json = 'package.json'
with open(package_json, 'r') as f:
lines = f.readlines()
for i in range(0, len(lines)):
line = lines[i];
if 'version' in line:
lines[i] = ' "version": "{0}",\n'.format(version + suffix)
2015-12-10 11:46:06 +00:00
break
with open(package_json, 'w') as f:
f.write(''.join(lines))
def tag_version(version, suffix):
execute([
'git',
'commit',
'-a',
'-m',
'Bump v{0}'.format(version + suffix),
'-n'
])
2013-11-07 04:52:26 +00:00
if __name__ == '__main__':
sys.exit(main())