bump-version.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #!/usr/bin/env python
  2. import os
  3. import re
  4. import sys
  5. from lib.util import execute, get_electron_version, parse_version, scoped_cwd
  6. SOURCE_ROOT = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
  7. def main():
  8. if len(sys.argv) != 2 or sys.argv[1] == '-h':
  9. print 'Usage: bump-version.py [<version> | major | minor | patch]'
  10. return 1
  11. option = sys.argv[1]
  12. increments = ['major', 'minor', 'patch', 'build']
  13. if option in increments:
  14. version = get_electron_version()
  15. versions = parse_version(version.split('-')[0])
  16. versions = increase_version(versions, increments.index(option))
  17. else:
  18. versions = parse_version(option)
  19. version = '.'.join(versions[:3])
  20. with scoped_cwd(SOURCE_ROOT):
  21. update_electron_gyp(version)
  22. update_win_rc(version, versions)
  23. update_version_h(versions)
  24. update_info_plist(version)
  25. update_package_json(version)
  26. tag_version(version)
  27. def increase_version(versions, index):
  28. for i in range(index + 1, 4):
  29. versions[i] = '0'
  30. versions[index] = str(int(versions[index]) + 1)
  31. return versions
  32. def update_electron_gyp(version):
  33. pattern = re.compile(" *'version%' *: *'[0-9.]+'")
  34. with open('electron.gyp', 'r') as f:
  35. lines = f.readlines()
  36. for i in range(0, len(lines)):
  37. if pattern.match(lines[i]):
  38. lines[i] = " 'version%': '{0}',\n".format(version)
  39. with open('electron.gyp', 'w') as f:
  40. f.write(''.join(lines))
  41. return
  42. def update_win_rc(version, versions):
  43. pattern_fv = re.compile(' FILEVERSION [0-9,]+')
  44. pattern_pv = re.compile(' PRODUCTVERSION [0-9,]+')
  45. pattern_fvs = re.compile(' *VALUE "FileVersion", "[0-9.]+"')
  46. pattern_pvs = re.compile(' *VALUE "ProductVersion", "[0-9.]+"')
  47. win_rc = os.path.join('atom', 'browser', 'resources', 'win', 'atom.rc')
  48. with open(win_rc, 'r') as f:
  49. lines = f.readlines()
  50. versions = [str(v) for v in versions]
  51. for i in range(0, len(lines)):
  52. line = lines[i]
  53. if pattern_fv.match(line):
  54. lines[i] = ' FILEVERSION {0}\r\n'.format(','.join(versions))
  55. elif pattern_pv.match(line):
  56. lines[i] = ' PRODUCTVERSION {0}\r\n'.format(','.join(versions))
  57. elif pattern_fvs.match(line):
  58. lines[i] = ' VALUE "FileVersion", "{0}"\r\n'.format(version)
  59. elif pattern_pvs.match(line):
  60. lines[i] = ' VALUE "ProductVersion", "{0}"\r\n'.format(version)
  61. with open(win_rc, 'w') as f:
  62. f.write(''.join(lines))
  63. def update_version_h(versions):
  64. version_h = os.path.join('atom', 'common', 'atom_version.h')
  65. with open(version_h, 'r') as f:
  66. lines = f.readlines()
  67. for i in range(0, len(lines)):
  68. line = lines[i]
  69. if 'ATOM_MAJOR_VERSION' in line:
  70. lines[i] = '#define ATOM_MAJOR_VERSION {0}\n'.format(versions[0])
  71. lines[i + 1] = '#define ATOM_MINOR_VERSION {0}\n'.format(versions[1])
  72. lines[i + 2] = '#define ATOM_PATCH_VERSION {0}\n'.format(versions[2])
  73. with open(version_h, 'w') as f:
  74. f.write(''.join(lines))
  75. return
  76. def update_info_plist(version):
  77. info_plist = os.path.join('atom', 'browser', 'resources', 'mac', 'Info.plist')
  78. with open(info_plist, 'r') as f:
  79. lines = f.readlines()
  80. for i in range(0, len(lines)):
  81. line = lines[i]
  82. if 'CFBundleVersion' in line:
  83. lines[i + 1] = ' <string>{0}</string>\n'.format(version)
  84. if 'CFBundleShortVersionString' in line:
  85. lines[i + 1] = ' <string>{0}</string>\n'.format(version)
  86. with open(info_plist, 'w') as f:
  87. f.write(''.join(lines))
  88. def update_package_json(version):
  89. package_json = 'package.json'
  90. with open(package_json, 'r') as f:
  91. lines = f.readlines()
  92. for i in range(0, len(lines)):
  93. line = lines[i];
  94. if 'version' in line:
  95. lines[i] = ' "version": "{0}",\n'.format(version)
  96. break
  97. with open(package_json, 'w') as f:
  98. f.write(''.join(lines))
  99. def tag_version(version):
  100. execute(['git', 'commit', '-a', '-m', 'Bump v{0}'.format(version)])
  101. if __name__ == '__main__':
  102. sys.exit(main())